From 66906a14241dcb483368cd0ba9ecf91feafc28a6 Mon Sep 17 00:00:00 2001 From: leebaok Date: Thu, 31 Mar 2016 16:03:38 +0800 Subject: [PATCH] [Init] init repository with Docklet 0.2.6 --- .gitignore | 7 + CHANGES | 0 LICENSE | 26 + README.md | 199 + VERSION | 1 + bin/docklet-master | 230 + bin/docklet-worker | 124 + conf/container.conf | 51 + conf/docklet.conf.template | 133 + conf/lxc-script/lxc-ifdown | 3 + conf/lxc-script/lxc-ifup | 10 + conf/lxc-script/lxc-mount | 7 + conf/lxc-script/lxc-prestart | 8 + doc/devdoc/coding.md | 93 + doc/devdoc/config_info.md | 77 + doc/devdoc/networkmgr.md | 67 + doc/devdoc/openvswitch-vlan.md | 266 + doc/devdoc/proxy-control.md | 33 + doc/devdoc/startup.md | 45 + doc/example/example-LogisticRegression.py | 40 + prepare.sh | 69 + src/container.py | 348 ++ src/env.py | 54 + src/etcdlib.py | 202 + src/guest_control.py | 36 + src/httprest.py | 585 ++ src/imagemgr.py | 284 + src/log.py | 70 + src/lvmtool.py | 159 + src/model.py | 144 + src/monitor.py | 331 ++ src/nettools.py | 276 + src/network.py | 475 ++ src/nodemgr.py | 159 + src/proxytool.py | 31 + src/tools.py | 23 + src/userManager.py | 643 +++ src/userinit.sh | 24 + src/vclustermgr.py | 397 ++ src/worker.py | 201 + tools/DOCKLET_NOTES.txt | 17 + tools/etcd-multi-nodes.sh | 42 + tools/etcd-one-node.sh | 45 + tools/npmrc | 1 + tools/pip.conf | 2 + tools/resolv.conf | 2 + tools/sources.list | 1 + tools/start_jupyter.sh | 56 + tools/update-basefs.sh | 106 + tools/vimrc.local | 15 + web/static/avatar/default.png | Bin 0 -> 102163 bytes web/static/css/docklet.css | 54 + web/static/dist/css/AdminLTE.css | 4914 +++++++++++++++++ web/static/dist/css/AdminLTE.min.css | 6 + web/static/dist/css/flotconfig.css | 65 + web/static/dist/css/modalconfig.css | 39 + web/static/dist/css/skins/_all-skins.css | 1806 ++++++ web/static/dist/css/skins/_all-skins.min.css | 1 + web/static/dist/css/skins/skin-blue.css | 142 + web/static/dist/css/skins/skin-blue.min.css | 1 + web/static/dist/js/app.js | 758 +++ web/static/dist/js/app.min.js | 13 + web/static/img/app.png | Bin 0 -> 32937 bytes web/static/img/favicon.ico | Bin 0 -> 9662 bytes web/static/img/home.png | Bin 0 -> 491488 bytes web/static/img/logo.png | Bin 0 -> 71780 bytes web/static/img/logoname.png | Bin 0 -> 52910 bytes web/static/img/profile.png | Bin 0 -> 102163 bytes web/static/img/web.png | Bin 0 -> 27561 bytes web/static/img/workspace.png | Bin 0 -> 81627 bytes web/static/js/plot_monitor.js | 156 + web/static/js/plot_monitorReal.js | 197 + web/templates/addCluster.html | 130 + web/templates/admin.html | 173 + web/templates/base_AdminLTE.html | 290 + web/templates/config.html | 315 ++ web/templates/dashboard.html | 89 + web/templates/dashboard_guest.html | 329 ++ web/templates/error.html | 10 + web/templates/error/401.html | 30 + web/templates/error/500.html | 30 + web/templates/home.html | 113 + web/templates/image_description.html | 10 + web/templates/listcontainer.html | 102 + web/templates/login.html | 71 + web/templates/monitor/hosts.html | 145 + web/templates/monitor/hostsConAll.html | 136 + web/templates/monitor/hostsRealtime.html | 289 + web/templates/monitor/monitorUserAll.html | 65 + web/templates/monitor/monitorUserCluster.html | 74 + web/templates/monitor/status.html | 136 + web/templates/monitor/statusRealtime.html | 122 + web/templates/opfailed.html | 24 + web/templates/opsuccess.html | 24 + web/templates/saveconfirm.html | 35 + web/templates/user/activate.html | 73 + web/templates/user/info.html | 256 + web/templates/user/mailservererror.html | 30 + web/templates/user_list.html | 273 + web/web.py | 448 ++ web/webViews/admin.py | 14 + web/webViews/authenticate/auth.py | 60 + web/webViews/authenticate/login.py | 138 + web/webViews/authenticate/register.py | 14 + web/webViews/cluster.py | 297 + web/webViews/cookie_tool.py | 52 + web/webViews/dashboard.py | 53 + web/webViews/dockletrequest.py | 32 + web/webViews/log.py | 75 + web/webViews/monitor.py | 113 + web/webViews/user/grouplist.py | 23 + web/webViews/user/userActivate.py | 20 + web/webViews/user/userinfo.py | 18 + web/webViews/user/userlist.py | 56 + web/webViews/view.py | 39 + 115 files changed, 19196 insertions(+) create mode 100644 .gitignore create mode 100644 CHANGES create mode 100644 LICENSE create mode 100644 README.md create mode 100644 VERSION create mode 100755 bin/docklet-master create mode 100755 bin/docklet-worker create mode 100644 conf/container.conf create mode 100644 conf/docklet.conf.template create mode 100755 conf/lxc-script/lxc-ifdown create mode 100755 conf/lxc-script/lxc-ifup create mode 100755 conf/lxc-script/lxc-mount create mode 100755 conf/lxc-script/lxc-prestart create mode 100644 doc/devdoc/coding.md create mode 100644 doc/devdoc/config_info.md create mode 100644 doc/devdoc/networkmgr.md create mode 100644 doc/devdoc/openvswitch-vlan.md create mode 100644 doc/devdoc/proxy-control.md create mode 100644 doc/devdoc/startup.md create mode 100644 doc/example/example-LogisticRegression.py create mode 100755 prepare.sh create mode 100755 src/container.py create mode 100755 src/env.py create mode 100755 src/etcdlib.py create mode 100755 src/guest_control.py create mode 100755 src/httprest.py create mode 100755 src/imagemgr.py create mode 100755 src/log.py create mode 100755 src/lvmtool.py create mode 100755 src/model.py create mode 100755 src/monitor.py create mode 100755 src/nettools.py create mode 100755 src/network.py create mode 100755 src/nodemgr.py create mode 100755 src/proxytool.py create mode 100755 src/tools.py create mode 100755 src/userManager.py create mode 100755 src/userinit.sh create mode 100755 src/vclustermgr.py create mode 100755 src/worker.py create mode 100644 tools/DOCKLET_NOTES.txt create mode 100755 tools/etcd-multi-nodes.sh create mode 100755 tools/etcd-one-node.sh create mode 100644 tools/npmrc create mode 100644 tools/pip.conf create mode 100644 tools/resolv.conf create mode 100644 tools/sources.list create mode 100755 tools/start_jupyter.sh create mode 100755 tools/update-basefs.sh create mode 100644 tools/vimrc.local create mode 100644 web/static/avatar/default.png create mode 100644 web/static/css/docklet.css create mode 100644 web/static/dist/css/AdminLTE.css create mode 100644 web/static/dist/css/AdminLTE.min.css create mode 100644 web/static/dist/css/flotconfig.css create mode 100644 web/static/dist/css/modalconfig.css create mode 100644 web/static/dist/css/skins/_all-skins.css create mode 100644 web/static/dist/css/skins/_all-skins.min.css create mode 100644 web/static/dist/css/skins/skin-blue.css create mode 100644 web/static/dist/css/skins/skin-blue.min.css create mode 100644 web/static/dist/js/app.js create mode 100644 web/static/dist/js/app.min.js create mode 100644 web/static/img/app.png create mode 100644 web/static/img/favicon.ico create mode 100644 web/static/img/home.png create mode 100755 web/static/img/logo.png create mode 100644 web/static/img/logoname.png create mode 100644 web/static/img/profile.png create mode 100644 web/static/img/web.png create mode 100644 web/static/img/workspace.png create mode 100755 web/static/js/plot_monitor.js create mode 100755 web/static/js/plot_monitorReal.js create mode 100644 web/templates/addCluster.html create mode 100644 web/templates/admin.html create mode 100644 web/templates/base_AdminLTE.html create mode 100755 web/templates/config.html create mode 100755 web/templates/dashboard.html create mode 100644 web/templates/dashboard_guest.html create mode 100644 web/templates/error.html create mode 100755 web/templates/error/401.html create mode 100755 web/templates/error/500.html create mode 100755 web/templates/home.html create mode 100755 web/templates/image_description.html create mode 100644 web/templates/listcontainer.html create mode 100755 web/templates/login.html create mode 100644 web/templates/monitor/hosts.html create mode 100644 web/templates/monitor/hostsConAll.html create mode 100644 web/templates/monitor/hostsRealtime.html create mode 100644 web/templates/monitor/monitorUserAll.html create mode 100644 web/templates/monitor/monitorUserCluster.html create mode 100644 web/templates/monitor/status.html create mode 100644 web/templates/monitor/statusRealtime.html create mode 100644 web/templates/opfailed.html create mode 100644 web/templates/opsuccess.html create mode 100644 web/templates/saveconfirm.html create mode 100644 web/templates/user/activate.html create mode 100644 web/templates/user/info.html create mode 100644 web/templates/user/mailservererror.html create mode 100644 web/templates/user_list.html create mode 100755 web/web.py create mode 100755 web/webViews/admin.py create mode 100644 web/webViews/authenticate/auth.py create mode 100755 web/webViews/authenticate/login.py create mode 100644 web/webViews/authenticate/register.py create mode 100755 web/webViews/cluster.py create mode 100755 web/webViews/cookie_tool.py create mode 100644 web/webViews/dashboard.py create mode 100644 web/webViews/dockletrequest.py create mode 100644 web/webViews/log.py create mode 100755 web/webViews/monitor.py create mode 100644 web/webViews/user/grouplist.py create mode 100644 web/webViews/user/userActivate.py create mode 100644 web/webViews/user/userinfo.py create mode 100644 web/webViews/user/userlist.py create mode 100644 web/webViews/view.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fec9b46 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +__pycache__ +*.pyc +*.swp +__temp +*~ +.DS_Store +docklet.conf diff --git a/CHANGES b/CHANGES new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3393b29 --- /dev/null +++ b/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2016, Peking University (PKU). +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the PKU nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE.INCLUDING NEGLIGENCE OR OTHERWISE diff --git a/README.md b/README.md new file mode 100644 index 0000000..847c333 --- /dev/null +++ b/README.md @@ -0,0 +1,199 @@ +# Docklet + +## intro + +Docklet is an operating system for mini-datacener. Its goal is to help +multi-user share cluster resources effectively. Unlike the "application +framework oriented" cluster manager such as Mesos and Yarn, Docklet is +**user oriented**. In Docklet, every user has their own private +**virtual cluster (vcluster)**, which consists of a number of virtual +Linux container nodes distributed over the physical cluster. Every +vcluster is separated from others and can be operated like a real +physical cluster. Therefore, most applications, especially those +requiring a cluster environment, can run in vcluster seamlessly. + +Docklet provides a base image for creating virtual nodes. This image has +pre-installed a lot of mainstream development tools and frameworks, +including gcc/g++, openjdk, python3, R, MPI, scala, ruby, php, node.js, +texlive, mpich2, spark, +scipy/numpy/matplotlib/pandas/sympy/scikit-learn, jupyter notebook, etc. +Users can get a ready vcluster with just one click within 1 second. + +The users are free to install their specific software in their vcluster. +Docklet supports operating through **web terminal**. Users can do their +work as an administrator working on a console. The base image system is +ubuntu. The recommended way of installing new software is by +**apt-get**. + +The users manage and use their vcluster all through web. The only client +tool needed is a modern web browser, like safari, firefox, chrome. The +integrated *jupyter notebook* provides a web workspace. By visiting the +workspace, users can do coding, debugging and testing of their programs +online. The **python scipy** series of tools can even display graphical +pictures in the browser. Therefore, it is ideal for data analysis and +processing. + +Docklet only need **one** public IP address. The vclusters are +configured to use private IP address range, e.g., 172.16.0.0/16, +192.168.0.0/16, 10.0.0.0/8. A proxy is setup to help +users visit their vclusters behind the firewall/gateway. + +The Docklet system runtime consists of four components: + +- distributed file system server +- etcd server +- docklet master +- docklet worker + +## install + +Currently the docklet runtime is recommend to run in Unbuntu 15.10+. + +Ensure that python3.5 is the default python3 version. + +Unpack the docklet tarball to a directory ( /root/docklet as an +example), will get + +``` +readme.md +prepare.sh +conf/ + container.conf + docklet.conf.template + lxc-script/ +bin/ + docklet-master + docklet-worker +src/ + httprest.py + worker.py + ... +web/ + web.py +dep/ + etcd-multi-nodes.sh + etcd-one-node.sh +doc/ +tools/ + update-basefs.sh + start_jupyter.sh +``` + +If it is the first time install, users should run **prepare.sh** to +install necessary packages automatically. Note it may need to run this +script several times to successfully install all the needed packages. + +A *root* users will be created for managing the system. The password is +recorded in `FS_PREFIX/local/generated_password.txt` . + +## config ## + +The main configuration file of docklet is conf/docklet.conf. Most +default setting works for a single host environment. + +First copy docklet.conf.template to get docklet.conf. + +The following settings should be taken care of: + +- NETWORK_DEVICE : the network device to use. +- ETCD : the etcd server address. For distributed muli hosts + environment, it should be one of the ETCD public server address. + For single host environment, the default value should be OK. +- STORAGE : using disk or file to storage persistent data, for + single host, file is convenient. +- FS_PREFIX: the working dir of docklet runtime. default is + /opt/docklet. +- CLUSTER_NET: the vcluster network ip address range, default is + 172.16.0.1/16. This network range should all be allocated to and + managed by docklet. +- PROXY_PORT : the public port of docklet. Users use + this port to visit the docklet system. +- PORTAL_URL : the portal of the system. Users access the system + by visiting this address. If the system is behind a firewall, then + a reverse proxy should be setup. + +## start ## + +### distributed file system ### + +For multi hosts distributed environment, a distributed file system is +needed to store global data. Currently, glusterfs has been tested. +Lets presume the file system server export filesystem as nfs +**fileserver:/pub** : + +In each physical host to run docklet, mount **fileserver:/pub** to +**FS_PEFIX/global** . + +For single host environment, it need not to configure distributed +file system. + +### etcd ### + +For single host environment, start **dep/etcd-one-node.sh** . Some recent +Ubuntu releases have included **etcd** in the repository, just `apt-get +install etcd`, and it need not to start etcd manually. + +For multi hosts distributed environment, start +**dep/etcd-multi-nodes.sh** in each etcd server hosts. This scripts +requires users providing the etcd server address as parameters. + +### master ### + +First, select a server with 2 network interface card, one having a +public IP address/url, e.g., docklet.info; the other having a private IP +address, e.g., 172.16.0.1. This server will be the master. + +If it is the first time you start docklet, run `bin/docklet-master init` +to init and start docklet master. Otherwise, run `bin/docklet-master start`, +which will start master in recovery mode in background using +conf/docklet.conf. It means docklet will recover workspaces existed. + +This script in fact will start three daemons: the docklet master of +httprest.py, the configurable-http-proxy and the docklet web of web.py. + +You can check the daemon status by running `bin/docklet-master status` + +If the master failed to start, you could try `bin/docklet-master init` +to initialize the whole system. + +More usages can be found by typing `bin/docklet-master` + +The master logs are in **FS_PREFIX/local/log/docklet-master.log** and +**docklet-web.log**. + +### worker ### + +Worker needs a basefs image to boot container. + +You can create such an image with `lxc-create -n test -t download`, +and then copy the rootfs to **FS_PREFIX/local**, and renamed `rootfs` +to `basefs`. + +Note the `jupyerhub` package must be installed for this image. And the +start script `tools/start_jupyter.sh` should be placed at +`basefs/home/jupyter`. + +You can check and run `tools/update-basefs.sh` to update basefs. + +Run `bin/docklet-worker start`, will start worker in background. + +You can check the daemon status by running `bin/docklet-worker status` + +More usages can be found by typing `bin/docklet-worker` + +The log is in **FS_PREFIX/local/log/docklet-worker.log** + +Currently, the worker must be run after the master has been started. + +## usage ## + +Open a browser, visiting the address specified by PORTAL_URL , +e.g., ` http://docklet.info/ ` + +If the system is just deployed in single host for testing purpose, +then the PORTAL_URL defaults to `http://MASTER_IP:PROXY_PORT`, +e.g., `http://localhost:8000`. + +That is it. + +## system admin ## diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..53a75d6 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.2.6 diff --git a/bin/docklet-master b/bin/docklet-master new file mode 100755 index 0000000..0d7c489 --- /dev/null +++ b/bin/docklet-master @@ -0,0 +1,230 @@ +#!/bin/sh + +[ $(id -u) != '0' ] && echo "root is needed" && exit 1 + +# get some path of docklet + +bindir=${0%/*} +# $bindir maybe like /opt/docklet/src/../sbin +# use command below to make $bindir in normal absolute path +DOCKLET_BIN=$(cd $bindir; pwd) +DOCKLET_HOME=${DOCKLET_BIN%/*} +DOCKLET_CONF=$DOCKLET_HOME/conf +LXC_SCRIPT=$DOCKLET_CONF/lxc-script +DOCKLET_SRC=$DOCKLET_HOME/src +DOCKLET_LIB=$DOCKLET_SRC +DOCKLET_WEB=$DOCKLET_HOME/web + +# default working directory, default to /opt/docklet +FS_PREFIX=/opt/docklet + +RUN_DIR=$FS_PREFIX/local/run +LOG_DIR=$FS_PREFIX/local/log + +#configurable-http-proxy public port, default is 8000 +PROXY_PORT=8000 +#configurable-http-proxy api port, default is 8001 +PROXY_API_PORT=8001 +#network interface , default is eth0 +NETWORK_DEVICE=eth0 +#etcd server address, default is localhost:2379 +ETCD=localhost:2379 +#unique cluster_name, default is docklet-vc +CLUSTER_NAME=docklet-vc +#web port, default is 8888 +WEB_PORT=8888 +#cluster net, default is 172.16.0.1/16 +CLUSTER_NET="172.16.0.1/16" + +. $DOCKLET_CONF/docklet.conf + +export FS_PREFIX + +# This next line determines what user the script runs as. +DAEMON_USER=root + +# settings for docklet master +DAEMON_MASTER=$DOCKLET_LIB/httprest.py +DAEMON_NAME_MASTER=docklet-master +DAEMON_OPTS_MASTER= +# The process ID of the script when it runs is stored here: +PIDFILE_MASTER=$RUN_DIR/$DAEMON_NAME_MASTER.pid + +# settings for docklet proxy, which is required for web access +DAEMON_PROXY=`which configurable-http-proxy` +DAEMON_NAME_PROXY=docklet-proxy +PIDFILE_PROXY=$RUN_DIR/proxy.pid +DAEMON_OPTS_PROXY= + +# settings for docklet web +DAEMON_WEB=$DOCKLET_WEB/web.py +DAEMON_NAME_WEB=docklet-web +PIDFILE_WEB=$RUN_DIR/docklet-web.pid +DAEMON_OPTS_WEB= + +RUNNING_CONFIG=$FS_PREFIX/local/docklet-running.conf +export CONFIG=$RUNNING_CONFIG + +. /lib/lsb/init-functions + +########### + +pre_start_master () { + log_daemon_msg "Starting $DAEMON_NAME_MASTER in $FS_PREFIX" + + [ ! -d $FS_PREFIX/global ] && mkdir -p $FS_PREFIX/global + [ ! -d $FS_PREFIX/local ] && mkdir -p $FS_PREFIX/local + [ ! -d $FS_PREFIX/global/users ] && mkdir -p $FS_PREFIX/global/users + [ ! -d $FS_PREFIX/local/volume ] && mkdir -p $FS_PREFIX/local/volume + [ ! -d $FS_PREFIX/local/temp ] && mkdir -p $FS_PREFIX/local/temp + [ ! -d $FS_PREFIX/local/run ] && mkdir -p $FS_PREFIX/local/run + [ ! -d $FS_PREFIX/local/log ] && mkdir -p $FS_PREFIX/local/log + + grep -P "^[\s]*[a-zA-Z]" $DOCKLET_CONF/docklet.conf > $RUNNING_CONFIG + + echo "DOCKLET_HOME=$DOCKLET_HOME" >> $RUNNING_CONFIG + echo "DOCKLET_BIN=$DOCKLET_BIN" >> $RUNNING_CONFIG + echo "DOCKLET_CONF=$DOCKLET_CONF" >> $RUNNING_CONFIG + echo "LXC_SCRIPT=$LXC_SCRIPT" >> $RUNNING_CONFIG + echo "DOCKLET_SRC=$DOCKLET_SRC" >> $RUNNING_CONFIG + echo "DOCKLET_LIB=$DOCKLET_LIB" >> $RUNNING_CONFIG + + + # iptables for NAT network for containers to access web + iptables -t nat -F + iptables -t nat -A POSTROUTING -s $CLUSTER_NET -j MASQUERADE + +} + +do_start_master () { + pre_start_master + + DAEMON_OPTS_MASTER=$1 + + # MODE : start mode + # new : clean old data in etcd, global directory and start a new cluster + # recovery : start cluster and recover status from etcd and global directory + # Default is "recovery" + + start-stop-daemon --start --oknodo --background --pidfile $PIDFILE_MASTER --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON_MASTER -- $DAEMON_OPTS_MASTER + log_end_msg $? +} + + +do_start_proxy () { + log_daemon_msg "Starting $DAEMON_NAME_PROXY daemon in $FS_PREFIX" + DAEMON_OPTS_PROXY="--port $PROXY_PORT --api-port $PROXY_API_PORT --default-target=http://localhost:8888" + start-stop-daemon --start --background --pidfile $PIDFILE_PROXY --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON_PROXY -- $DAEMON_OPTS_PROXY + log_end_msg $? +} + +pre_start_web () { + log_daemon_msg "Starting $DAEMON_NAME_WEB in $FS_PREFIX" + + webip=$(ip addr show $NETWORK_DEVICE | grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/[0-9]+") + + [ $? != "0" ] && echo "wrong NETWORK_DEVICE $NETWORK_DEVICE" && exit 1 + + webip=${webip%/*} + + AUTH_COOKIE_URL=http://$webip:$WEB_PORT/jupyter + #echo "set AUTH_COOKIE_URL:$AUTH_COOKIE_URL in etcd with key:$CLUSTER_NAME/web/authurl" + curl -XPUT http://$ETCD/v2/keys/$CLUSTER_NAME/web/authurl -d value="$AUTH_COOKIE_URL" > /dev/null 2>&1 + [ $? != 0 ] && echo "set AUTH_COOKIE_URL failed in etcd" && exit 1 +} + +do_start_web () { + pre_start_web + + DAEMON_OPTS_WEB="-p $WEB_PORT" + + start-stop-daemon --start --background --pidfile $PIDFILE_WEB --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON_WEB -- $DAEMON_OPTS_WEB + log_end_msg $? +} + + +do_stop_master () { + log_daemon_msg "Stopping $DAEMON_NAME_MASTER daemon" + start-stop-daemon --stop --quiet --oknodo --remove-pidfile --pidfile $PIDFILE_MASTER --retry 10 + log_end_msg $? +} + +do_stop_proxy () { + log_daemon_msg "Stopping $DAEMON_NAME_PROXY daemon" + start-stop-daemon --stop --quiet --oknodo --remove-pidfile --pidfile $PIDFILE_PROXY --retry 10 + log_end_msg $? +} + + +do_stop_web () { + log_daemon_msg "Stopping $DAEMON_NAME_WEB daemon" + start-stop-daemon --stop --quiet --oknodo --remove-pidfile --pidfile $PIDFILE_WEB --retry 10 + log_end_msg $? +} + +case "$1" in + init) + do_start_master "new" + do_start_proxy + do_start_web + ;; + start) + do_start_master "recovery" + do_start_proxy + do_start_web + ;; + + stop) + do_stop_web + do_stop_proxy + do_stop_master + ;; + + restart) + do_stop_web + do_stop_proxy + do_stop_master + do_start_master "recovery" + do_start_proxy + do_start_web + ;; + + start_proxy) + do_start_proxy + ;; + + stop_proxy) + do_stop_proxy + ;; + + start_web) + do_start_web + ;; + + stop_web) + do_stop_web + ;; + + reinit) + do_stop_web + do_stop_proxy + do_stop_master + do_start_master "new" + do_start_proxy + do_start_web + ;; + + status) + status=0 + status_of_proc -p $PIDFILE_MASTER "$DAEMON_MASTER" "$DAEMON_NAME_MASTER" || status=$? + status_of_proc -p $PIDFILE_PROXY "$DAEMON_PROXY" "$DAEMON_NAME_PROXY" || status=$? + status_of_proc -p $PIDFILE_WEB "$DAEMON_WEB" "$DAEMON_NAME_WEB" || status=$? + exit $status + ;; + + *) + echo "Usage: $DAEMON_NAME_MASTER {init|start|stop|restart|reinit|status|start_proxy|stop_proxy|start_web|stop_web}" + exit 1 + ;; +esac +exit 0 diff --git a/bin/docklet-worker b/bin/docklet-worker new file mode 100755 index 0000000..6e95a84 --- /dev/null +++ b/bin/docklet-worker @@ -0,0 +1,124 @@ +#!/bin/sh + +[ $(id -u) != '0' ] && echo "root is needed" && exit 1 + +# get some path of docklet + +bindir=${0%/*} +# $bindir maybe like /opt/docklet/src/../bin +# use command below to make $bindir in normal absolute path +DOCKLET_BIN=$(cd $bindir; pwd) +DOCKLET_HOME=${DOCKLET_BIN%/*} +DOCKLET_CONF=$DOCKLET_HOME/conf +LXC_SCRIPT=$DOCKLET_CONF/lxc-script +DOCKLET_SRC=$DOCKLET_HOME/src +DOCKLET_LIB=$DOCKLET_SRC +DOCKLET_WEB=$DOCKLET_HOME/web + +# working directory, default to /opt/docklet +FS_PREFIX=/opt/docklet + +# cluster net ip range, default is 172.16.0.1/16 +CLUSTER_NET="172.16.0.1/16" + +RUN_DIR=$FS_PREFIX/local/run +LOG_DIR=$FS_PREFIX/local/log + +. $DOCKLET_CONF/docklet.conf + +export FS_PREFIX + +# This next line determines what user the script runs as. +DAEMON_USER=root + +# settings for docklet worker +DAEMON=$DOCKLET_LIB/worker.py +DAEMON_NAME=docklet-worker +DAEMON_OPTS= +# The process ID of the script when it runs is stored here: +PIDFILE=$RUN_DIR/$DAEMON_NAME.pid + +. /lib/lsb/init-functions + +########### + +pre_start () { + log_daemon_msg "Starting $DAEMON_NAME in $FS_PREFIX" + + [ ! -d $FS_PREFIX/global ] && mkdir -p $FS_PREFIX/global + [ ! -d $FS_PREFIX/local ] && mkdir -p $FS_PREFIX/local + [ ! -d $FS_PREFIX/global/users ] && mkdir -p $FS_PREFIX/global/users + [ ! -d $FS_PREFIX/local/volume ] && mkdir -p $FS_PREFIX/local/volume + [ ! -d $FS_PREFIX/local/temp ] && mkdir -p $FS_PREFIX/local/temp + [ ! -d $FS_PREFIX/local/run ] && mkdir -p $FS_PREFIX/local/run + [ ! -d $FS_PREFIX/local/log ] && mkdir -p $FS_PREFIX/local/log + + tempdir=/opt/docklet/local/temp + + RUNNING_CONFIG=$FS_PREFIX/local/docklet-running.conf + + grep -P "^[\s]*[a-zA-Z]" $DOCKLET_CONF/docklet.conf > $RUNNING_CONFIG + + echo "DOCKLET_HOME=$DOCKLET_HOME" >> $RUNNING_CONFIG + echo "DOCKLET_BIN=$DOCKLET_BIN" >> $RUNNING_CONFIG + echo "DOCKLET_CONF=$DOCKLET_CONF" >> $RUNNING_CONFIG + echo "LXC_SCRIPT=$LXC_SCRIPT" >> $RUNNING_CONFIG + echo "DOCKLET_SRC=$DOCKLET_SRC" >> $RUNNING_CONFIG + echo "DOCKLET_LIB=$DOCKLET_LIB" >> $RUNNING_CONFIG + + export CONFIG=$RUNNING_CONFIG + + # iptables for NAT network for containers to access web + iptables -t nat -F + iptables -t nat -A POSTROUTING -s $CLUSTER_NET -j MASQUERADE + + if [ ! -d $FS_PREFIX/local/basefs ]; then + log_daemon_msg "create basefs ..." + [ ! -f $tempdir/basefs.tar.bz ] && log_daemon_msg "$tempdir/basefs.tar.bz not exist, run prepare.sh first" && exit 1 + tar xvf $tempdir/basefs.tar.bz -C $FS_PREFIX/local > /dev/null + fi +} + +do_start() { + pre_start + start-stop-daemon --start --oknodo --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS + log_end_msg $? +} + +do_stop () { + log_daemon_msg "Stopping $DAEMON_NAME daemon" + start-stop-daemon --stop --quiet --oknodo --remove-pidfile --pidfile $PIDFILE --retry 10 + log_end_msg $? +} + + + +case "$1" in + start) + do_start + ;; + + stop) + do_stop + ;; + + console) + pre_start + cprofilev $DAEMON $DAEMON_OPTS + ;; + + restart) + do_stop + do_start + ;; + + status) + status_of_proc -p $PIDFILE "$DAEMON" "$DAEMON_NAME" && exit 0 || exit $? + ;; + + *) + echo "Usage: $DAEMON_NAME {start|stop|restart|status}" + exit 1 + ;; +esac +exit 0 diff --git a/conf/container.conf b/conf/container.conf new file mode 100644 index 0000000..1445173 --- /dev/null +++ b/conf/container.conf @@ -0,0 +1,51 @@ +# This is the common container.conf for all containers. +# If want set custom settings, you have two choices: +# 1. Directly modify this file, which is not recommend, because the +# setting will be overriden when new version container.conf released. +# 2. Use a custom config file in this conf directory: lxc.custom.conf, +# it uses the same grammer as container.conf, and will be merged +# with the default container.conf by docklet at runtime. +# +# The following is an example mounting user html directory +# lxc.mount.entry = /public/home/%USERNAME%/public_html %ROOTFS%/root/public_html none bind,rw,create=dir 0 0 +# + +#### include /usr/share/lxc/config/ubuntu.common.conf +lxc.include = /usr/share/lxc/config/ubuntu.common.conf + +############## DOCKLET CONFIG ############## + +# Setup 0 tty devices +lxc.tty = 0 + +lxc.rootfs = %ROOTFS% +lxc.utsname = %HOSTNAME% + +lxc.network.type = veth +lxc.network.name = eth0 +lxc.network.veth.pair = %LXCNAME% +lxc.network.script.up = Bridge=docklet-br VLANID=%VLANID% %LXCSCRIPT%/lxc-ifup +lxc.network.script.down = Bridge=docklet-br %LXCSCRIPT%/lxc-ifdown +lxc.network.ipv4 = %IP% +lxc.network.ipv4.gateway = %GATEWAY% +lxc.network.flags = up +lxc.network.mtu = 1420 + +lxc.cgroup.memory.limit_in_bytes = %CONTAINER_MEMORY%M +#lxc.cgroup.memory.kmem.limit_in_bytes = 512M +#lxc.cgroup.memory.soft_limit_in_bytes = 4294967296 +#lxc.cgroup.memory.memsw.limit_in_bytes = 8589934592 + +# lxc.cgroup.cpu.cfs_period_us : period time of cpu, default 100000, means 100ms +# lxc.cgroup.cpu.cfs_quota_us : quota time of this process +lxc.cgroup.cpu.cfs_quota_us = %CONTAINER_CPU% + +lxc.mount.entry = %FS_PREFIX%/global/users/%USERNAME%/data %ROOTFS%/root/nfs none bind,rw,create=dir 0 0 +lxc.mount.entry = %FS_PREFIX%/global/users/%USERNAME%/hosts/%CLUSTERID%.hosts %ROOTFS%/etc/hosts none bind,ro,create=file 0 0 +lxc.mount.entry = %FS_PREFIX%/global/users/%USERNAME%/ssh %ROOTFS%/root/.ssh none bind,ro,create=dir 0 0 + +# setting hostname +lxc.hook.pre-start = HNAME=%HOSTNAME% %LXCSCRIPT%/lxc-prestart + +# setting nfs softlink +#lxc.hook.mount = %LXCSCRIPT%/lxc-mount diff --git a/conf/docklet.conf.template b/conf/docklet.conf.template new file mode 100644 index 0000000..1c2d161 --- /dev/null +++ b/conf/docklet.conf.template @@ -0,0 +1,133 @@ + +# ================================================== +# +# [Local config example] +# +# ================================================== + +# CLUSTER_NAME: name of host cluster, every host cluster should have +# a unique name, default is docklet-vc +# CLUSTER_NAME=docklet-vc + +# FS_PREFIX: path to store global and local data for docklet +# default is /opt/docklet. +# +# Note: $FS_PREFIX/global is for storing persistent data, e.g., +# custom container images, user data, etc. For a multi hosts +# environement, it is the mountpoint of the distributed filesystem +# that all physical hosts (master and slave) share. +# E.g., for a system with three hosts: computing hosts A and B, +# strorage host C. Host C exports its stroage filesystem through nfs +# as C:/data, then host A and B should mount C:/data to $FS_PREFIX/global. +# Please make sure that the mount is OK before launching docklet. +# +# FS_PREFIX=/opt/docklet + +# STORAGE: local storage type, file or disk, default is file +# note lvm is required for either case +# +# file : a large file simulating raw disk storing container runtime +# data, located in FS_PREFIX/local, for single machine testing purpose. +# +# disk : raw disk for storing container files, for production purpose. +# If using disk, a partition must be allocated to docklet +# - a disk device name must be specified by DISK , e.g, /dev/sdc9 +# - this device must be formatted as Linux-LVM, and initialized +# as a physical volume (pvcreate /dev/sdc9) in advance. +# TAKE CARE to ensure the disk is OK before launching docklet. +# +# STORAGE=file +# +# DISK: disk device name if STORAGE is disk +# DISK=/dev/sdc9 + +# CLUSTER_SIZE: virtual cluster size, default is 1 +# CLUSTER_SIZE=1 + +# CLUSTER_NET: cluster network ip address range, default is 172.16.0.1/16 +# CLUSTER_NET=172.16.0.1/16 + +# CONTAINER_CPU: CPU quota of container, default is 100000 +# A single CPU core has total=100000 (100ms), so the default 100000 +# mean a single container can occupy a whole core. +# For a CPU with two cores, this can be set to 200000 +# CONTAINER_CPU=100000 + +# CONTAINER_DISK: disk quota of container image upper layer, count in MB, +# default is 1000 +# CONTAINER_DISK=1000 + +# CONTAINER_MEMORY: memory quota of container, count in MB, default is 1000 +# CONTAINER_MEMORY=1000 + +# DISKPOOL_SIZE: lvm group size, count in MB, default is 5000 +# Only valid with STORAGE=file +# DISKPOOL_SIZE=5000 + +# ETCD: etcd address, default is localhost:2379 +# For a muti hosts environment, the administrator should configure how +# etcd cluster work together +# ETCD=localhost:2379 + +# NETWORK_DEVICE: specify the network interface docklet uses, +# Default is eth0 +# NETWORK_DEVICE=eth0 + +# PORTAL_URL: the public docklet portal url. for a production system, +# it should be a valid URL, like http://docklet.info +# default is MASTER_IP:PROXY_PORT +# PORTAL_URL=http://locahost:8000 + +# MASTER_IP: master listen ip, default listens on all interfaces +# MASTER_IP=0.0.0.0 + +# MASTER_PORT: master listen port, default is 9000 +# MASTER_PORT=9000 + +# WORKER_PORT: worker listen port, default is 9001 +# WORKER_PORT=9001 + +# PROXY_PORT: the access port of the public protal, default is 8000 +# it is also the listen port of configurable-http-proxy, which +# proxy connections from exteral public network to internal private +# container networks. Usually 80 is recommded for production environment. +# PROXY_PORT=8000 + +# PROXY_API_PORT: configurable-http-proxy api port, default is 8001 +# Admins can query the proxy table by calling: +# curl http://localhost:8001/api/routes +# PROXY_API_PORT=8001 + +# WEB_PORT: docklet web listening port, default is 8888 +# Note: docklet web server is located behind the docklet proxy. +# Users access docklet first through proxy, then docklet web server. +# Therefore, it is not for user direct access. In most cases, +# admins need not to change the default value. +# WEB_PORT=8888 + +# LOG_LEVEL: logging level, of DEBUG, INFO, WARNING, ERROR, CRITICAL +# default is DEBUG +# LOG_LEVEL=DEBUG + +# LOG_LIFE: how many days the logs will be kept, default is 10 +# LOG_LIFE=10 + +# WEB_LOG_LEVEL: logging level, of DEBUG, INFO, WARNING, ERROR, CRITICAL +# default is DEBUG +# WEB_LOG_LEVEL=DEBUG + +# EXTERNAL_LOGIN: whether docklet will use external account to log in +# True or False, default is False +# default: authenticate local and PAM users +# EXTERNAL_LOGIN=False + +# EMAIL_FROM_ADDRESS : the e-mail address to send activating e-mail to user +# If this address is "", no email will be sent out. +# default: "" +# EMAIL_FROM_ADDRESS="" + +# ADMIN_EMAIL_ADDRESS : when an activating request is sent, an e-mail will +# be sent to this address to remind the admin. +# If this address i "", no email will be sent to admin. +# default: "" +# ADMIN_EMAIL_ADDRESS="" diff --git a/conf/lxc-script/lxc-ifdown b/conf/lxc-script/lxc-ifdown new file mode 100755 index 0000000..5d80873 --- /dev/null +++ b/conf/lxc-script/lxc-ifdown @@ -0,0 +1,3 @@ +#!/bin/sh + +ovs-vsctl --if-exists del-port $Bridge $5 diff --git a/conf/lxc-script/lxc-ifup b/conf/lxc-script/lxc-ifup new file mode 100755 index 0000000..0bf93b7 --- /dev/null +++ b/conf/lxc-script/lxc-ifup @@ -0,0 +1,10 @@ +#!/bin/sh + + +# $1 : name of container ( name in lxc-start with -n) +# $2 : net +# $3 : network flags, up or down +# $4 : network type, for example, veth +# $5 : value of lxc.network.veth.pair + +ovs-vsctl --may-exist add-port $Bridge $5 tag=$VLANID diff --git a/conf/lxc-script/lxc-mount b/conf/lxc-script/lxc-mount new file mode 100755 index 0000000..f6b6385 --- /dev/null +++ b/conf/lxc-script/lxc-mount @@ -0,0 +1,7 @@ +#!/bin/sh + +# $1 Container name. +# $2 Section (always 'lxc'). +# $3 The hook type (i.e. 'clone' or 'pre-mount'). + +#cd $LXC_ROOTFS_PATH/root ; rm -rf nfs && ln -s ../nfs nfs diff --git a/conf/lxc-script/lxc-prestart b/conf/lxc-script/lxc-prestart new file mode 100755 index 0000000..ef9fc1d --- /dev/null +++ b/conf/lxc-script/lxc-prestart @@ -0,0 +1,8 @@ +#!/bin/sh + +# $1 Container id +# $2 Container name. +# $3 Section (always 'lxc'). +# $4 The hook type (i.e. 'clone' or 'pre-mount'). + +echo $HNAME > $LXC_ROOTFS_PATH/etc/hostname diff --git a/doc/devdoc/coding.md b/doc/devdoc/coding.md new file mode 100644 index 0000000..a40ef8f --- /dev/null +++ b/doc/devdoc/coding.md @@ -0,0 +1,93 @@ +# NOTE + +## here is some thinking and notes in coding + +* path : scripts' path should be known by scripts to call/import other script -- use environment variables + +* FS_PREFIX : docklet filesystem path to put data + +* overlay : " modprobe overlay " to add overlay module + +* after reboot : + * bridges lost -- it's ok, recreate it + * loop device lost -- losetup /dev/loop0 BLOCK_FILE again, and lvm will get group and volume back automatically + +* lvm can do snapshot, image management can use lvm's snapshot -- No! lvm snapshot will use the capacity of LVM group. + +* cgroup memory control maybe not work. need run command below: + echo 'GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"' >> /etc/default/grub && update-grub && reboot + +* debian don't support cpu.cfs_quota_us option in cgroup. it needs to recompile linux kernel with CONFIG_CFS_BANDWIDTH option + +* ip can add bridge/link/GRE, maybe we should test whether ip can replace of ovs-vsctl and brctl. ( see "man ip-link" ) + +* lxc.mount.entry : + * do not use relevant path. use absolute path, like : + lxc.mount.entry = /root/from-dir /root/rootfs/to-dir none bind 0 0 # lxc.rootfs = /root/rootfs + if use relevant paht, container path will be mounted on /usr/lib/x86_64..../ , a not existed path + * path of host and container should both exist. if not exist in container, it will be mounted on /usr/lib/x86_64.... + * if path in container not exists, you can use option : create=dir/file, like : + lxc.mount.entry = /root/from-dir /root/rootfs/to-dir none bind,create=dir 0 0 # lxc.rootfs = /root/rootfs + +* lxc.mount.entry : bind and rbind ( see "man mount" ) + * bind means mount a part of filesystem on somewhere else of this filesystem + * but bind only attachs a single filesystem. That means the submount of source directory of mount may disappear in target directory. + * if you want to make submount work, use rbind option. + rbind will make entire file hierarchy including submounts mounted on another place. + * NOW, we use bind in container.sh. maybe it need rbind if FS_PREFIX/global/users/$USERNAME/nfs is under glusterfs mountpoint + +* rpc server maybe not security. anyone can call rpc method if he knows ip address. + * maybe we can use "transport" option of xmlrpc.client.ServerProxy(uri, transport="http://user:pass@host:port/path") and SimpleXMLRPCRequestHandler of xmlrpc.server.SimpleXMLRPCServer(addr, requestHandler=..) to parse the rpc request and authenticate the request + xmlrpc.client.ServerProxy can also support https request, it is also a security method + * If we use rpc with authentication, maybe we can use http server and http request to replace rpc + +* frontend and backend + arch: + +-----------------+ + Web -- Flask --HttpRest Core | + +-----------------+ + Now, HttpRest and Core work as backend + Web and Flask work as frontend + all modules are in backend + Flask just dispatch urls and render web pages + (Maybe Flask can be merged in Core and works as http server) + (Then Flask needs to render pages, parse urls, response requests, ...) + (It maybe not fine) + +* httprest.py : + httphandler needs to call vclustermgr/nodemgr/... to handler request + we need to call these classes in httphandler + Way-1: init/new these classes in httphandler init function (httphandler need to init parent class) -- wrong : httpserver will create a new httphandler instance for every http request ( see /usr/lib/python3.4/socketserver.py ) + Way-2: use global varibles -- Now this way + +* in shell, run python script or other not built-in command, the command will run in new process and new process group ( see csapp shell lab ) + so, the environment variables set in shell can not be see in python/... + but command like below can work : + A=ab B=ba ./python.py + +* maybe we need to parse argvs in python + some module to parse argvs : sys.argv, optparse, getopt, argparse + +* in shell, { command; } means run command in current shell, ";" is necessary + ( command; ) means run command in sub shell + +* function in registered in rpc server must have return. + without return, the rpc client will raise an exception + +* ** NEED TO BE FIX ** + we add a prefix in etcdlib + so when we getkey, key may be a absolute path from base url + when we setkey use the key we get, etcdlib will append the absolute path to prefix, it will wrong + +* overlay : upperdir and workdir must in the same mount filesystem. + that means we should mount LV first and then mkdir upperdir and workdir in the LV mountpoint + +* when use 'worker.py > log' to redirect output of python script, it will empty output of log. + because python interpreter will use buffer to collect output. + we can use ways below to fix this problem: + stdbuf -o 0 worker.py > log # but it fail in my try. don't know why + python3 -u worker.py > log # recommended, -u option of python3 + print('output', flush=True) # flush option of print + sys.stdout.flush() # flush by hand + +* CPU QUOTA should not be too small. too small it will work so slowly diff --git a/doc/devdoc/config_info.md b/doc/devdoc/config_info.md new file mode 100644 index 0000000..d32e9f4 --- /dev/null +++ b/doc/devdoc/config_info.md @@ -0,0 +1,77 @@ +# Info of docklet + +## container info + container name : username-clusterid-nodeid + hostname : host-nodeid + lxc config : /var/lib/lxc/username-clusterid-nodeid/config + lxc rootfs : /var/lib/lxc/username-clusterid-nodeid/rootfs + lxc rootfs + |__ / : aufs : basefs + volume/username-clusterid-nodeid + |__ /nfs : global/users/username/data + |__ /etc/hosts : global/users/username/clusters/clusterid/hosts + |__ /root/.ssh : global/users/username/ssh + + +## ETCD Table +we use etcd for some configuration information of our clusters, here is some details. + +every cluster has a CLUSTER_NAME and all data of this cluster is put in a directory called CLUSTER_NAME in etcd just like a table. + +so, different cluster should has different CLUSTER_NAME. + +below is content of cluster info in CLUSTER_NAME 'table' in etcd: + + + key token random code token for checking whether master and workers has the same global filesystem + + dir machines ... info of physical clusters + dir machines/allnodes ip:ok record all nodes, for recovery and checks + dir machines/runnodes ip: ? record running node for this start up. + when startup: ETCD + | IP:waiting | 1. worker write worker-ip:waiting + 2. master update IP:init-mode | IP:init-mode | 3. worker init itself by init-mode + | IP:work | 4. worker finish init and update IP:work + 5. master add workerip and update IP:ok | IP:ok | + + key service/master master-ip + key service/mode new,recovery start mode of cluster + + key vcluster/nextid ID next available ID + + + +## filesystem +here is the path and content description of docklet filesystem + + FS_PREFIX + |__ global/users/{username} + | |__ clusters/clustername : clusterid, cluster size, status, containers, ... in json format + | |__ hosts/id.hosts : ip host-nodeid host-nodeid.clustername + | |__ data : direcroty in distributed filesystem for user to put his data + | |__ ssh : ssh keys + | + |__ local + |__ docklet-storage : loop file for lvm + |__ basefs : base image + |__ volume / { username-clusterid-nodeid } : upper layer of container + + + +## vcluster files + +### hosts file:(raw) + IP-0 host-0 host-0.clustername + IP-1 host-1 host-1.clustername + ... + +### info file:(json) + { + clusterid: ID , + status: stopped/running , + size: size , + containers: [ + { containername: lxc_name, hostname: hostname, ip: lxc_ip, host: host_ip }, + { containername: lxc_name, hostname: hostname, ip: lxc_ip, host: host_ip }, + ... + ] + } diff --git a/doc/devdoc/networkmgr.md b/doc/devdoc/networkmgr.md new file mode 100644 index 0000000..2f2aecc --- /dev/null +++ b/doc/devdoc/networkmgr.md @@ -0,0 +1,67 @@ +# Network Manager + +## About +网络管理是为docklet提供网络管理的模块。 + +关于需求,主要有两点: +* 一个中心管理池,按 网络段(IP/CIDR) 给用户分配网络池 +* 很多用户网络池,按 一个或者几个网络地址 给用户的cluster分配网络地址 + +## Data Structure +面对这两种需求,设计了两种数据结构来管理网络地址。 +* 区间池 / interval pool : 分配、回收 网络段 + + + interval pool 中的元素为区间,其由很多个区间组成。 + 一个朴素的 区间池 是这样的 : interval pool : [A1,A2],[B1,B2],[C1,C2],...[X1,X2] + 每次申请一段地址的时候,从上述区间中选择一个区间分配,并将该区间中剩余部分放回区间池 + + 而考虑到 网络段(IP/CIDR) 是 2 的幂的结构,所以可以将区间池进一步设计成如下结构: + interval pool: + ... ... + cidr=16 : [A1,A2], [A3,A4], ... + cidr=17 : [B1,B2], [B3,B4], ... + cidr=18 : [C1,C2], [C3,C4], ... + ... ... + 上述结构还可以进一步优化,因为 每一个区间的结尾地址可以通过开始地址和CIDR算出来,所以每个区间只需要写一个起始地址就可以了 + 所以: + interval pool: + ... ... + cidr=16 : A1, A3, ... + cidr=17 : B1, B3, ... + cidr=18 : C1, C3, ... + ... ... + 而其中,每一个元素,比如 A1,其实代表的是一个区间 [A1, A1+2^16-1] + 这种基于2的幂的区间设计的好处是可以方便的进行 分配 和 合并 区间,操作起来更加高效。 + +* 枚举池 / enumeration pool : 分配、回收一个、多个网络地址 + + + enum pool 中的元素为单个网络地址,比如: + enum pool : A, B, C, D, ... X + +## API +操作上述两种数据结构的API,这里省略 + +## Network Manager Storage Design +* center : 中心池,提供 用户网络段 的分配、回收 + + + info : IP/CIDR + intervalpool : + cidr16 : ... + cidr17 : ... + ... ... + +* system : 系统保留地址,为系统内部的 网络地址 提供 分配回收 + + + info : IP/CIDR + enumpool : ... + +* vlan/ tag= + ovs-vsctl clear port tag + +patch 是用来连接两个网桥的,操作如下: + + ovs-vsctl add-br br0 + ovs-vsctl add-br br1 + ovs-vsctl add-port br0 patch0 -- set interface patch0 type=patch options:peer=patch1 + ovs-vsctl add-port br1 patch1 -- set interface patch1 type=patch options:peer=patch0 + # NOW : two bridges are connected by patch + + +## Note 4 +一台机器上一个域的网桥只有一个,比如在 host-0 上,建两个网桥: + + ovs-vsctl add-br br0 + ip address add 172.0.0.1/8 dev br0 + ip link set br0 up + + ovs-vsctl add-br br1 + ip address add 172.0.0.2/8 dev br1 + ip link set br1 up + +则,后配置的那个网桥会失效 + +因为系统认为,172.0.0.1/8 内的机器都应该在 br0 中 + +而以下配置是正确的: + + ovs-vsctl add-br br0 + ip address add 172.0.0.1/24 dev br0 + ip link set br0 up + + ovs-vsctl add-br br1 + ip address add 172.0.1.1/24 dev br1 + ip link set br1 up + +## Note 5 +关于网关,网桥/交换机是二层设备,网关是三层组件,我们可以将网桥连接起来,多个网桥共用一个网关 + + ovs-vsctl add-br br0 + ip link set br0 up + ovs-vsctl add-br br1 + ip address add 172.0.0.1/24 dev br1 + ip link set br1 up + ovs-vsctl add-port br0 patch0 -- set interface patch0 type=patch options:peer=patch1 + ovs-vsctl add-port br1 patch1 -- set interface patch1 type=patch options:peer=patch0 + + # lxc config : + # ip -- 172.0.0.11/24 + # gateway -- 172.0.0.1 + # lxc.network.veth.pair -- base , base is connected on br0 + lxc-start -f container.conf -n base -F -- /bin/bash + # NOW : lxc network is running ok + +## Note 6 +基于多个网桥实现VLAN + +### 方案一 + + ovs-vsctl add-br br0 + ip link set br0 up + ovs-vsctl add-br br1 + ip address add 172.0.0.1/24 dev br1 + ip link set br1 up + ovs-vsctl add-port br0 patch0 -- set interface patch0 type=patch options:peer=patch1 + ovs-vsctl add-port br1 patch1 -- set interface patch1 type=patch options:peer=patch0 + + # lxc config : + # ip -- 172.0.0.11/24 + # gateway -- 172.0.0.1 + # lxc.network.veth.pair -- base , base is connected on br0 + lxc-start -f container.conf -n base -F -- /bin/bash + # NOW : lxc network is running ok + ## above is the same as before + + ovs-vsctl set port base tag=5 + ovs-vsctl set port patch0 tag=5 + # NOW : lxc network is running ok + + # ARCH + +-----------------------+ +----------------------+ + | br0 | | br1 : 172.0.0.1/24 | + +--+-----tag=5---tag=5--+ +---+-------+----------+ + | | | patch | | + | | +-------------------+ | + | | | + internal base:172.0.0.11/24 internal + (gateway:172.0.0.1) + + # flow : base --> patch --> br1/internal + +* 方案可行 +* 但是,每个 VLAN 需要一个网关 + +### 方案二 (不可行) + + # ARCH + +-------------------------------------------------------------+ + | br0 | + +--+-----tag=5---tag=5---------+-----tag=6---tag=6---------+--+ + | | | +-----+ | | | +-----+ | + | | +--| br1 |--+ | +--| br2 |--+ + | | +-----+ | +-----+ + internal base1:172.0.0.11/24 base2:172.0.0.12/24 + + # flow 1 : base1 --> br1 --> internal + # flow 2 : base1 --> br1 --> br2 --> base2 + +* 方案不可行,因为上面的 flow 可以使得 base1、base2 在二层通信,无法隔离 + +## Note 7 +上述可行方案的简化版 +### 简化版一 + + ovs-vsctl add-br br0 + ip link set br0 up + # add a fake bridge connected to br0 with vlan tag=5 + ovs-vsctl add-br fakebr br0 5 + ip address add 172.0.0.1/24 dev fakebr + ip link set fakebr up + + # lxc config: + # ip : 172.0.0.11/24 + # gateway : 172.0.0.1/24 + # lxc.network.veth.pair -- base , base is connected on br0 + lxc-start -f container.conf -n base -F -- /bin/bash + + ovs-vsctl set port base tag=5 + + # ARCH + +-----------------------+ + | br0 | + +--+-----tag=5---tag=5--+ + | | | + | | fakebr:172.0.0.1/24 + | | + internal base:172.0.0.11/24 + (gateway:172.0.0.1) + + # flow : base --> fakebr + +### 简化版二 + + ovs-vsctl add-br br0 + ip link set br0 up + # add an internal interface for vlan + ovs-vsctl add-port br0 vlanif tag=5 -- set interface vlanif type=internal + ip address add 172.0.0.1/24 dev vlanif + ip link set vlanif up + + # lxc config: + # ip : 172.0.0.11/24 + # gateway : 172.0.0.1/24 + # lxc.network.veth.pair -- base , base is connected on br0 + lxc-start -f container.conf -n base -F -- /bin/bash + + ovs-vsctl set port base tag=5 + + # ARCH + +-----------------------+ + | br0 | + +--+-----tag=5---tag=5--+ + | | | + | | vlanif:172.0.0.1/24 + | | + internal base:172.0.0.11/24 + (gateway:172.0.0.1) + + # flow : base --> vlanif + +### 简化版一 & 简化版二 +使用 ovs-vsctl show 查看的时候,上述两个版本显示的信息是一样的,说明 fakebr 其实本质上可能就是一个 internal interface + +其实,方案一中,对 br1 的 IP(172.0.0.1/24)的配置,其实就是对 br1 的 internal 的 interface 的配置,所以其实多余的网桥不是必须的,而 interface 才是真正需要的。 + +而,internal interface 相当于是连接着本地Linux的虚拟网卡,这块网卡的另一端连着OVS的虚拟网桥。 + +而,Linux 的网络栈又管理着物理网卡、虚拟网卡,以及对这些网卡的包进行转发、路由等处理。 + +似乎,Linux 的网络栈又成了一个大的交换机/网桥,上面连接着 internal interface 和 物理网卡。 + +## Note 8 +基于上述的实践和探索,其实 **我们需要给一个VLAN配置一个可以出去的网关、网卡。** + +那么,我们一个简单可行的方案可以这样: + + +------------------------------------------------------------------------------+ + | bridge | + | <------- VLAN ID=5 ---------> <---- VLAN ID=6 ------> | + +--+-----tag=5---tag=5------------tag=5-------------tag=6-------------tag=6----+ + | | | | | | + | | lxc-2:172.0.0.12/24 | | | + internal | (gateway:172.0.0.1) | | | + | | | | + lxc-1:172.0.0.11/24 gw5:172.0.0.1/24 lxc-3:172.0.1.11/24 gw6:172.0.1.1/24 + (gateway:172.0.0.1) internal (gateway:172.0.1.1) internal + | | + | | + +----------- NAT / iptables --------+ + |||| + |||| + \\\/// + \\// + \/ + + + + +# end diff --git a/doc/devdoc/proxy-control.md b/doc/devdoc/proxy-control.md new file mode 100644 index 0000000..3817cbc --- /dev/null +++ b/doc/devdoc/proxy-control.md @@ -0,0 +1,33 @@ +# Some Note for configurable-http-proxy usage + +## intsall + sudo apt-get install nodejs nodejs-legacy npm + sudo npm install -g configurable-http-proxy + +## start + configurable-http-proxy -h : for help + configurable-http-proxy --ip IP \ + --port PORT \ + --api-ip IP \ + --api-port PORT \ + --default-target http://IP:PORT \ + --log-level debug/info/warn/error +default ip:port is 0.0.0.0:8000, +default api-ip:api-port is localhost:8001 + +## control route table +### get route table +* without token: + curl http://localhost:8001/api/routes +* with token: + curl -H "Authorization: token TOKEN" http://localhost:8001/api/routes +### add/set route table +* without token: + curl -XPOST --data '{"target":"http://TARGET-IP:TARGET-PORT"}' http://localhost:8001/api/routes/PROXY-URL +* with token: + curl -H "Authorization: token TOKEN" -XPOST --data '{"target":"http://TARGET-IP:TARGET-PORT"}' http://localhost:8001/api/routes/PROXY-URL +### delete route table line +* without token: + curl -XDELETE http://localhost:8001/api/routes/PROXY-URL +* with token: + curl -H "Authorization: token TOKEN" -XDELETE http://localhost:8001/api/routes/PROXY-URL diff --git a/doc/devdoc/startup.md b/doc/devdoc/startup.md new file mode 100644 index 0000000..697d1ef --- /dev/null +++ b/doc/devdoc/startup.md @@ -0,0 +1,45 @@ +# startup mode + +## new mode +#### step 1 : data + + clean etcd table + write token + init etcd table + clean global directory of user clusters +#### step 2 : nodemgr + + init network + wait for all nodes starts + |_____ listen node joins IP:waiting <--- worker starts + update etcd ----> IP:init-mode ---> worker init + |____ stop all containers + |____ umount mountpoint, delete lxc files, delete LV + |____ delete VG, umount loop dev, delete loop file + |____ init loop file, loop dev, create VG + add node to list <--- IP:work <---- init done, begin work + check all nodes begin work +#### step 3 : vclustermgr + Nothing to do + + + + +## recovery mode +#### step 1 : data + + write token + init some of etcd table +#### step 2 : nodemgr + + init network + wait for all nodes starts + |_____ listen node joins IP:waiting <--- worker starts + update etcd ----> IP:init-mode ---> worker init + |____ check loop file, loop dev, VG + |____ check all containers and mountpoint + add node to list <--- IP:work <---- init done, begin work + check all nodes begin work +#### step 3 : vclustermgr + + recover vclusters:some need start ---------------> recover containers: some need start diff --git a/doc/example/example-LogisticRegression.py b/doc/example/example-LogisticRegression.py new file mode 100644 index 0000000..37fac09 --- /dev/null +++ b/doc/example/example-LogisticRegression.py @@ -0,0 +1,40 @@ +# import package +import numpy as np +import matplotlib.pyplot as plt +from sklearn import linear_model, datasets +%matplotlib inline + +# load data : we only use target==0 and target==1 (2 types classify) and feature 0 and feature 2 () +iris = datasets.load_iris() +X = iris.data[iris.target!=2][:, [0,2]] +Y = iris.target[iris.target!=2] + +h = .02 # step size in the mesh + +logreg = linear_model.LogisticRegression(C=1e5) +logreg.fit(X, Y) + +# Plot the decision boundary. For that, we will assign a color to each +# point in the mesh [x_min, m_max]x[y_min, y_max]. +x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5 +y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5 +xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) +Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()]) + +# Put the result into a color plot +Z = Z.reshape(xx.shape) +#plt.figure(1, figsize=(4, 3)) +plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired) +plt.xlabel('Sepal length') +plt.ylabel('Sepal width') + +# Plot also the training points +plt.scatter(X[:, 0], X[:, 1], c=Y, edgecolors='k', cmap=plt.cm.Paired) +plt.xlabel('Sepal length') +plt.ylabel('Sepal width') + +plt.xlim(xx.min(), xx.max()) +plt.ylim(yy.min(), yy.max()) +plt.xticks(()) +plt.yticks(()) + diff --git a/prepare.sh b/prepare.sh new file mode 100755 index 0000000..c85a199 --- /dev/null +++ b/prepare.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +################################################## +# before-start.sh +# when you first use docklet, you should run this script to +# check and prepare the environment +# *important* : you need run this script again and again till success +################################################## + +if [[ "`whoami`" != "root" ]]; then + echo "FAILED: Require root previledge !" > /dev/stderr + exit 1 +fi + +# check cgroup control +which cgm &> /dev/null || { echo "FAILED : cgmanager is required, please install cgmanager" && exit 1; } +cpucontrol=$(cgm listkeys cpu) +[[ -z $(echo $cpucontrol | grep cfs_quota_us) ]] && echo "FAILED : cpu.cfs_quota_us of cgroup is not supported, you may need to recompile kernel" && exit 1 +memcontrol=$(cgm listkeys memory) +if [[ -z $(echo $memcontrol | grep limit_in_bytes) ]]; then + echo "FAILED : memory.limit_in_bytes of cgroup is not supported" + echo "Try : " + echo -e " echo 'GRUB_CMDLINE_LINUX=\"cgroup_enable=memory swapaccount=1\"' >> /etc/default/grub; update-grub; reboot" > /dev/stderr + echo "Info : if not success, you may need to recompile kernel" + exit 1 +fi + +# install packages that docklet needs (in ubuntu) +# some packages' name maybe different in debian +apt-get install -y cgmanager lxc lvm2 bridge-utils curl exim4 openssh-server openvswitch-switch +apt-get install -y python3 python3-netifaces python3-flask python3-flask-sqlalchemy python3-pampy +apt-get install -y python3-psutil +apt-get install -y python3-lxc +apt-get install -y python3-requests python3-suds +apt-get install -y nodejs nodejs-legacy npm +apt-get install -y etcd + +# check and install configurable-http-proxy +which configurable-http-proxy &>/dev/null || npm install -g configurable-http-proxy +which configurable-http-proxy &>/dev/null || { echo "Error : install configurable-http-proxy failed, you should try again" && exit 1; } + +[[ -f conf/docklet.conf ]] || { echo "Generating docklet.conf from template" && cp conf/docklet.conf.template conf/docklet.conf; } + +echo "" +echo "All preparation installation is done." +echo "****************************************" +echo "* Please Read Lines Below Before Start *" +echo "****************************************" +echo "" + +echo "Before staring : you need a basefs image. " +echo "basefs images are provided at: " +echo " http://docklet.unias.org/download" +echo "Please download it to FS_PREFIX/local and then extract it. (defalut FS_PRERIX is /opt/docklet)" +echo "Probably you will get a dicectory structure like" +echo " /opt/docklet/local/basefs/etc " +echo " /opt/docklet/local/basefs/bin " +echo " /opt/docklet/local/basefs/..." +echo " " + +echo "Next, make sure exim4 can deliver mail out. To enable, run:" +echo "dpkg-reconfigure exim4-config" +echo "select internet site" + +echo "" + + +echo "Then start docklet as described in README.md" + diff --git a/src/container.py b/src/container.py new file mode 100755 index 0000000..59e1f95 --- /dev/null +++ b/src/container.py @@ -0,0 +1,348 @@ +#!/usr/bin/python3 + +import subprocess, os, json +import imagemgr +from log import logger +import env +from lvmtool import * + +class Container(object): + def __init__(self, addr, etcdclient): + self.addr = addr + self.etcd=etcdclient + self.libpath = env.getenv('DOCKLET_LIB') + self.confpath = env.getenv('DOCKLET_CONF') + self.fspath = env.getenv('FS_PREFIX') + # set jupyter running dir in container + self.rundir = "/home/jupyter" + # set root running dir in container + self.nodehome = "/root" + + self.lxcpath = "/var/lib/lxc" + self.imgmgr = imagemgr.ImageMgr() + + def create_container(self, lxc_name, username, user_info, clustername, clusterid, hostname, ip, gateway, vlanid, image): + logger.info("create container %s of %s for %s" %(lxc_name, clustername, username)) + try: + user_info = json.loads(user_info) + cpu = user_info["data"]["groupinfo"]["cpu"] + memory = user_info["data"]["groupinfo"]["memory"] + image = json.loads(image) + status = self.imgmgr.prepareFS(username,image,lxc_name) + if not status: + return [False, "Create container failed when preparing filesystem, possibly insufficient space"] + + #Ret = subprocess.run([self.libpath+"/lxc_control.sh", + # "create", lxc_name, username, str(clusterid), hostname, + # ip, gateway, str(vlanid), str(cpu), str(memory)], stdout=subprocess.PIPE, + # stderr=subprocess.STDOUT,shell=False, check=True) + + rootfs = "/var/lib/lxc/%s/rootfs" % lxc_name + + if not os.path.isdir("%s/global/users/%s" % (self.fspath,username)): + logger.error("user %s directory not found" % username) + return [False, "user directory not found"] + sys_run("mkdir -p /var/lib/lxc/%s" % lxc_name) + logger.info("generate config file for %s" % lxc_name) + + if os.path.exists(self.confpath+"/lxc.custom.conf"): + conffile = open(self.confpath+"/lxc.custom.conf",'r') + else: + conffile = open(self.confpath+"/container.conf",'r') + + conftext = conffile.read() + conffile.close() + conftext = conftext.replace("%ROOTFS%",rootfs) + conftext = conftext.replace("%HOSTNAME%",hostname) + conftext = conftext.replace("%IP%",ip) + conftext = conftext.replace("%GATEWAY%",gateway) + conftext = conftext.replace("%CONTAINER_MEMORY%",str(memory)) + conftext = conftext.replace("%CONTAINER_CPU%",str(cpu)) + conftext = conftext.replace("%FS_PREFIX%",self.fspath) + conftext = conftext.replace("%USERNAME%",username) + conftext = conftext.replace("%CLUSTERID%",str(clusterid)) + conftext = conftext.replace("%LXCSCRIPT%",env.getenv("LXC_SCRIPT")) + conftext = conftext.replace("%LXCNAME%",lxc_name) + conftext = conftext.replace("%VLANID%",str(vlanid)) + conftext = conftext.replace("%CLUSTERNAME%", clustername) + + conffile = open("/var/lib/lxc/%s/config" % lxc_name,"w") + conffile.write(conftext) + conffile.close() + + #logger.debug(Ret.stdout.decode('utf-8')) + logger.info("create container %s success" % lxc_name) + + # get AUTH COOKIE URL for jupyter + [status, authurl] = self.etcd.getkey("web/authurl") + if not status: + [status, masterip] = self.etcd.getkey("service/master") + if status: + webport = env.getenv("WEB_PORT") + authurl = "http://%s:%s/jupyter" % (masterip, + webport) + else: + logger.error ("get AUTH COOKIE URL failed for jupyter") + authurl = "error" + if (username=='guest'): + cookiename='guest-cookie' + else: + cookiename='docklet-jupyter-cookie' + + rundir = self.lxcpath+'/'+lxc_name+'/rootfs' + self.rundir + + logger.debug(rundir) + + if not os.path.exists(rundir): + os.makedirs(rundir) + else: + if not os.path.isdir(rundir): + os.remove(rundir) + os.makedirs(rundir) + + jconfigpath = rundir + '/jupyter.config' + config = open(jconfigpath, 'w') + jconfigs="""USER=%s +PORT=%d +COOKIE_NAME=%s +BASE_URL=%s +HUB_PREFIX=%s +HUB_API_URL=%s +IP=%s +""" % (username, 10000, cookiename, '/go/'+username+'/'+clustername, '/jupyter', + authurl, ip.split('/')[0]) + config.write(jconfigs) + config.close() + + except subprocess.CalledProcessError as sube: + logger.error('create container %s failed: %s' % (lxc_name, + sube.stdout.decode('utf-8'))) + return [False, "create container failed"] + except Exception as e: + logger.error(e) + return [False, "create container failed"] + return [True, "create container success"] + + def delete_container(self, lxc_name): + logger.info ("delete container:%s" % lxc_name) + if self.imgmgr.deleteFS(lxc_name): + logger.info("delete container %s success" % lxc_name) + return [True, "delete container success"] + else: + logger.info("delete container %s failed" % lxc_name) + return [False, "delete container failed"] + #status = subprocess.call([self.libpath+"/lxc_control.sh", "delete", lxc_name]) + #if int(status) == 1: + # logger.error("delete container %s failed" % lxc_name) + # return [False, "delete container failed"] + #else: + # logger.info ("delete container %s success" % lxc_name) + # return [True, "delete container success"] + + # start container, if running, restart it + def start_container(self, lxc_name): + logger.info ("start container:%s" % lxc_name) + #status = subprocess.call([self.libpath+"/lxc_control.sh", "start", lxc_name]) + #if int(status) == 1: + # logger.error ("start container %s failed" % lxc_name) + # return [False, "start container failed"] + #else: + # logger.info ("start container %s success" % lxc_name) + # return [True, "start container success"] + #subprocess.run(["lxc-stop -k -n %s" % lxc_name], + # stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True, check=True) + try : + subprocess.run(["lxc-start -n %s" % lxc_name], + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True, check=True) + logger.info ("start container %s success" % lxc_name) + return [True, "start container success"] + except subprocess.CalledProcessError as sube: + logger.error('start container %s failed: %s' % (lxc_name, + sube.stdout.decode('utf-8'))) + return [False, "start container failed"] + + # start container services + # for the master node, jupyter must be started, + # for other node, ssh must be started. + # container must be RUNNING before calling this service + def start_services(self, lxc_name, services=[]): + logger.info ("start services for container %s: %s" % (lxc_name, services)) + try: + #Ret = subprocess.run(["lxc-attach -n %s -- ln -s /nfs %s" % + #(lxc_name, self.nodehome)], + #stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + #shell=True, check=False) + #logger.debug ("prepare nfs for %s: %s" % (lxc_name, + #Ret.stdout.decode('utf-8'))) + # not sure whether should execute this + #Ret = subprocess.run(["lxc-attach -n %s -- service ssh start" % lxc_name], + # stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + #shell=True, check=False) + #logger.debug(Ret.stdout.decode('utf-8')) + if len(services) == 0: # master node + Ret = subprocess.run(["lxc-attach -n %s -- su -c %s/start_jupyter.sh" % (lxc_name, self.rundir)], + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True, check=True) + logger.debug (Ret) + logger.info ("start services for container %s success" % lxc_name) + return [True, "start container services success"] + except subprocess.CalledProcessError as sube: + logger.error('start services for container %s failed: %s' % (lxc_name, + sube.output.decode('utf-8'))) + return [False, "start services for container failed"] + + # recover container: if running, do nothing. if stopped, start it + def recover_container(self, lxc_name): + logger.info ("recover container:%s" % lxc_name) + #status = subprocess.call([self.libpath+"/lxc_control.sh", "status", lxc_name]) + [success, status] = self.container_status(lxc_name) + if not success: + return [False, status] + if status == 'stopped': + logger.info("%s stopped, recover it to running" % lxc_name) + if self.start_container(lxc_name)[0]: + if self.start_services(lxc_name)[0]: + logger.info("%s recover success" % lxc_name) + return [True, "recover success"] + else: + logger.error("%s recover failed with services not start" % lxc_name) + return [False, "recover failed for services not start"] + else: + logger.error("%s recover failed for container starting failed" % lxc_name) + return [False, "recover failed for container starting failed"] + else: + logger.info("%s recover success" % lxc_name) + return [True, "recover success"] + + def stop_container(self, lxc_name): + logger.info ("stop container:%s" % lxc_name) + #status = subprocess.call([self.libpath+"/lxc_control.sh", "stop", lxc_name]) + [success, status] = self.container_status(lxc_name) + if not success: + return [False, status] + if status == "running": + sys_run("lxc-stop -k -n %s" % lxc_name) + [success, status] = self.container_status(lxc_name) + if status == "running": + logger.error("stop container %s failed" % lxc_name) + return [False, "stop container failed"] + else: + logger.info("stop container %s success" % lxc_name) + return [True, "stop container success"] + #if int(status) == 1: + # logger.error ("stop container %s failed" % lxc_name) + # return [False, "stop container failed"] + #else: + # logger.info ("stop container %s success" % lxc_name) + # return [True, "stop container success"] + + # check container: check LV and mountpoints, if wrong, try to repair it + def check_container(self, lxc_name): + logger.info ("check container:%s" % lxc_name) + if not check_volume("docklet-group", lxc_name): + logger.error("check container %s failed" % lxc_name) + return [False, "check container failed"] + #status = subprocess.call([self.libpath+"/lxc_control.sh", "check", lxc_name]) + self.imgmgr.checkFS(lxc_name) + logger.info ("check container %s success" % lxc_name) + return [True, "check container success"] + + def is_container(self, lxc_name): + if os.path.isdir(self.lxcpath+"/"+lxc_name): + return True + else: + return False + + def container_status(self, lxc_name): + if not self.is_container(lxc_name): + return [False, "container not found"] + Ret = sys_run("lxc-info -n %s | grep RUNNING") + #status = subprocess.call([self.libpath+"/lxc_control.sh", "status", lxc_name]) + if Ret.returncode == 0: + return [True, 'running'] + else: + return [True, 'stopped'] + + def list_containers(self): + if not os.path.isdir(self.lxcpath): + return [True, []] + lxclist = [] + for onedir in os.listdir(self.lxcpath): + if os.path.isfile(self.lxcpath+"/"+onedir+"/config"): + lxclist.append(onedir) + else: + logger.warning ("%s in lxc directory, but not container directory" % onedir) + return [True, lxclist] + + def delete_allcontainers(self): + logger.info ("deleting all containers...") + [status, containers] = self.list_containers() + result = True + for container in containers: + [result, status] = self.container_status(container) + if status=='running': + self.stop_container(container) + result = result & self.delete_container(container)[0] + if result: + logger.info ("deleted all containers success") + return [True, 'all deleted'] + else: + logger.error ("deleted all containers failed") + return [False, 'some containers delete failed'] + + # list containers in /var/lib/lxc/ as local + # list containers in FS_PREFIX/global/... on this host as global + def diff_containers(self): + [status, localcontainers] = self.list_containers() + globalpath = self.fspath+"/global/users/" + users = os.listdir(globalpath) + globalcontainers = [] + for user in users: + clusters = os.listdir(globalpath+user+"/clusters") + for cluster in clusters: + clusterfile = open(globalpath+user+"/clusters/"+cluster, 'r') + clusterinfo = json.loads(clusterfile.read()) + for container in clusterinfo['containers']: + if container['host'] == self.addr: + globalcontainers.append(container['containername']) + both = [] + onlylocal = [] + onlyglobal = [] + for container in localcontainers: + if container in globalcontainers: + both.append(container) + else: + onlylocal.append(container) + for container in globalcontainers: + if container not in localcontainers: + onlyglobal.append(container) + return [both, onlylocal, onlyglobal] + + def create_image(self,username,imagename,containername,description="not thing",isforce = False): + return self.imgmgr.createImage(username,imagename,containername,description,isforce) + + def flush_container(self,username,imagename,containername): + self.imgmgr.flush_one(username,imagename,containername) + logger.info("container: %s has been flushed" % containername) + return 0 + # check all local containers + def check_allcontainers(self): + [both, onlylocal, onlyglobal] = self.diff_containers() + logger.info("check all containers and repair them") + status = True + result = True + for container in both: + logger.info ("%s in LOCAL and GLOBAL checks..." % container) + [status, meg]=self.check_container(container) + result = result & status + if len(onlylocal) > 0: + result = False + logger.error ("some container only exists in LOCAL: %s" % onlylocal) + if len(onlyglobal) > 0: + result = False + logger.error ("some container only exists in GLOBAL: %s" % onlyglobal) + if status: + logger.info ("check all containers success") + return [True, 'all is ok'] + else: + logger.error ("check all containers failed") + return [False, 'not ok'] diff --git a/src/env.py b/src/env.py new file mode 100755 index 0000000..77c66bd --- /dev/null +++ b/src/env.py @@ -0,0 +1,54 @@ +import os + +def getenv(key): + if key == "CLUSTER_NAME": + return os.environ.get("CLUSTER_NAME", "docklet-vc") + elif key == "FS_PREFIX": + return os.environ.get("FS_PREFIX", "/opt/docklet") + elif key == "CLUSTER_SIZE": + return int(os.environ.get("CLUSTER_SIZE", 1)) + elif key == "CLUSTER_NET": + return os.environ.get("CLUSTER_NET", "172.16.0.1/16") + elif key == "CONTAINER_CPU": + return int(os.environ.get("CONTAINER_CPU", 100000)) + elif key == "CONTAINER_DISK": + return int(os.environ.get("CONTAINER_DISK", 1000)) + elif key == "CONTAINER_MEMORY": + return int(os.environ.get("CONTAINER_MEMORY", 1000)) + elif key == "DISKPOOL_SIZE": + return int(os.environ.get("DISKPOOL_SIZE", 5000)) + elif key == "ETCD": + return os.environ.get("ETCD", "localhost:2379") + elif key == "NETWORK_DEVICE": + return os.environ.get("NETWORK_DEVICE", "eth0") + elif key == "MASTER_IP": + return os.environ.get("MASTER_IP", "0.0.0.0") + elif key == "MASTER_PORT": + return int(os.environ.get("MASTER_PORT", 9000)) + elif key == "WORKER_PORT": + return int(os.environ.get("WORKER_PORT", 9001)) + elif key == "PROXY_PORT": + return int(os.environ.get("PROXY_PORT", 8000)) + elif key == "PROXY_API_PORT": + return int(os.environ.get("PROXY_API_PORT", 8001)) + elif key == "WEB_PORT": + return int(os.environ.get("WEB_PORT", 8888)) + elif key == "PORTAL_URL": + return os.environ.get("PORTAL_URL", + "http://"+getenv("MASTER_IP") + ":" + str(getenv("PROXY_PORT"))) + elif key == "LOG_LEVEL": + return os.environ.get("LOG_LEVEL", "DEBUG") + elif key == "LOG_LIFE": + return int(os.environ.get("LOG_LIFE", 10)) + elif key == "WEB_LOG_LEVEL": + return os.environ.get("WEB_LOG_LEVEL", "DEBUG") + elif key == "STORAGE": + return os.environ.get("STORAGE", "file") + elif key =="EXTERNAL_LOGIN": + return os.environ.get("EXTERNAL_LOGIN", "False") + elif key =="EMAIL_FROM_ADDRESS": + return os.environ.get("EMAIL_FROM_ADDRESS", "") + elif key =="ADMIN_EMAIL_ADDRESS": + return os.environ.get("ADMIN_EMAIL_ADDRESS", "") + else: + return os.environ[key] diff --git a/src/etcdlib.py b/src/etcdlib.py new file mode 100755 index 0000000..757c6a2 --- /dev/null +++ b/src/etcdlib.py @@ -0,0 +1,202 @@ +#!/usr/bin/python3 + +############################################################ +# etcdlib.py -- etcdlib provides a python etcd client +# author : Bao Li , UniAS, SEI, PKU +# license : BSD License +############################################################ + +import urllib.request, urllib.error +import random, json, time +#import sys + +# send http request to etcd server and get the json result +# url : url +# data : data to send by POST/PUT +# method : method used by http request +def dorequest(url, data = "", method = 'GET'): + try: + if method == 'GET': + response = urllib.request.urlopen(url, timeout=10).read() + else: + # use PUT/DELETE/POST, data should be encoded in ascii/bytes + request = urllib.request.Request(url, data = data.encode('ascii'), method = method) + response = urllib.request.urlopen(request, timeout=10).read() + # etcd may return json result with response http error code + # http error code will raise exception in urlopen + # catch the HTTPError and get the json result + except urllib.error.HTTPError as e: + # e.fp must be read() in this except block. + # the e will be deleted and e.fp will be closed after this block + response = e.fp.read() + # response is encoded in bytes. + # recoded in utf-8 and loaded in json + result = json.loads(str(response, encoding='utf-8')) + return result + + +# client to use etcd +# not all APIs are implemented below. just implement what we want +class Client(object): + # server is a string of one server IP and PORT, like 192.168.4.12:2379 + def __init__(self, server, prefix = ""): + self.clientid = str(random.random()) + self.server = "http://"+server + prefix = prefix.strip("/") + if prefix == "": + self.keysurl = self.server+"/v2/keys/" + else: + self.keysurl = self.server+"/v2/keys/"+prefix+"/" + self.members = self.getmembers() + + def getmembers(self): + out = dorequest(self.server+"/v2/members") + result = [] + for one in out['members']: + result.append(one['clientURLs'][0]) + return result + + # list etcd servers + def listmembers(self): + return self.members + + def clean(self): + [baseurl, dirname] = self.keysurl.split("/v2/keys/", maxsplit=1) + dirname = dirname.strip("/") + if dirname == '': # clean root content + [status, result] = self.listdir("") + if status: + for one in result: + if 'dir' in one: + self.deldir(one['key']) + else: + self.delkey(one['key']) + if self.isdir("_lock"): + self.deldir("_lock") + else: # clean a directory + if self.isdir("")[0]: + self.deldir("") + self.createdir("") + + def getkey(self, key): + key = key.strip("/") + out = dorequest(self.keysurl+key) + if 'action' not in out: + return [False, "key not found"] + else: + return [True, out['node']['value']] + + def setkey(self, key, value, ttl=0): + key = key.strip("/") + if ttl == 0: + out = dorequest(self.keysurl+key, 'value='+str(value), 'PUT') + else: + out = dorequest(self.keysurl+key, 'value='+str(value)+"&ttl="+str(ttl), 'PUT') + if 'action' not in out: + return [False, 'set key failed'] + else: + return [True, out['node']['value']] + + def delkey(self, key): + key = key.strip("/") + out = dorequest(self.keysurl+key, method='DELETE') + if 'action' not in out: + return [False, 'delete key failed'] + else: + return [True, out['node']['key']] + + def isdir(self, dirname): + dirname = dirname.strip("/") + out = dorequest(self.keysurl+dirname) + if 'action' not in out: + return [False, dirname+" not found"] + if 'dir' not in out['node']: + return [False, dirname+" is a key"] + return [True, dirname] + + def createdir(self, dirname): + dirname = dirname.strip("/") + out = dorequest(self.keysurl+dirname, 'dir=true', 'PUT') + if 'action' not in out: + return [False, 'create dir failed'] + else: + return [True, out['node']['key']] + + # list key-value in the directory. BUT not recursive. + # if necessary, recursive can be supported by add ?recursive=true in url + def listdir(self, dirname): + dirname = dirname.strip("/") + out = dorequest(self.keysurl+dirname) + if 'action' not in out: + return [False, 'list directory failed'] + else: + if "dir" not in out['node']: + return [False, dirname+" is a key"] + if 'nodes' not in out['node']: + return [True, []] + result=[] + for kv in out['node']['nodes']: + if 'dir' in kv: + result.append({"key":kv['key'], 'dir':True}) + else: + result.append({"key":kv['key'], 'value':kv['value']}) + return [True, result] + + # del directory with recursive=true + def deldir(self, dirname): + dirname = dirname.strip("/") + out = dorequest(self.keysurl+dirname+"?recursive=true", method='DELETE') + if 'action' not in out: + return [False, 'delete directory failed'] + else: + return [True, out['node']['key']] + + # watch a key or directory when it changes. + # recursive=true means anything in the directory changes, it will return + def watch(self, key): + key = key.strip("/") + out = dorequest(self.keysurl+key+"?wait=true&recursive=true") + if 'action' not in out: + return [False, 'watch key failed'] + else: + return [True, out['node']['value']] + + # atomic create a key. return immediately with True or False + def atomiccreate(self, key, value='atom'): + key = key.strip("/") + out = dorequest(self.keysurl+key+"?prevExist=false", 'value='+value, method='PUT') + if 'action' not in out: + return [False, 'atomic create key failed'] + else: + return [True, out['node']['key']] + + ################# Lock ################## + # lockref(key) : get a reference of a lock named key in etcd. + # not need to create this lock. it is automatical. + # acquire(lockref) : acquire this lock by lockref. + # blocked if lock is holded by others + # release(lockref) : release this lock by lockref + # only can be released by holder + ######################################### + def lockref(self, key): + key = key.strip("/") + return "_lock/"+key + + def acquire(self, lockref): + while(True): + if self.atomiccreate(lockref, self.clientid)[0]: + return [True, 'get lock'] + else: + time.sleep(0.01) + + def release(self, lockref): + value = self.getkey(lockref) + if value[0]: + if value[1] == self.clientid: + self.delkey(lockref) + return [True, 'release lock'] + else: + return [False, 'you are not lock holder'] + else: + return [False, 'no one holds this lock'] + diff --git a/src/guest_control.py b/src/guest_control.py new file mode 100755 index 0000000..73c238e --- /dev/null +++ b/src/guest_control.py @@ -0,0 +1,36 @@ +#!/usr/bin/python3 + +import os,time,subprocess +import env +import json + +class Guest(object): + def __init__(self,vclusterMgr,nodemgr): + self.libpath = env.getenv('DOCKLET_LIB') + self.fspath = env.getenv('FS_PREFIX') + self.lxcpath = "/var/lib/lxc" + self.G_vclustermgr = vclusterMgr + self.nodemgr = nodemgr + + def work(self): + image = {} + image['name'] = "base" + image['type'] = "base" + image['owner'] = "docklet" + while len(self.nodemgr.get_rpcs()) < 1: + time.sleep(10) + if not os.path.isdir(self.fspath+"/global/users/guest"): + subprocess.getoutput(self.libpath+"/userinit.sh guest") + user_info = {} + user_info["data"] = {} + user_info["data"]["groupinfo"] = {} + user_info["data"]["groupinfo"]["cpu"] = 100000 + user_info["data"]["groupinfo"]["memory"] = 2000 + user_info = json.dumps(user_info) + self.G_vclustermgr.create_cluster("guestspace", "guest", image, user_info) + while True: + self.G_vclustermgr.start_cluster("guestspace", "guest") + time.sleep(3600) + self.G_vclustermgr.stop_cluster("guestspace", "guest") + fspath = self.fspath + "/global/local/volume/guest-1-0/" + subprocess.getoutput("(cd %s && rm -rf *)" % fspath) diff --git a/src/httprest.py b/src/httprest.py new file mode 100755 index 0000000..08f11f9 --- /dev/null +++ b/src/httprest.py @@ -0,0 +1,585 @@ +#!/usr/bin/python3 + +# load environment variables in the beginning +# because some modules need variables when import +# for example, userManager/model.py + +# must first init loadenv +import tools, env +config = env.getenv("CONFIG") +tools.loadenv(config) + +# second init logging +# must import logger after initlogging, ugly +from log import initlogging +initlogging("docklet-master") +from log import logger + +import os +import http.server, cgi, json, sys, shutil +from socketserver import ThreadingMixIn +import nodemgr, vclustermgr, etcdlib, network, imagemgr +import userManager +import monitor +import guest_control, threading + +external_login = env.getenv('EXTERNAL_LOGIN') +if (external_login == 'TRUE'): + from userDependence import external_auth + +class DockletHttpHandler(http.server.BaseHTTPRequestHandler): + def response(self, code, output): + self.send_response(code) + self.send_header("Content-type", "application/json") + self.end_headers() + # wfile/rfile are in byte/binary encoded. need to recode + self.wfile.write(json.dumps(output).encode('ascii')) + self.wfile.write("\n".encode('ascii')) + # do not wfile.close() + # because self.handle_one_request will call wfile.flush after calling do_* + # and self.handle_one_request will close this wfile after timeout automatically + # (see /usr/lib/python3.4/http/server.py handle_one_request function) + #self.wfile.close() + + # override log_request to not print default request log + # we use the log info by ourselves in our style + def log_request(code = '-', size = '-'): + pass + + def do_PUT(self): + self.response(400, {'success':'false', 'message':'Not supported methond'}) + + def do_GET(self): + self.response(400, {'success':'false', 'message':'Not supported methond'}) + + def do_DELETE(self): + self.response(400, {'success':'false', 'message':'Not supported methond'}) + + # handler POST request + def do_POST(self): + global G_vclustermgr + global G_usermgr + #logger.info ("get request, header content:\n%s" % self.headers) + #logger.info ("read request content:\n%s" % self.rfile.read(int(self.headers["Content-Length"]))) + logger.info ("get request, path: %s" % self.path) + # for test + if self.path == '/test': + logger.info ("return welcome for test") + self.response(200, {'success':'true', 'message':'welcome to docklet'}) + return [True, 'test ok'] + + # check for not null content + if 'Content-Length' not in self.headers: + logger.info ("request content is null") + self.response(401, {'success':'false', 'message':'request content is null'}) + return [False, 'content is null'] + + # auth the user + # cgi.FieldStorage need fp/headers/environ. (see /usr/lib/python3.4/cgi.py) + form = cgi.FieldStorage(fp=self.rfile, headers=self.headers,environ={'REQUEST_METHOD':'POST'}) + cmds = self.path.strip('/').split('/') + if cmds[0] == 'register' and form.getvalue('activate', None) == None: + logger.info ("handle request : user register") + username = form.getvalue('username', '') + password = form.getvalue('password', '') + email = form.getvalue('email', '') + description = form.getvalue('description','') + if (username == '' or password == '' or email == ''): + self.response(500, {'success':'false'}) + newuser = G_usermgr.newuser() + newuser.username = form.getvalue('username') + newuser.password = form.getvalue('password') + newuser.e_mail = form.getvalue('email') + newuser.student_number = form.getvalue('studentnumber') + newuser.department = form.getvalue('department') + newuser.nickname = form.getvalue('truename') + newuser.truename = form.getvalue('truename') + newuser.description = form.getvalue('description') + newuser.status = "init" + newuser.auth_method = "local" + result = G_usermgr.register(user = newuser) + self.response(200, result) + return [True, "register succeed"] + if cmds[0] == 'login': + logger.info ("handle request : user login") + user = form.getvalue("user") + key = form.getvalue("key") + if user == None or key == None: + self.response(401, {'success':'false', 'message':'user or key is null'}) + return [False, "auth failed"] + auth_result = G_usermgr.auth(user, key) + if auth_result['success'] == 'false': + self.response(401, {'success':'false', 'message':'auth failed'}) + return [False, "auth failed"] + self.response(200, {'success':'true', 'action':'login', 'data': auth_result['data']}) + return [True, "auth succeeded"] + if cmds[0] == 'external_login': + logger.info ("handle request : external user login") + try: + result = G_usermgr.auth_external(form) + self.response(200, result) + return result + except: + result = {'success': 'false', 'reason': 'Something wrong happened when auth an external account'} + self.response(200, result) + return result + + token = form.getvalue("token") + if token == None: + self.response(401, {'success':'false', 'message':'user or key is null'}) + return [False, "auth failed"] + cur_user = G_usermgr.auth_token(token) + if cur_user == None: + self.response(401, {'success':'false', 'message':'token failed or expired', 'Unauthorized': 'True'}) + return [False, "auth failed"] + + + + user = cur_user.username + # parse the url and get to do actions + # /cluster/list + # /cluster/create & clustername + # /cluster/start & clustername + # /cluster/stop & clustername + # /cluster/delete & clustername + # /cluster/info & clustername + + + if cmds[0] == 'cluster': + clustername = form.getvalue('clustername') + # check for 'clustername' : all actions except 'list' need 'clustername' + if (cmds[1] != 'list') and clustername == None: + self.response(401, {'success':'false', 'message':'clustername is null'}) + return [False, "clustername is null"] + if cmds[1] == 'create': + image = {} + image['name'] = form.getvalue("imagename") + image['type'] = form.getvalue("imagetype") + image['owner'] = form.getvalue("imageowner") + user_info = G_usermgr.selfQuery(cur_user = cur_user) + user_info = json.dumps(user_info) + logger.info ("handle request : create cluster %s with image %s " % (clustername, image['name'])) + [status, result] = G_vclustermgr.create_cluster(clustername, user, image, user_info) + if status: + self.response(200, {'success':'true', 'action':'create cluster', 'message':result}) + else: + self.response(200, {'success':'false', 'action':'create cluster', 'message':result}) + elif cmds[1] == 'scaleout': + logger.info("handle request : scale out %s" % clustername) + image = {} + image['name'] = form.getvalue("imagename") + image['type'] = form.getvalue("imagetype") + image['owner'] = form.getvalue("imageowner") + logger.debug("imagename:" + image['name']) + logger.debug("imagetype:" + image['type']) + logger.debug("imageowner:" + image['owner']) + user_info = G_usermgr.selfQuery(cur_user = cur_user) + user_info = json.dumps(user_info) + [status, result] = G_vclustermgr.scale_out_cluster(clustername, user, image, user_info) + if status: + self.response(200, {'success':'true', 'action':'scale out', 'message':result}) + else: + self.response(200, {'success':'false', 'action':'scale out', 'message':result}) + elif cmds[1] == 'scalein': + logger.info("handle request : scale in %s" % clustername) + containername = form.getvalue("containername") + [status, result] = G_vclustermgr.scale_in_cluster(clustername, user, containername) + if status: + self.response(200, {'success':'true', 'action':'scale in', 'message':result}) + else: + self.response(200, {'success':'false', 'action':'scale in', 'message':result}) + elif cmds[1] == 'start': + logger.info ("handle request : start cluster %s" % clustername) + [status, result] = G_vclustermgr.start_cluster(clustername, user) + if status: + self.response(200, {'success':'true', 'action':'start cluster', 'message':result}) + else: + self.response(200, {'success':'false', 'action':'start cluster', 'message':result}) + elif cmds[1] == 'stop': + logger.info ("handle request : stop cluster %s" % clustername) + [status, result] = G_vclustermgr.stop_cluster(clustername, user) + if status: + self.response(200, {'success':'true', 'action':'stop cluster', 'message':result}) + else: + self.response(200, {'success':'false', 'action':'stop cluster', 'message':result}) + elif cmds[1] == 'delete': + logger.info ("handle request : delete cluster %s" % clustername) + [status, result] = G_vclustermgr.delete_cluster(clustername, user) + if status: + self.response(200, {'success':'true', 'action':'delete cluster', 'message':result}) + else: + self.response(200, {'success':'false', 'action':'delete cluster', 'message':result}) + elif cmds[1] == 'info': + logger.info ("handle request : info cluster %s" % clustername) + [status, result] = G_vclustermgr.get_clusterinfo(clustername, user) + if status: + self.response(200, {'success':'true', 'action':'info cluster', 'message':result}) + else: + self.response(200, {'success':'false', 'action':'info cluster', 'message':result}) + elif cmds[1] == 'list': + logger.info ("handle request : list clusters for %s" % user) + [status, clusterlist] = G_vclustermgr.list_clusters(user) + if status: + self.response(200, {'success':'true', 'action':'list cluster', 'clusters':clusterlist}) + else: + self.response(400, {'success':'false', 'action':'list cluster', 'message':clusterlist}) + + elif cmds[1] == 'flush': + from_lxc = form.getvalue('from_lxc') + G_vclustermgr.flush_cluster(user,clustername,from_lxc) + self.response(200, {'success':'true', 'action':'flush'}) + + elif cmds[1] == 'save': + imagename = form.getvalue("image") + description = form.getvalue("description") + containername = form.getvalue("containername") + isforce = form.getvalue("isforce") + if isforce == "true": + isforce = True + else: + isforce = False + [status,message] = G_vclustermgr.create_image(user,clustername,containername,imagename,description,isforce) + if status: + logger.info("image has been saved") + self.response(200, {'success':'true', 'action':'save'}) + else: + logger.debug(message) + self.response(400, {'success':'false', 'message':message}) + + else: + logger.warning ("request not supported ") + self.response(400, {'success':'false', 'message':'not supported request'}) + + # Request for Image + elif cmds[0] == 'image': + if cmds[1] == 'list': + images = G_imagemgr.list_images(user) + self.response(200, {'success':'true', 'images': images}) + elif cmds[1] == 'description': + image = {} + image['name'] = form.getvalue("imagename") + image['type'] = form.getvalue("imagetype") + image['owner'] = form.getvalue("imageowner") + description = G_imagemgr.get_image_description(user,image) + self.response(200, {'success':'true', 'message':description}) + elif cmds[1] == 'share': + image = form.getvalue('image') + G_imagemgr.shareImage(user,image) + self.response(200, {'success':'true', 'action':'share'}) + elif cmds[1] == 'unshare': + image = form.getvalue('image') + G_imagemgr.unshareImage(user,image) + self.response(200, {'success':'true', 'action':'unshare'}) + elif cmds[1] == 'delete': + image = form.getvalue('image') + G_imagemgr.removeImage(user,image) + self.response(200, {'success':'true', 'action':'delete'}) + else: + logger.warning("request not supported ") + self.response(400, {'success':'false', 'message':'not supported request'}) + + # Add Proxy + elif cmds[0] == 'addproxy': + logger.info ("handle request : add proxy") + proxy_ip = form.getvalue("ip") + proxy_port = form.getvalue("port") + clustername = form.getvalue("clustername") + [status, message] = G_vclustermgr.addproxy(user,clustername,proxy_ip,proxy_port) + if status is True: + self.response(200, {'success':'true', 'action':'addproxy'}) + else: + self.response(400, {'success':'false', 'message': message}) + # Delete Proxy + elif cmds[0] == 'deleteproxy': + logger.info ("handle request : delete proxy") + clustername = form.getvalue("clustername") + G_vclustermgr.deleteproxy(user,clustername) + self.response(200, {'success':'true', 'action':'deleteproxy'}) + + # Request for Monitor + elif cmds[0] == 'monitor': + logger.info("handle request: monitor") + res = {} + if cmds[1] == 'hosts': + com_id = cmds[2] + fetcher = monitor.Fetcher(etcdaddr,G_clustername,com_id) + if cmds[3] == 'meminfo': + res['meminfo'] = fetcher.get_meminfo() + elif cmds[3] == 'cpuinfo': + res['cpuinfo'] = fetcher.get_cpuinfo() + elif cmds[3] == 'cpuconfig': + res['cpuconfig'] = fetcher.get_cpuconfig() + elif cmds[3] == 'diskinfo': + res['diskinfo'] = fetcher.get_diskinfo() + elif cmds[3] == 'osinfo': + res['osinfo'] = fetcher.get_osinfo() + elif cmds[3] == 'containers': + res['containers'] = fetcher.get_containers() + elif cmds[3] == 'status': + res['status'] = fetcher.get_status() + elif cmds[3] == 'containerslist': + res['containerslist'] = fetcher.get_containerslist() + elif cmds[3] == 'containersinfo': + res = [] + conlist = fetcher.get_containerslist() + for container in conlist: + ans = {} + confetcher = monitor.Container_Fetcher(etcdaddr,G_clustername) + ans = confetcher.get_basic_info(container) + ans['cpu_use'] = confetcher.get_cpu_use(container) + ans['mem_use'] = confetcher.get_mem_use(container) + res.append(ans) + else: + self.response(400, {'success':'false', 'message':'not supported request'}) + return + + self.response(200, {'success':'true', 'monitor':res}) + elif cmds[1] == 'vnodes': + fetcher = monitor.Container_Fetcher(etcdaddr,G_clustername) + if cmds[3] == 'cpu_use': + res['cpu_use'] = fetcher.get_cpu_use(cmds[2]) + elif cmds[3] == 'mem_use': + res['mem_use'] = fetcher.get_mem_use(cmds[2]) + elif cmds[3] == 'basic_info': + res['basic_info'] = fetcher.get_basic_info(cmds[2]) + self.response(200, {'success':'true', 'monitor':res}) + elif cmds[1] == 'user': + if not user == 'root': + self.response(400, {'success':'false', 'message':'Root Required'}) + if cmds[3] == 'clustercnt': + flag = True + clutotal = 0 + clurun = 0 + contotal = 0 + conrun = 0 + [status, clusterlist] = G_vclustermgr.list_clusters(cmds[2]) + if status: + for clustername in clusterlist: + clutotal += 1 + [status2, result] = G_vclustermgr.get_clusterinfo(clustername, cmds[2]) + if status2: + contotal += result['size'] + if result['status'] == 'running': + clurun += 1 + conrun += result['size'] + else: + flag = False + if flag: + res = {} + res['clutotal'] = clutotal + res['clurun'] = clurun + res['contotal'] = contotal + res['conrun'] = conrun + self.response(200, {'success':'true', 'monitor':{'clustercnt':res}}) + else: + self.response(200, {'success':'false','message':clusterlist}) + elif cmds[3] == 'cluster': + if cmds[4] == 'list': + [status, clusterlist] = G_vclustermgr.list_clusters(cmds[2]) + if status: + self.response(200, {'success':'true', 'monitor':{'clusters':clusterlist}}) + else: + self.response(400, {'success':'false', 'message':clusterlist}) + elif cmds[4] == 'info': + clustername = form.getvalue('clustername') + logger.info ("handle request : info cluster %s" % clustername) + [status, result] = G_vclustermgr.get_clusterinfo(clustername, user) + if status: + self.response(200, {'success':'true', 'monitor':{'info':result}}) + else: + self.response(200, {'success':'false','message':result}) + else: + self.response(400, {'success':'false', 'message':'not supported request'}) + + elif cmds[1] == 'listphynodes': + res['allnodes'] = G_nodemgr.get_allnodes() + self.response(200, {'success':'true', 'monitor':res}) + # Request for User + elif cmds[0] == 'user': + logger.info("handle request: user") + if cmds[1] == 'modify': + #user = G_usermgr.query(username = form.getvalue("username"), cur_user = cur_user).get('token', None) + result = G_usermgr.modify(newValue = form, cur_user = cur_user) + self.response(200, result) + if cmds[1] == 'groupModify': + result = G_usermgr.groupModify(newValue = form, cur_user = cur_user) + self.response(200, result) + if cmds[1] == 'query': + result = G_usermgr.query(ID = form.getvalue("ID"), cur_user = cur_user) + if (result.get('success', None) == None or result.get('success', None) == "false"): + self.response(301,result) + else: + result = G_usermgr.queryForDisplay(user = result['token']) + self.response(200,result) + + elif cmds[1] == 'add': + user = G_usermgr.newuser(cur_user = cur_user) + user.username = form.getvalue('username') + user.password = form.getvalue('password') + user.e_mail = form.getvalue('e_mail', '') + user.status = "normal" + result = G_usermgr.register(user = user, cur_user = cur_user) + self.response(200, result) + elif cmds[1] == 'groupadd': + result = G_usermgr.groupadd(name = form.getvalue('name', None), cur_user = cur_user) + self.response(200, result) + elif cmds[1] == 'data': + logger.info("handle request: user/data") + result = G_usermgr.userList(cur_user = cur_user) + self.response(200, result) + elif cmds[1] == 'groupNameList': + result = G_usermgr.groupListName(cur_user = cur_user) + self.response(200, result) + elif cmds[1] == 'groupList': + result = G_usermgr.groupList(cur_user = cur_user) + self.response(200, result) + elif cmds[1] == 'groupQuery': + result = G_usermgr.groupQuery(ID = form.getvalue("ID", '3'), cur_user = cur_user) + if (result.get('success', None) == None or result.get('success', None) == "false"): + self.response(301,result) + else: + self.response(200,result) + elif cmds[1] == 'selfQuery': + result = G_usermgr.selfQuery(cur_user = cur_user) + self.response(200,result) + elif cmds[1] == 'selfModify': + result = G_usermgr.selfModify(cur_user = cur_user, newValue = form) + self.response(200,result) + elif cmds[0] == 'register' : + #activate + logger.info("handle request: user/activate") + newuser = G_usermgr.newuser() + newuser.username = cur_user.username + newuser.nickname = cur_user.truename + newuser.status = 'applying' + newuser.user_group = cur_user.user_group + newuser.auth_method = cur_user.auth_method + newuser.e_mail = form.getvalue('email','') + newuser.student_number = form.getvalue('studentnumber', '') + newuser.department = form.getvalue('department', '') + newuser.truename = form.getvalue('truename', '') + newuser.tel = form.getvalue('tel', '') + newuser.description = form.getvalue('description', '') + result = G_usermgr.register(user = newuser) + userManager.send_remind_activating_email(newuser.username) + self.response(200,result) + else: + logger.warning ("request not supported ") + self.response(400, {'success':'false', 'message':'not supported request'}) + +class ThreadingHttpServer(ThreadingMixIn, http.server.HTTPServer): + pass + +if __name__ == '__main__': + global G_nodemgr + global G_vclustermgr + global G_usermgr + global etcdclient + global G_networkmgr + global G_clustername + # move 'tools.loadenv' to the beginning of this file + + fs_path = env.getenv("FS_PREFIX") + logger.info("using FS_PREFIX %s" % fs_path) + + etcdaddr = env.getenv("ETCD") + logger.info("using ETCD %s" % etcdaddr) + + G_clustername = env.getenv("CLUSTER_NAME") + logger.info("using CLUSTER_NAME %s" % G_clustername) + + # get network interface + net_dev = env.getenv("NETWORK_DEVICE") + logger.info("using NETWORK_DEVICE %s" % net_dev) + + ipaddr = network.getip(net_dev) + if ipaddr==False: + logger.error("network device is not correct") + sys.exit(1) + else: + logger.info("using ipaddr %s" % ipaddr) + + # init etcdlib client + try: + etcdclient = etcdlib.Client(etcdaddr, prefix = G_clustername) + except Exception: + logger.error ("connect etcd failed, maybe etcd address not correct...") + sys.exit(1) + mode = 'recovery' + if len(sys.argv) > 1 and sys.argv[1] == "new": + mode = 'new' + + # do some initialization for mode: new/recovery + if mode == 'new': + # clean and initialize the etcd table + if etcdclient.isdir(""): + etcdclient.clean() + else: + etcdclient.createdir("") + token = tools.gen_token() + tokenfile = open(fs_path+"/global/token", 'w') + tokenfile.write(token) + tokenfile.write("\n") + tokenfile.close() + etcdclient.setkey("token", token) + etcdclient.setkey("service/master", ipaddr) + etcdclient.setkey("service/mode", mode) + etcdclient.createdir("machines/allnodes") + etcdclient.createdir("machines/runnodes") + etcdclient.setkey("vcluster/nextid", "1") + # clean all users vclusters files : FS_PREFIX/global/users//clusters/ + usersdir = fs_path+"/global/users/" + for user in os.listdir(usersdir): + shutil.rmtree(usersdir+user+"/clusters") + shutil.rmtree(usersdir+user+"/hosts") + os.mkdir(usersdir+user+"/clusters") + os.mkdir(usersdir+user+"/hosts") + else: + # check whether cluster exists + if not etcdclient.isdir("")[0]: + logger.error ("cluster not exists, you should use mode:new ") + sys.exit(1) + # initialize the etcd table for recovery + token = tools.gen_token() + tokenfile = open(fs_path+"/global/token", 'w') + tokenfile.write(token) + tokenfile.write("\n") + tokenfile.close() + etcdclient.setkey("token", token) + etcdclient.setkey("service/master", ipaddr) + etcdclient.setkey("service/mode", mode) + if etcdclient.isdir("_lock")[0]: + etcdclient.deldir("_lock") + if etcdclient.isdir("machines/runnodes")[0]: + etcdclient.deldir("machines/runnodes") + etcdclient.createdir("machines/runnodes") + + G_usermgr = userManager.userManager('root') + clusternet = env.getenv("CLUSTER_NET") + logger.info("using CLUSTER_NET %s" % clusternet) + + G_networkmgr = network.NetworkMgr(clusternet, etcdclient, mode) + G_networkmgr.printpools() + + # start NodeMgr and NodeMgr will wait for all nodes to start ... + G_nodemgr = nodemgr.NodeMgr(G_networkmgr, etcdclient, addr = ipaddr, mode=mode) + logger.info("nodemgr started") + G_vclustermgr = vclustermgr.VclusterMgr(G_nodemgr, G_networkmgr, etcdclient, ipaddr, mode) + logger.info("vclustermgr started") + G_imagemgr = imagemgr.ImageMgr() + logger.info("imagemgr started") + Guest_control = guest_control.Guest(G_vclustermgr,G_nodemgr) + logger.info("guest control started") + threading.Thread(target=Guest_control.work, args=()).start() + + logger.info("startting to listen on: ") + masterip = env.getenv('MASTER_IP') + logger.info("using MASTER_IP %s", masterip) + + masterport = env.getenv('MASTER_PORT') + logger.info("using MASTER_PORT %d", int(masterport)) + +# server = http.server.HTTPServer((masterip, masterport), DockletHttpHandler) + server = ThreadingHttpServer((masterip, int(masterport)), DockletHttpHandler) + logger.info("starting master server") + server.serve_forever() diff --git a/src/imagemgr.py b/src/imagemgr.py new file mode 100755 index 0000000..663f75d --- /dev/null +++ b/src/imagemgr.py @@ -0,0 +1,284 @@ +#!/usr/bin/python3 + +""" +design: + 1. When user create an image, it will upload to an image server, at the same time, local host + will save an image. A time file will be made with them. Everytime a container start by this + image, the time file will update. + 2. When user save an image, if it is a update option, it will faster than create a new image. + 3. At image server and every physical host, run a shell script to delete the image, which is + out of time. + 4. We can show every user their own images and the images are shared by other. User can new a + cluster or scale out a new node by them. And user can remove his own images. + 5. When a remove option occur, the image server will delete it. But some physical host may + also maintain it. I think it doesn't matter. + 6. The manage of lvm has been including in this module. +""" + + +from configparser import ConfigParser +from io import StringIO +import os,sys,subprocess,time,re,datetime,threading + +from log import logger +import env +from lvmtool import * + +class ImageMgr(): + def sys_call(self,command): + output = subprocess.getoutput(command).strip() + return None if output == '' else output + + def sys_return(self,command): + return_value = subprocess.call(command,shell=True) + return return_value + + def __init__(self): + self.NFS_PREFIX = env.getenv('FS_PREFIX') + self.imgpath = self.NFS_PREFIX + "/global/images/" + self.srcpath = env.getenv('DOCKLET_LIB') + "/" + self.imageserver = "192.168.6.249" + + def datetime_toString(self,dt): + return dt.strftime("%Y-%m-%d %H:%M:%S") + + def string_toDatetime(self,string): + return datetime.datetime.strptime(string, "%Y-%m-%d %H:%M:%S") + + def updateinfo(self,imgpath,image,description): + image_info_file = open(imgpath+"."+image+".info",'w') + image_info_file.writelines([self.datetime_toString(datetime.datetime.now()) + "\n", "unshare"]) + image_info_file.close() + image_description_file = open(imgpath+"."+image+".description", 'w') + image_description_file.write(description) + image_description_file.close() + + def dealpath(self,fspath): + if fspath[-1:] == "/": + return self.dealpath(fspath[:-1]) + else: + return fspath + + def createImage(self,user,image,lxc,description="Not thing",isforce = False): + fspath = self.NFS_PREFIX + "/local/volume/" + lxc + imgpath = self.imgpath + "private/" + user + "/" + if isforce is False: + logger.info("this save operation is not force") + if os.path.exists(imgpath+image): + return [False,"target image is exists"] + self.sys_call("mkdir -p %s" % imgpath+image) + self.sys_call("rsync -a --delete --exclude=lost+found/ --exclude=nfs/ --exclude=dev/ --exclude=mnt/ --exclude=tmp/ --exclude=media/ --exclude=proc/ --exclude=sys/ %s/ %s/" % (self.dealpath(fspath),imgpath+image)) + self.sys_call("rm -f %s" % (imgpath+"."+image+"_docklet_share")) + self.updateinfo(imgpath,image,description) + logger.info("image:%s from LXC:%s create success" % (image,lxc)) + return [True, "create image success"] + + def prepareImage(self,user,image,fspath): + imagename = image['name'] + imagetype = image['type'] + imageowner = image['owner'] + if imagename == "base" and imagetype == "base": + return + if imagetype == "private": + imgpath = self.imgpath + "private/" + user + "/" + else: + imgpath = self.imgpath + "public/" + imageowner + "/" + self.sys_call("rsync -a --delete --exclude=lost+found/ --exclude=nfs/ --exclude=dev/ --exclude=mnt/ --exclude=tmp/ --exclude=media/ --exclude=proc/ --exclude=sys/ %s/ %s/" % (imgpath+imagename,self.dealpath(fspath))) + #self.sys_call("rsync -a --delete --exclude=nfs/ %s/ %s/" % (imgpath+image,self.dealpath(fspath))) + #self.updatetime(imgpath,image) + return + + def prepareFS(self,user,image,lxc,size="1000",vgname="docklet-group"): + rootfs = "/var/lib/lxc/%s/rootfs" % lxc + layer = self.NFS_PREFIX + "/local/volume/" + lxc + #check mountpoint + Ret = sys_run("mountpoint %s" % rootfs) + if Ret.returncode == 0: + logger.info("%s not clean" % rootfs) + sys_run("umount -l %s" % rootfs) + Ret = sys_run("mountpoint %s" % layer) + if Ret.returncode == 0: + logger.info("%s not clean" % layer) + sys_run("umount -l %s" % layer) + sys_run("rm -rf %s %s" % (rootfs, layer)) + sys_run("mkdir -p %s %s" % (rootfs, layer)) + + #prepare volume + if check_volume(vgname,lxc): + logger.info("volume %s already exists, delete it") + delete_volume(vgname,lxc) + if not new_volume(vgname,lxc,size): + logger.error("volume %s create failed" % lxc) + return False + sys_run("mkfs.ext4 /dev/%s/%s" % (vgname,lxc)) + sys_run("mount /dev/%s/%s %s" %(vgname,lxc,layer)) + #self.sys_call("mountpoint %s &>/dev/null && umount -l %s" % (rootfs,rootfs)) + #self.sys_call("mountpoint %s &>/dev/null && umount -l %s" % (layer,layer)) + #self.sys_call("rm -rf %s %s && mkdir -p %s %s" % (rootfs,layer,rootfs,layer)) + #rv = self.sys_return(self.srcpath+"lvmtool.sh check volume %s %s" % (vgname,lxc)) + #if rv == 1: + # self.sys_call(self.srcpath+"lvmtool.sh newvolume %s %s %s %s" % (vgname,lxc,size,layer)) + #else: + # self.sys_call(self.srcpath+"lvmtool.sh mount volume %s %s %s" % (vgname,lxc,layer)) + #self.sys_call("mkdir -p %s/overlay %s/work" % (layer,layer)) + #self.sys_call("mount -t overlay overlay -olowerdir=%s/local/basefs,upperdir=%s/overlay,workdir=%s/work %s" % (self.NFS_PREFIX,layer,layer,rootfs)) + self.sys_call("mount -t aufs -o br=%s=rw:%s/local/basefs=ro+wh none %s/" % (layer,self.NFS_PREFIX,rootfs)) + logger.info("FS has been prepared for user:%s lxc:%s" % (user,lxc)) + #self.prepareImage(user,image,layer+"/overlay") + self.prepareImage(user,image,layer) + logger.info("image has been prepared") + return True + + def deleteFS(self,lxc,vgname="docklet-group"): + rootfs = "/var/lib/lxc/%s/rootfs" % lxc + layer = self.NFS_PREFIX + "/local/volume/" + lxc + lxcpath = "/var/lib/lxc/%s" % lxc + sys_run("lxc-stop -k -n %s" % lxc) + #check mountpoint + Ret = sys_run("mountpoint %s" % rootfs) + if Ret.returncode == 0: + sys_run("umount -l %s" % rootfs) + Ret = sys_run("mountpoint %s" % layer) + if Ret.returncode == 0: + sys_run("umount -l %s" % layer) + if check_volume(vgname, lxc): + delete_volume(vgname, lxc) + sys_run("rm -rf %s %s" % (layer,lxcpath)) + return True + + def checkFS(self, lxc, vgname="docklet-group"): + rootfs = "/var/lib/lxc/%s/rootfs" % lxc + layer = self.NFS_PREFIX + "/local/volume/" + lxc + if not os.path.isdir(layer): + sys_run("mkdir -p %s" % layer) + #check mountpoint + Ret = sys_run("mountpoint %s" % layer) + if Ret.returncode != 0: + sys_run("mount /dev/%s/%s %s" % (vgname,lxc,layer)) + Ret = sys_run("mountpoint %s" % rootfs) + if Ret.returncode != 0: + self.sys_call("mount -t aufs -o br=%s=rw:%s/local/basefs=ro+wh none %s/" % (layer,self.NFS_PREFIX,rootfs)) + return True + + + def removeImage(self,user,image): + imgpath = self.imgpath + "private/" + user + "/" + self.sys_call("rm -rf %s/" % imgpath+image) + self.sys_call("rm -f %s" % imgpath+"."+image+".info") + self.sys_call("rm -f %s" % (imgpath+"."+image+".description")) + + def shareImage(self,user,image): + imgpath = self.imgpath + "private/" + user + "/" + share_imgpath = self.imgpath + "public/" + user + "/" + image_info_file = open(imgpath+"."+image+".info", 'r') + [createtime, isshare] = image_info_file.readlines() + isshare = "shared" + image_info_file.close() + image_info_file = open(imgpath+"."+image+".info", 'w') + image_info_file.writelines([createtime, isshare]) + image_info_file.close() + self.sys_call("mkdir -p %s" % (share_imgpath + image)) + self.sys_call("rsync -a --delete %s/ %s/" % (imgpath+image,share_imgpath+image)) + self.sys_call("cp %s %s" % (imgpath+"."+image+".info",share_imgpath+"."+image+".info")) + self.sys_call("cp %s %s" % (imgpath+"."+image+".description",share_imgpath+"."+image+".description")) + + + + def unshareImage(self,user,image): + public_imgpath = self.imgpath + "public/" + user + "/" + imgpath = self.imgpath + "private/" + user + "/" + if os.path.exists(imgpath + image): + image_info_file = open(imgpath+"."+image+".info", 'r') + [createtime, isshare] = image_info_file.readlines() + isshare = "unshare" + image_info_file.close() + image_info_file = open(imgpath+"."+image+".info", 'w') + image_info_file.writelines([createtime, isshare]) + image_info_file.close() + self.sys_call("rm -rf %s/" % public_imgpath+image) + self.sys_call("rm -f %s" % public_imgpath+"."+image+".info") + self.sys_call("rm -f %s" % public_imgpath+"."+image+".description") + + + def get_image_info(self, user, image, imagetype): + if imagetype == "private": + imgpath = self.imgpath + "private/" + user + "/" + else: + imgpath = self.imgpath + "public/" + user + "/" + image_info_file = open(imgpath+"."+image+".info",'r') + time = image_info_file.readline() + image_info_file.close() + image_description_file = open(imgpath+"."+image+".description",'r') + description = image_description_file.read() + image_description_file.close() + if len(description) > 15: + description = description[:15] + "......" + return [time, description] + + def get_image_description(self, user, image): + if image['type'] == "private": + imgpath = self.imgpath + "private/" + user + "/" + else: + imgpath = self.imgpath + "public/" + image['owner'] + "/" + image_description_file = open(imgpath+"."+image['name']+".description", 'r') + description = image_description_file.read() + image_description_file.close() + return description + + def list_images(self,user): + images = {} + images["private"] = [] + images["public"] = {} + imgpath = self.imgpath + "private/" + user + "/" + private_images = self.sys_call("ls %s" % imgpath) + if private_images is not None and private_images[:3] != "ls:": + private_images = private_images.split("\n") + for image in private_images: + fimage={} + fimage["name"] = image + fimage["isshared"] = self.isshared(user,image) + [time, description] = self.get_image_info(user, image, "private") + fimage["time"] = time + fimage["description"] = description + images["private"].append(fimage) + else: + pass + imgpath = self.imgpath + "public" + "/" + public_users = self.sys_call("ls %s" % imgpath) + if public_users is not None and public_users[:3] != "ls:": + public_users = public_users.split("\n") + for public_user in public_users: + imgpath = self.imgpath + "public/" + public_user + "/" + public_images = self.sys_call("ls %s" % imgpath) + if public_images is not None and public_images[:3] != "ls:": + public_images = public_images.split("\n") + images["public"][public_user] = [] + for image in public_images: + fimage = {} + fimage["name"] = image + [time, description] = self.get_image_info(public_user, image, "public") + fimage["time"] = time + fimage["description"] = description + images["public"][public_user].append(fimage) + else: + pass + return images + + def isshared(self,user,image): + imgpath = self.imgpath + "private/" + user + "/" + image_info_file = open(imgpath+"."+image+".info",'r') + [time, isshare] = image_info_file.readlines() + image_info_file.close() + if isshare == "shared": + return "true" + else: + return "false" + +if __name__ == '__main__': + mgr = ImageMgr() + if sys.argv[1] == "prepareImage": + mgr.prepareImage(sys.argv[2],sys.argv[3],sys.argv[4]) + elif sys.argv[1] == "create": + mgr.createImage(sys.argv[2],sys.argv[3],sys.argv[4]) + else: + logger.warning("unknown option") diff --git a/src/log.py b/src/log.py new file mode 100755 index 0000000..b2985c2 --- /dev/null +++ b/src/log.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python + +import logging +import logging.handlers +import argparse +import sys +import time # this is only being used as part of the example +import os +import env + +# logger should only be imported after initlogging has been called +logger = None + +def initlogging(name='docklet'): + # Deafults + global logger + + homepath = env.getenv('FS_PREFIX') + LOG_FILENAME = homepath + '/local/log/' + name + '.log' + + LOG_LIFE = env.getenv('LOG_LIFE') + LOG_LEVEL = env.getenv('LOG_LEVEL') + if LOG_LEVEL == "DEBUG": + LOG_LEVEL = logging.DEBUG + elif LOG_LEVEL == "INFO": + LOG_LEVEL = logging.INFO + elif LOG_LEVEL == "WARNING": + LOG_LEVEL = logging.WARNING + elif LOG_LEVEL == "ERROR": + LOG_LEVEL = logging.ERROR + elif LOG_LEVEL == "CRITICAL": + LOG_LEVEL = logging.CRITIAL + else: + LOG_LEVEL = logging.DEBUG + + logger = logging.getLogger(name) + # Configure logging to log to a file, making a new file at midnight and keeping the last 3 day's data + # Give the logger a unique name (good practice) + # Set the log level to LOG_LEVEL + logger.setLevel(LOG_LEVEL) + # Make a handler that writes to a file, making a new file at midnight and keeping 3 backups + handler = logging.handlers.TimedRotatingFileHandler(LOG_FILENAME, + when="midnight", backupCount=LOG_LIFE) + # Format each log message like this + formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(module)s[%(lineno)d] %(message)s') + # Attach the formatter to the handler + handler.setFormatter(formatter) + # Attach the handler to the logger + logger.addHandler(handler) + + # Replace stdout with logging to file at INFO level + sys.stdout = RedirectLogger(logger, logging.INFO) + # Replace stderr with logging to file at ERROR level + sys.stderr = RedirectLogger(logger, logging.ERROR) + + # Make a class we can use to capture stdout and sterr in the log +class RedirectLogger(object): + def __init__(self, logger, level): + """Needs a logger and a logger level.""" + self.logger = logger + self.level = level + + def write(self, message): + # Only log if there is a message (not just a new line) + if message.rstrip() != "": + self.logger.log(self.level, message.rstrip()) + + def flush(self): + for handler in self.logger.handlers: + handler.flush() diff --git a/src/lvmtool.py b/src/lvmtool.py new file mode 100755 index 0000000..152f83e --- /dev/null +++ b/src/lvmtool.py @@ -0,0 +1,159 @@ +#!/usr/bin/python3 + +import env,subprocess,os,time +from log import logger + +def sys_run(command): + Ret = subprocess.run(command, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell=True, check=False) + return Ret + +def new_group(group_name, size = "5000", file_path = "/opt/docklet/local/docklet-storage"): + storage = env.getenv("STORAGE") + logger.info("begin initialize lvm group:%s with size %sM" % (group_name,size)) + if storage == "file": + #check vg + Ret = sys_run("vgdisplay " + group_name) + if Ret.returncode == 0: + logger.info("lvm group: " + group_name + " already exists, delete it") + Ret = sys_run("vgremove -f " + group_name) + if Ret.returncode != 0: + logger.error("delete VG %s failed:%s" % (group_name,Ret.stdout.decode('utf-8'))) + #check pv + Ret = sys_run("pvdisplay /dev/loop0") + if Ret.returncode == 0: + Ret = sys_run("pvremove -ff /dev/loop0") + if Ret.returncode != 0: + logger.error("remove pv failed:%s" % Ret.stdout.decode('utf-8')) + #check mountpoint + Ret = sys_run("losetup /dev/loop0") + if Ret.returncode == 0: + logger.info("/dev/loop0 already exists, detach it") + Ret = sys_run("losetup -d /dev/loop0") + if Ret.returncode != 0: + logger.error("losetup -d failed:%s" % Ret.stdout.decode('utf-8')) + #check file_path + if os.path.exists(file_path): + logger.info(file_path + " for lvm group already exists, delete it") + os.remove(file_path) + if not os.path.isdir(file_path[:file_path.rindex("/")]): + os.makedirs(file_path[:file_path.rindex("/")]) + sys_run("dd if=/dev/zero of=%s bs=1M seek=%s count=0" % (file_path,size)) + sys_run("losetup /dev/loop0 " + file_path) + sys_run("vgcreate %s /dev/loop0" % group_name) + logger.info("initialize lvm group:%s with size %sM success" % (group_name,size)) + return True + + elif storage == "disk": + disk = env.getenv("DISK") + if disk is None: + logger.error("use disk for story without a physical disk") + return False + #check vg + Ret = sys_run("vgdisplay " + group_name) + if Ret.returncode == 0: + logger.info("lvm group: " + group_name + " already exists, delete it") + Ret = sys_run("vgremove -f " + group_name) + if Ret.returncode != 0: + logger.error("delete VG %s failed:%s" % (group_name,Ret.stdout.decode('utf-8'))) + sys_run("vgcreate %s %s" % (group_name,disk)) + logger.info("initialize lvm group:%s with size %sM success" % (group_name,size)) + return True + + else: + logger.info("unknown storage type:" + storage) + return False + +def recover_group(group_name,file_path="/opt/docklet/local/docklet-storage"): + storage = env.getenv("STORAGE") + if storage == "file": + if not os.path.exists(file_path): + logger.error("%s not found, unable to recover VG" % file_path) + return False + #recover mountpoint + Ret = sys_run("losetup /dev/loop0") + if Ret.returncode != 0: + Ret = sys_run("losetup /dev/loop0 " + file_path) + if Ret.returncode != 0: + logger.error("losetup failed:%s" % Ret.stdout.decode('utf-8')) + return False + time.sleep(1) + #recover vg + Ret = sys_run("vgdisplay " + group_name) + if Ret.returncode != 0: + Ret = sys_run("vgcreate %s /dev/loop0" % group_name) + if Ret.returncode != 0: + logger.error("create VG %s failed:%s" % (group_name,Ret.stdout.decode('utf-8'))) + return False + logger.info("recover VG %s success" % group_name) + + elif storage == "disk": + disk = env.getenv("DISK") + if disk is None: + logger.error("use disk for story without a physical disk") + return False + #recover vg + Ret = sys_run("vgdisplay " + group_name) + if Ret.returncode != 0: + Ret = sys_run("vgcreate %s %s" % (group_name,disk)) + if Ret.returncode != 0: + logger.error("create VG %s failed:%s" % (group_name,Ret.stdout.decode('utf-8'))) + return False + logger.info("recover VG %s success" % group_name) + +def new_volume(group_name,volume_name,size): + Ret = sys_run("lvdisplay %s/%s" % (group_name,volume_name)) + if Ret.returncode == 0: + logger.info("logical volume already exists, delete it") + Ret = sys_run("lvremove -f %s/%s" % (group_name,volume_name)) + if Ret.returncode != 0: + logger.error("delete logical volume %s failed: %s" % + (volume_name, Ret.stdout.decode('utf-8'))) + Ret = sys_run("lvcreate -L %sM -n %s %s" % (size,volume_name,group_name)) + if Ret.returncode != 0: + logger.error("lvcreate failed: %s" % Ret.stdout.decode('utf-8')) + return False + logger.info("create lv success") + return True + +def check_group(group_name): + Ret = sys_run("vgdisplay %s" % group_name) + if Ret.returncode == 0: + return True + else: + return False + +def check_volume(group_name,volume_name): + Ret = sys_run("lvdisplay %s/%s" % (group_name,volume_name)) + if Ret.returncode == 0: + return True + else: + return False + +def delete_group(group_name): + Ret = sys_run("vgdisplay %s" % group_name) + if Ret.returncode == 0: + Ret = sys_run("vgremove -f %s" % group_name) + if Ret.returncode == 0: + logger.info("delete vg %s success" % group_name) + return True + else: + logger.error("delete vg %s failed:%s" % (group_name,Ret.stdout.decode('utf-8'))) + return False + else: + logger.info("vg %s does not exists" % group_name) + return True + +def delete_volume(group_name, volume_name): + Ret = sys_run("lvdisplay %s/%s" % (group_name, volume_name)) + if Ret.returncode == 0: + Ret = sys_run("lvremove -f %s/%s" % (group_name, volume_name)) + if Ret.returncode == 0: + logger.info("delete lv %s in vg %s success" % (volume_name,group_name)) + return True + else: + logger.error("delete lv %s in vg %s failed:%s" % (volume_name,group_name,Ret.stdout.decode('utf-8'))) + return False + else: + logger.info("lv %s in vg %s does not exists" % (volume_name,group_name)) + + diff --git a/src/model.py b/src/model.py new file mode 100755 index 0000000..c42e4e6 --- /dev/null +++ b/src/model.py @@ -0,0 +1,144 @@ +#coding=utf-8 +''' +2 tables: users, usergroup +User: + id + username + password + avatar + nickname + description + status + student_number + department + truename + tel + e_mail + register_date + user_group + auth_method + +Usergroup + id + name + +Token expiration can be set in User.generate_auth_token +''' +from flask import Flask +from flask.ext.sqlalchemy import SQLAlchemy +from datetime import datetime +from base64 import b64encode, b64decode +import os + +#this class from itsdangerous implements token<->user +#from itsdangerous import TimedJSONWebSignatureSerializer as Serializer +from itsdangerous import JSONWebSignatureSerializer as Serializer +from itsdangerous import SignatureExpired, BadSignature + +import env + +fsdir = env.getenv('FS_PREFIX') + +app = Flask(__name__) +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+fsdir+'/local/UserTable.db' +try: + secret_key_file = open(env.getenv('FS_PREFIX') + '/local/token_secret_key.txt') + app.secret_key = secret_key_file.read() + secret_key_file.close() +except: + from os import urandom + secret_key = urandom(24) + secret_key = b64encode(secret_key).decode('utf-8') + app.secret_key = secret_key + secret_key_file = open(env.getenv('FS_PREFIX') + '/local/token_secret_key.txt', 'w') + secret_key_file.write(secret_key) + secret_key_file.close() + +db = SQLAlchemy(app) + +class User(db.Model): + id = db.Column(db.Integer, primary_key=True) + username = db.Column(db.String(10), unique=True) + password = db.Column(db.String(100)) + avatar = db.Column(db.String(30)) + nickname = db.Column(db.String(10)) + description = db.Column(db.String(15)) + status = db.Column(db.String(10)) + e_mail = db.Column(db.String(20)) + student_number = db.Column(db.String(20)) + department = db.Column(db.String(20)) + truename = db.Column(db.String(20)) + tel = db.Column(db.String(20)) + register_date = db.Column(db.String(10)) + user_group = db.Column(db.String(50)) + auth_method = db.Column(db.String(10)) + + + def __init__(self, username, password, avatar="default.png", nickname = "", description = "", status = "init", + e_mail = "" , student_number = "", department = "", truename = "", tel="", date = None, usergroup = "primary" + , auth_method = "local"): + # using sha512 + #if (len(password) <= 6): + # self = None + # return None + self.username = username + self.password = password + self.avatar = avatar + self.nickname = nickname + self.description = description + self.status = status + self.e_mail = e_mail + self.student_number = student_number + self.department = department + self.truename = truename + self.tel = tel + if (date != None): + self.register_date = date + else: + self.register_date = datetime.utcnow() + if (UserGroup.query.filter_by(name=usergroup).first() != None): + self.user_group = usergroup + else: + self.user_group = "primary" + self.auth_method = auth_method + + def __repr__(self): + return '' % self.username + + #token will expire after 3600s + # replace token with no time expiration + def generate_auth_token(self, expiration = 3600): + s = Serializer(app.config['SECRET_KEY']) + str = s.dumps({'id': self.id}) + return b64encode(str).decode('utf-8') + + @staticmethod + def verify_auth_token(token): + s = Serializer(app.config['SECRET_KEY']) + try: + data = s.loads(b64decode(token)) + except SignatureExpired: + return None # valid token, but expired + except BadSignature: + return None # invalid token + user = User.query.get(data['id']) + return user + + +class UserGroup(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(50)) + cpu = db.Column(db.String(10)) + memory = db.Column(db.String(10)) + imageQuantity = db.Column(db.String(10)) + lifeCycle = db.Column(db.String(10)) + + def __init__(self, name): + self.name = name + self.cpu = '100000' + self.memory = '2000' + self.imageQuantity = '10' + self.lifeCycle = '24' + + def __repr__(self): + return '' % self.name diff --git a/src/monitor.py b/src/monitor.py new file mode 100755 index 0000000..928eae4 --- /dev/null +++ b/src/monitor.py @@ -0,0 +1,331 @@ +#!/usr/bin/python3 + +import subprocess,re,sys,etcdlib,psutil +import time,threading,json,traceback,platform + +from log import logger + +class Container_Collector(threading.Thread): + + def __init__(self,etcdaddr,cluster_name,host,cpu_quota,mem_quota,test=False): + threading.Thread.__init__(self) + self.thread_stop = False + self.host = host + self.etcdser = etcdlib.Client(etcdaddr,"/%s/monitor" % (cluster_name)) + self.etcdser.setkey('/vnodes/cpu_quota', cpu_quota) + self.etcdser.setkey('/vnodes/mem_quota', mem_quota) + self.cpu_quota = float(cpu_quota)/100000.0 + self.mem_quota = float(mem_quota)*1000000/1024 + self.interval = 2 + self.test = test + return + + def list_container(self): + output = subprocess.check_output(["sudo lxc-ls"],shell=True) + output = output.decode('utf-8') + containers = re.split('\s+',output) + return containers + + def collect_containerinfo(self,container_name): + output = subprocess.check_output("sudo lxc-info -n %s" % (container_name),shell=True) + output = output.decode('utf-8') + parts = re.split('\n',output) + info = {} + basic_info = {} + for part in parts: + if not part == '': + key_val = re.split(':',part) + key = key_val[0] + val = key_val[1] + info[key] = val.lstrip() + basic_info['Name'] = info['Name'] + basic_info['State'] = info['State'] + if(info['State'] == 'STOPPED'): + self.etcdser.setkey('/vnodes/%s/basic_info'%(container_name), basic_info) + return False + basic_info['PID'] = info['PID'] + basic_info['IP'] = info['IP'] + self.etcdser.setkey('/vnodes/%s/basic_info'%(container_name), basic_info) + cpu_parts = re.split(' +',info['CPU use']) + cpu_val = cpu_parts[0].strip() + cpu_unit = cpu_parts[1].strip() + res = self.etcdser.getkey('/vnodes/%s/cpu_use'%(container_name)) + cpu_last = 0 + if res[0] == True: + last_use = dict(eval(res[1])) + cpu_last = float(last_use['val']) + cpu_use = {} + cpu_use['val'] = cpu_val + cpu_use['unit'] = cpu_unit + cpu_usedp = (float(cpu_val)-float(cpu_last))/(self.cpu_quota*self.interval*1.3) + if(cpu_usedp > 1): + cpu_usedp = 1 + cpu_use['usedp'] = cpu_usedp + self.etcdser.setkey('vnodes/%s/cpu_use'%(container_name), cpu_use) + mem_parts = re.split(' +',info['Memory use']) + mem_val = mem_parts[0].strip() + mem_unit = mem_parts[1].strip() + mem_use = {} + mem_use['val'] = mem_val + mem_use['unit'] = mem_unit + if(mem_unit == "MiB"): + mem_val = float(mem_val) * 1024 + mem_usedp = float(mem_val) / self.mem_quota + mem_use['usedp'] = mem_usedp + self.etcdser.setkey('/vnodes/%s/mem_use'%(container_name), mem_use) + #print(output) + #print(parts) + return True + + def run(self): + cnt = 0 + while not self.thread_stop: + containers = self.list_container() + countR = 0 + conlist = [] + for container in containers: + if not container == '': + conlist.append(container) + try: + if(self.collect_containerinfo(container)): + countR += 1 + except Exception as err: + #pass + logger.warning(err) + containers_num = len(containers)-1 + concnt = {} + concnt['total'] = containers_num + concnt['running'] = countR + self.etcdser.setkey('/hosts/%s/containers'%(self.host), concnt) + time.sleep(self.interval) + if cnt == 0: + self.etcdser.setkey('/hosts/%s/containerslist'%(self.host), conlist) + cnt = (cnt+1)%5 + if self.test: + break + return + + def stop(self): + self.thread_stop = True + + +class Collector(threading.Thread): + + def __init__(self,etcdaddr,cluster_name,host,test=False): + threading.Thread.__init__(self) + self.host = host + self.thread_stop = False + self.etcdser = etcdlib.Client(etcdaddr,"/%s/monitor/hosts/%s" % (cluster_name,host)) + self.interval = 1 + self.test=test + return + + def collect_meminfo(self): + meminfo = psutil.virtual_memory() + memdict = {} + memdict['total'] = meminfo.total/1024 + memdict['used'] = meminfo.used/1024 + memdict['free'] = meminfo.free/1024 + memdict['buffers'] = meminfo.buffers/1024 + memdict['cached'] = meminfo.cached/1024 + memdict['percent'] = meminfo.percent + self.etcdser.setkey('/meminfo',memdict) + #print(output) + #print(memparts) + return + + def collect_cpuinfo(self): + cpuinfo = psutil.cpu_times_percent(interval=1,percpu=False) + cpuset = {} + cpuset['user'] = cpuinfo.user + cpuset['system'] = cpuinfo.system + cpuset['idle'] = cpuinfo.idle + cpuset['iowait'] = cpuinfo.iowait + self.etcdser.setkey('/cpuinfo',cpuset) + output = subprocess.check_output(["cat /proc/cpuinfo"],shell=True) + output = output.decode('utf-8') + parts = output.split('\n') + info = [] + idx = -1 + for part in parts: + if not part == '': + key_val = re.split(':',part) + key = key_val[0].rstrip() + if key == 'processor': + info.append({}) + idx += 1 + val = key_val[1].lstrip() + if key=='processor' or key=='model name' or key=='core id' or key=='cpu MHz' or key=='cache size' or key=='physical id': + info[idx][key] = val + self.etcdser.setkey('/cpuconfig',info) + return + + def collect_diskinfo(self): + parts = psutil.disk_partitions() + setval = [] + devices = {} + for part in parts: + if not part.device in devices: + devices[part.device] = 1 + diskval = {} + diskval['device'] = part.device + diskval['mountpoint'] = part.mountpoint + usage = psutil.disk_usage(part.mountpoint) + diskval['total'] = usage.total + diskval['used'] = usage.used + diskval['free'] = usage.free + diskval['percent'] = usage.percent + setval.append(diskval) + self.etcdser.setkey('/diskinfo', setval) + #print(output) + #print(diskparts) + return + + def collect_osinfo(self): + uname = platform.uname() + osinfo = {} + osinfo['platform'] = platform.platform() + osinfo['system'] = uname.system + osinfo['node'] = uname.node + osinfo['release'] = uname.release + osinfo['version'] = uname.version + osinfo['machine'] = uname.machine + osinfo['processor'] = uname.processor + self.etcdser.setkey('/osinfo',osinfo) + return + + def run(self): + self.collect_osinfo() + while not self.thread_stop: + self.collect_meminfo() + self.collect_cpuinfo() + self.collect_diskinfo() + self.etcdser.setkey('/running','True',6) + time.sleep(self.interval) + if self.test: + break + # print(self.etcdser.getkey('/meminfo/total')) + return + + def stop(self): + self.thread_stop = True + +class Container_Fetcher: + def __init__(self,etcdaddr,cluster_name): + self.etcdser = etcdlib.Client(etcdaddr,"/%s/monitor/vnodes" % (cluster_name)) + return + + def get_cpu_use(self,container_name): + res = {} + [ret, ans] = self.etcdser.getkey('/%s/cpu_use'%(container_name)) + if ret == True : + res = dict(eval(ans)) + res['quota'] = self.etcdser.getkey('/cpu_quota')[1] + return res + else: + logger.warning(ans) + return res + + def get_mem_use(self,container_name): + res = {} + [ret, ans] = self.etcdser.getkey('/%s/mem_use'%(container_name)) + if ret == True : + res = dict(eval(ans)) + res['quota'] = self.etcdser.getkey('/mem_quota')[1] + return res + else: + logger.warning(ans) + return res + + def get_basic_info(self,container_name): + res = self.etcdser.getkey("/%s/basic_info"%(container_name)) + if res[0] == False: + return {} + res = dict(eval(res[1])) + return res + +class Fetcher: + + def __init__(self,etcdaddr,cluster_name,host): + self.etcdser = etcdlib.Client(etcdaddr,"/%s/monitor/hosts/%s" % (cluster_name,host)) + return + + #def get_clcnt(self): + # return DockletMonitor.clcnt + + #def get_nodecnt(self): + # return DockletMonitor.nodecnt + + #def get_meminfo(self): + # return self.get_meminfo_('172.31.0.1') + + def get_meminfo(self): + res = {} + [ret, ans] = self.etcdser.getkey('/meminfo') + if ret == True : + res = dict(eval(ans)) + return res + else: + logger.warning(ans) + return res + + def get_cpuinfo(self): + res = {} + [ret, ans] = self.etcdser.getkey('/cpuinfo') + if ret == True : + res = dict(eval(ans)) + return res + else: + logger.warning(ans) + return res + + def get_cpuconfig(self): + res = {} + [ret, ans] = self.etcdser.getkey('/cpuconfig') + if ret == True : + res = list(eval(ans)) + return res + else: + logger.warning(ans) + return res + + def get_diskinfo(self): + res = [] + [ret, ans] = self.etcdser.getkey('/diskinfo') + if ret == True : + res = list(eval(ans)) + return res + else: + logger.warning(ans) + return res + + def get_osinfo(self): + res = {} + [ret, ans] = self.etcdser.getkey('/osinfo') + if ret == True: + res = dict(eval(ans)) + return res + else: + logger.warning(ans) + return res + + def get_containers(self): + res = {} + [ret, ans] = self.etcdser.getkey('/containers') + if ret == True: + res = dict(eval(ans)) + return res + else: + logger.warning(ans) + return res + + def get_status(self): + isexist = self.etcdser.getkey('/running')[0] + if(isexist): + return 'RUNNING' + else: + return 'STOPPED' + + def get_containerslist(self): + res = list(eval(self.etcdser.getkey('/containerslist')[1])) + return res diff --git a/src/nettools.py b/src/nettools.py new file mode 100755 index 0000000..e3cef28 --- /dev/null +++ b/src/nettools.py @@ -0,0 +1,276 @@ +#!/usr/bin/python3 + +import subprocess + +class ipcontrol(object): + @staticmethod + def parse(cmdout): + links = {} + thislink = None + for line in cmdout.splitlines(): + # empty line + if len(line)==0: + continue + # Level 1 : first line of one link + if line[0] != ' ': + blocks = line.split() + thislink = blocks[1].strip(':') + links[thislink] = {} + links[thislink]['state'] = blocks[blocks.index('state')+1] if 'state' in blocks else 'UNKNOWN' + # Level 2 : line with 4 spaces + elif line[4] != ' ': + blocks = line.split() + if blocks[0] == 'inet': + if 'inet' not in links[thislink]: + links[thislink]['inet'] = [] + links[thislink]['inet'].append(blocks[1]) + # we just need inet (IPv4) + else: + pass + # Level 3 or more : no need for us + else: + pass + return links + + @staticmethod + def list_links(): + try: + ret = subprocess.run(['ip', 'link', 'show'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + links = ipcontrol.parse(ret.stdout.decode('utf-8')) + return [True, list(links.keys())] + except subprocess.CalledProcessError as suberror: + return [False, "list links failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def link_exist(linkname): + try: + subprocess.run(['ip', 'link', 'show', 'dev', str(linkname)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return True + except subprocess.CalledProcessError: + return False + + @staticmethod + def link_info(linkname): + try: + ret = subprocess.run(['ip', 'address', 'show', 'dev', str(linkname)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, ipcontrol.parse(ret.stdout.decode('utf-8'))[str(linkname)]] + except subprocess.CalledProcessError as suberror: + return [False, "get link info failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def link_state(linkname): + try: + ret = subprocess.run(['ip', 'link', 'show', 'dev', str(linkname)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, ipcontrol.parse(ret.stdout.decode('utf-8'))[str(linkname)]['state']] + except subprocess.CalledProcessError as suberror: + return [False, "get link state failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def link_ips(linkname): + [status, info] = ipcontrol.link_info(str(linkname)) + if status: + if 'inet' not in info: + return [True, []] + else: + return [True, info['inet']] + else: + return [False, info] + + @staticmethod + def up_link(linkname): + try: + subprocess.run(['ip', 'link', 'set', 'dev', str(linkname), 'up'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(linkname)] + except subprocess.CalledProcessError as suberror: + return [False, "set link up failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def down_link(linkname): + try: + subprocess.run(['ip', 'link', 'set', 'dev', str(linkname), 'down'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(linkname)] + except subprocess.CalledProcessError as suberror: + return [False, "set link down failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def add_addr(linkname, address): + try: + subprocess.run(['ip', 'address', 'add', address, 'dev', str(linkname)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(linkname)] + except subprocess.CalledProcessError as suberror: + return [False, "add address failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def del_addr(linkname, address): + try: + subprocess.run(['ip', 'address', 'del', address, 'dev', str(linkname)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(linkname)] + except subprocess.CalledProcessError as suberror: + return [False, "delete address failed : %s" % suberror.stdout.decode('utf-8')] + + +# ovs-vsctl list-br +# ovs-vsctl br-exists +# ovs-vsctl add-br +# ovs-vsctl del-br +# ovs-vsctl list-ports +# ovs-vsctl del-port +# ovs-vsctl add-port -- set interface type=gre options:remote_ip= +# ovs-vsctl add-port tag= -- set interface type=internal +# ovs-vsctl port-to-br +# ovs-vsctl set Port tag= +# ovs-vsctl clear Port tag + +class ovscontrol(object): + @staticmethod + def list_bridges(): + try: + ret = subprocess.run(['ovs-vsctl', 'list-br'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, ret.stdout.decode('utf-8').split()] + except subprocess.CalledProcessError as suberror: + return [False, "list bridges failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def bridge_exist(bridge): + try: + subprocess.run(['ovs-vsctl', 'br-exists', str(bridge)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return True + except subprocess.CalledProcessError: + return False + + @staticmethod + def port_tobridge(port): + try: + ret = subprocess.run(['ovs-vsctl', 'port-to-br', str(port)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, ret.stdout.decode('utf-8').strip()] + except subprocess.CalledProcessError as suberror: + return [False, suberror.stdout.decode('utf-8')] + + @staticmethod + def port_exists(port): + return ovscontrol.port_tobridge(port)[0] + + @staticmethod + def add_bridge(bridge): + try: + subprocess.run(['ovs-vsctl', 'add-br', str(bridge)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(bridge)] + except subprocess.CalledProcessError as suberror: + return [False, "add bridge failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def del_bridge(bridge): + try: + subprocess.run(['ovs-vsctl', 'del-br', str(bridge)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(bridge)] + except subprocess.CalledProcessError as suberror: + return [False, "del bridge failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def list_ports(bridge): + try: + ret = subprocess.run(['ovs-vsctl', 'list-ports', str(bridge)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, ret.stdout.decode('utf-8').split()] + except subprocess.CalledProcessError as suberror: + return [False, "list ports failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def del_port(bridge, port): + try: + subprocess.run(['ovs-vsctl', 'del-port', str(bridge), str(port)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(port)] + except subprocess.CalledProcessError as suberror: + return [False, "delete port failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def add_port_internal(bridge, port): + try: + subprocess.run(['ovs-vsctl', 'add-port', str(bridge), str(port), '--', 'set', 'interface', str(port), 'type=internal'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(port)] + except subprocess.CalledProcessError as suberror: + return [False, "add port failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def add_port_internal_withtag(bridge, port, tag): + try: + subprocess.run(['ovs-vsctl', 'add-port', str(bridge), str(port), 'tag='+str(tag), '--', 'set', 'interface', str(port), 'type=internal'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(port)] + except subprocess.CalledProcessError as suberror: + return [False, "add port failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def add_port_gre(bridge, port, remote): + try: + subprocess.run(['ovs-vsctl', 'add-port', str(bridge), str(port), '--', 'set', 'interface', str(port), 'type=gre', 'options:remote_ip='+str(remote)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(port)] + except subprocess.CalledProcessError as suberror: + return [False, "add port failed : %s" % suberror.stdout.decode('utf-8')] + + @staticmethod + def set_port_tag(port, tag): + try: + subprocess.run(['ovs-vsctl', 'set', 'Port', str(port), 'tag='+str(tag)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, check=True) + return [True, str(port)] + except subprocess.CalledProcessError as suberror: + return [False, "set port tag failed : %s" % suberror.stdout.decode('utf-8')] + + +class netcontrol(object): + @staticmethod + def bridge_exists(bridge): + return ovscontrol.bridge_exist(bridge) + + @staticmethod + def del_bridge(bridge): + return ovscontrol.del_bridge(bridge) + + @staticmethod + def new_bridge(bridge): + return ovscontrol.add_bridge(bridge) + + @staticmethod + def gre_exists(bridge, remote): + # port is unique, bridge is not necessary + return ovscontrol.port_exists('gre-'+str(remote)) + + @staticmethod + def setup_gre(bridge, remote): + return ovscontrol.add_port_gre(bridge, 'gre-'+str(remote), remote) + + @staticmethod + def gw_exists(bridge, gwport): + return ovscontrol.port_exists(gwport) + + @staticmethod + def setup_gw(bridge, gwport, addr, tag): + [status, result] = ovscontrol.add_port_internal_withtag(bridge, gwport, tag) + if not status: + return [status, result] + [status, result] = ipcontrol.add_addr(gwport, addr) + if not status: + return [status, result] + return ipcontrol.up_link(gwport) + + @staticmethod + def del_gw(bridge, gwport): + return ovscontrol.del_port(bridge, gwport) + + @staticmethod + def check_gw(bridge, gwport, addr, tag): + if not netcontrol.gw_exists(bridge, gwport): + return netcontrol.setup_gw(bridge, gwport, addr, tag) + [status, info] = ipcontrol.link_info(gwport) + if not status: + return [False, "get gateway info failed"] + if ('inet' not in info) or (addr not in info['inet']): + ipcontrol.add_addr(gwport, addr) + else: + info['inet'].remove(addr) + for otheraddr in info['inet']: + ipcontrol.del_addr(gwport, otheraddr) + ovscontrol.set_port_tag(gwport, tag) + if info['state'] == 'DOWN': + ipcontrol.up_link(gwport) + return [True, "check gateway port %s" % gwport] + + diff --git a/src/network.py b/src/network.py new file mode 100755 index 0000000..24d6708 --- /dev/null +++ b/src/network.py @@ -0,0 +1,475 @@ +#!/usr/bin/python3 + +import json, sys, netifaces +from nettools import netcontrol + +from log import logger + +# getip : get ip from network interface +# ifname : name of network interface +def getip(ifname): + if ifname not in netifaces.interfaces(): + return False # No such interface + else: + addrinfo = netifaces.ifaddresses(ifname) + if 2 in addrinfo: + return netifaces.ifaddresses(ifname)[2][0]['addr'] + else: + return False # network interface is down + +def ip_to_int(addr): + [a, b, c, d] = addr.split('.') + return (int(a)<<24) + (int(b)<<16) + (int(c)<<8) + int(d) + +def int_to_ip(num): + return str((num>>24)&255)+"."+str((num>>16)&255)+"."+str((num>>8)&255)+"."+str(num&255) + +# fix addr with cidr, for example, 172.16.0.10/24 --> 172.16.0.0/24 +def fix_ip(addr, cidr): + return int_to_ip( ip_to_int(addr) & ( (-1) << (32-int(cidr)) ) ) + #return int_to_ip(ip_to_int(addr) & ( ~( (1<<(32-int(cidr)))-1 ) ) ) + +# jump to next interval address with cidr +def next_interval(addr, cidr): + addr = fix_ip(addr, int(cidr)) + return int_to_ip(ip_to_int(addr)+(1<<(32-int(cidr)))) + +# jump to before interval address with cidr +def before_interval(addr, cidr): + addr = fix_ip(addr, int(cidr)) + addrint = ip_to_int(addr)-(1<<(32-int(cidr))) + # addrint maybe negative + if addrint < 0: + return "-1.-1.-1.-1" + else: + return int_to_ip(addrint) + + +# IntervalPool : manage network blocks with IP/CIDR +# Data Structure : +# ... ... +# cidr=16 : A1, A2, ... # A1 is an IP, means an interval [A1, A1+2^16-1], equals to A1/16 +# cidr=17 : B1, B2, ... +# ... ... +# API : +# allocate +# free +class IntervalPool(object): + # cidr : 1,2, ..., 32 + def __init__(self, addr_cidr=None, copy=None): + if addr_cidr: + self.pool = {} + [addr, cidr] = addr_cidr.split('/') + cidr = int(cidr) + # fix addr with cidr, for example, 172.16.0.10/24 --> 172.16.0.0/24 + addr = fix_ip(addr, cidr) + self.info = addr+"/"+str(cidr) + # init interval pool + # cidr : [ addr ] + # cidr+1 : [ ] + # ... + # 32 : [ ] + self.pool[str(cidr)]=[addr] + for i in range(cidr+1, 33): + self.pool[str(i)]=[] + elif copy: + self.info = copy['info'] + self.pool = copy['pool'] + else: + logger.error("IntervalPool init failed with no addr_cidr or center") + + def __str__(self): + return json.dumps({'info':self.info, 'pool':self.pool}) + + def printpool(self): + cidrs = list(self.pool.keys()) + # sort with key=int(cidr) + cidrs.sort(key=int) + for i in cidrs: + print (i + " : " + str(self.pool[i])) + + # allocate an interval with CIDR + def allocate(self, thiscidr): + # thiscidr -- cidr for this request + # upcidr -- up stream which has interval to allocate + thiscidr=int(thiscidr) + upcidr = thiscidr + # find first cidr who can allocate enough ips + while((str(upcidr) in self.pool) and len(self.pool[str(upcidr)])==0): + upcidr = upcidr-1 + if str(upcidr) not in self.pool: + return [False, 'Not Enough to Allocate'] + # get the block/interval to allocate ips + upinterval = self.pool[str(upcidr)][0] + self.pool[str(upcidr)].remove(upinterval) + # split the upinterval and put the rest intervals back to interval pool + for i in range(int(thiscidr), int(upcidr), -1): + self.pool[str(i)].append(next_interval(upinterval, i)) + #self.pool[str(i)].sort(key=ip_to_int) # cidr between thiscidr and upcidr are null, no need to sort + return [True, upinterval] + + # deallocate an interval with IP/CIDR + # ToDo : when free IP/CIDR, we donot check whether IP/CIDR is in pool + # maybe we check this later + def free(self, addr, cidr): + cidr = int(cidr) + # cidr not in pool means CIDR out of pool range + if str(cidr) not in self.pool: + return [False, 'CIDR not in pool'] + addr = fix_ip(addr, cidr) + # merge interval and move to up cidr + while(True): + # cidr-1 not in pool means current CIDR is the top CIDR + if str(cidr-1) not in self.pool: + break + # if addr can satisfy cidr-1, and next_interval also exist, + # merge addr with next_interval to up cidr (cidr-1) + # if addr not satisfy cidr-1, and before_interval exist, + # merge addr with before_interval to up cidr, and interval index is before_interval + if addr == fix_ip(addr, cidr-1): + if next_interval(addr, cidr) in self.pool[str(cidr)]: + self.pool[str(cidr)].remove(next_interval(addr,cidr)) + cidr=cidr-1 + else: + break + else: + if before_interval(addr, cidr) in self.pool[str(cidr)]: + addr = before_interval(addr, cidr) + self.pool[str(cidr)].remove(addr) + cidr = cidr - 1 + else: + break + self.pool[str(cidr)].append(addr) + # sort interval with key=ip_to_int(IP) + self.pool[str(cidr)].sort(key=ip_to_int) + return [True, "Free success"] + +# EnumPool : manage network ips with ip or ip list +# Data Structure : [ A, B, C, ... X ] , A is a IP address +class EnumPool(object): + def __init__(self, addr_cidr=None, copy=None): + if addr_cidr: + self.pool = [] + [addr, cidr] = addr_cidr.split('/') + cidr=int(cidr) + addr=fix_ip(addr, cidr) + self.info = addr+"/"+str(cidr) + # init enum pool + # first IP is network id, last IP is network broadcast address + # first and last IP can not be allocated + for i in range(1, pow(2, 32-cidr)-1): + self.pool.append(int_to_ip(ip_to_int(addr)+i)) + elif copy: + self.info = copy['info'] + self.pool = copy['pool'] + else: + logger.error("EnumPool init failed with no addr_cidr or copy") + + def __str__(self): + return json.dumps({'info':self.info, 'pool':self.pool}) + + def printpool(self): + print (str(self.pool)) + + def acquire(self, num=1): + if num > len(self.pool): + return [False, "No enough IPs: %s" % self.info] + result = [] + for i in range(0, num): + result.append(self.pool.pop()) + return [True, result] + + def acquire_cidr(self, num=1): + [status, result] = self.acquire(int(num)) + if not status: + return [status, result] + return [True, list(map(lambda x:x+"/"+self.info.split('/')[1], result))] + + # ToDo : when release : + # not check whether IP is in the range of pool + # not check whether IP is already in the pool + def release(self, ip_or_ips): + if type(ip_or_ips) == str: + ips = [ ip_or_ips ] + else: + ips = ip_or_ips + for ip in ips: + # maybe ip is in format IP/CIDR + ip = ip.split('/')[0] + self.pool.append(ip) + return [True, "release success"] + +# wrap EnumPool with vlanid and gateway +class UserPool(EnumPool): + def __init__(self, addr_cidr=None, vlanid=None, copy=None): + if addr_cidr and vlanid: + EnumPool.__init__(self, addr_cidr = addr_cidr) + self.vlanid=vlanid + self.pool.sort(key=ip_to_int) + self.gateway = self.pool[0] + self.pool.remove(self.gateway) + elif copy: + EnumPool.__init__(self, copy = copy) + self.vlanid = int(copy['vlanid']) + self.gateway = copy['gateway'] + else: + logger.error("UserPool init failed with no addr_cidr or copy") + + def get_gateway(self): + return self.gateway + + def get_gateway_cidr(self): + return self.gateway+"/"+self.info.split('/')[1] + + def printpool(self): + print("users ID:"+str(self.vlanid)+", net info:"+self.info+", gateway:"+self.gateway) + print (str(self.pool)) + +# NetworkMgr : mange docklet network ip address +# center : interval pool to allocate and free network block with IP/CIDR +# system : enumeration pool to acquire and release system ip address +# users : set of users' enumeration pools to manage users' ip address +class NetworkMgr(object): + def __init__(self, addr_cidr, etcdclient, mode): + self.etcd = etcdclient + if mode == 'new': + logger.info("init network manager with %s" % addr_cidr) + self.center = IntervalPool(addr_cidr=addr_cidr) + # allocate a pool for system IPs, use CIDR=27, has 32 IPs + syscidr = 27 + [status, sysaddr] = self.center.allocate(syscidr) + if status == False: + logger.error ("allocate system ips in __init__ failed") + sys.exit(1) + # maybe for system, the last IP address of CIDR is available + # But, EnumPool drop the last IP address in its pool -- it is not important + self.system = EnumPool(sysaddr+"/"+str(syscidr)) + self.users = {} + self.vlanids = {} + self.init_vlanids(4095, 60) + self.dump_center() + self.dump_system() + elif mode == 'recovery': + logger.info("init network manager from etcd") + self.center = None + self.system = None + self.users = {} + self.vlanids = {} + self.load_center() + self.load_system() + self.load_vlanids() + else: + logger.error("mode: %s not supported" % mode) + + def init_vlanids(self, total, block): + self.vlanids['block'] = block + self.etcd.setkey("network/vlanids/info", str(total)+"/"+str(block)) + for i in range(1, int((total-1)/block)): + self.etcd.setkey("network/vlanids/"+str(i), json.dumps(list(range(1+block*(i-1), block*i+1)))) + self.vlanids['currentpool'] = list(range(1+block*i, total+1)) + self.vlanids['currentindex'] = i+1 + self.etcd.setkey("network/vlanids/"+str(i+1), json.dumps(self.vlanids['currentpool'])) + self.etcd.setkey("network/vlanids/current", str(i+1)) + + def load_vlanids(self): + [status, info] = self.etcd.getkey("network/vlanids/info") + self.vlanids['block'] = int(info.split("/")[1]) + [status, current] = self.etcd.getkey("network/vlanids/current") + self.vlanids['currentindex'] = int(current) + if self.vlanids['currentindex'] == 0: + self.vlanids['currentpool'] = [] + else: + [status, pool]= self.etcd.getkey("network/vlanids/"+str(self.vlanids['currentindex'])) + self.vlanids['currentpool'] = json.loads(pool) + + def dump_vlanids(self): + if self.vlanids['currentpool'] == []: + if self.vlanids['currentindex'] != 0: + self.etcd.delkey("network/vlanids/"+str(self.vlanids['currentindex'])) + self.etcd.setkey("network/vlanids/current", str(self.vlanids['currentindex']-1)) + else: + pass + else: + self.etcd.setkey("network/vlanids/"+str(self.vlanids['currentindex']), json.dumps(self.vlanids['currentpool'])) + + def load_center(self): + [status, centerdata] = self.etcd.getkey("network/center") + center = json.loads(centerdata) + self.center = IntervalPool(copy = center) + + def dump_center(self): + self.etcd.setkey("network/center", json.dumps({'info':self.center.info, 'pool':self.center.pool})) + + def load_system(self): + [status, systemdata] = self.etcd.getkey("network/system") + system = json.loads(systemdata) + self.system = EnumPool(copy=system) + + def dump_system(self): + self.etcd.setkey("network/system", json.dumps({'info':self.system.info, 'pool':self.system.pool})) + + def load_user(self, username): + [status, userdata] = self.etcd.getkey("network/users/"+username) + usercopy = json.loads(userdata) + user = UserPool(copy = usercopy) + self.users[username] = user + + def dump_user(self, username): + self.etcd.setkey("network/users/"+username, json.dumps({'info':self.users[username].info, 'vlanid':self.users[username].vlanid, 'gateway':self.users[username].gateway, 'pool':self.users[username].pool})) + + def printpools(self): + print ("
") + self.center.printpool() + print ("") + self.system.printpool() + print ("") + print (" users in users is in etcd, not in memory") + print ("") + print (str(self.vlanids['currentindex'])+":"+str(self.vlanids['currentpool'])) + + def acquire_vlanid(self): + if self.vlanids['currentpool'] == []: + if self.vlanids['currentindex'] == 0: + return [False, "No VLAN IDs"] + else: + logger.error("vlanids current pool is empty with current index not zero") + return [False, "internal error"] + vlanid = self.vlanids['currentpool'].pop() + self.dump_vlanids() + if self.vlanids['currentpool'] == []: + self.load_vlanids() + return [True, vlanid] + + def release_vlanid(self, vlanid): + if len(self.vlanids['currentpool']) == self.vlanids['block']: + self.vlanids['currentpool'] = [vlanid] + self.vlanids['currentindex'] = self.vanids['currentindex']+1 + self.dump_vlanids() + else: + self.vlanids['currentpool'].append(vlanid) + self.dump_vlanids() + return [True, "Release VLAN ID success"] + + def add_user(self, username, cidr): + logger.info ("add user %s with cidr=%s" % (username, str(cidr))) + if self.has_user(username): + return [False, "user already exists in users set"] + [status, result] = self.center.allocate(cidr) + self.dump_center() + if status == False: + return [False, result] + [status, vlanid] = self.acquire_vlanid() + if status: + vlanid = int(vlanid) + else: + self.center.free(result, cidr) + self.dump_center() + return [False, vlanid] + self.users[username] = UserPool(addr_cidr = result+"/"+str(cidr), vlanid=vlanid) + logger.info("setup gateway for %s with %s and vlan=%s" % (username, self.users[username].get_gateway_cidr(), str(vlanid))) + netcontrol.setup_gw('docklet-br', username, self.users[username].get_gateway_cidr(), str(vlanid)) + self.dump_user(username) + del self.users[username] + return [True, 'add user success'] + + def del_user(self, username): + logger.info ("delete user %s with cidr=%s" % (username)) + if not self.has_user(username): + return [False, username+" not in users set"] + self.load_user(username) + [addr, cidr] = self.users[username].info.split('/') + self.center.free(addr, int(cidr)) + self.dump_center() + self.release_vlanid(self.users[username].vlanid) + netcontrol.del_gw('docklet-br', username) + self.etcd.deldir("network/users/"+username) + del self.users[username] + return [True, 'delete user success'] + + def check_usergw(self, username): + self.load_user(username) + netcontrol.check_gw('docklet-br', username, self.users[username].get_gateway_cidr(), str(self.users[username].vlanid)) + del self.users[username] + return [True, 'check gw ok'] + + def has_user(self, username): + [status, _value] = self.etcd.getkey("network/users/"+username) + return status + + def acquire_userips(self, username, num=1): + logger.info ("acquire user ips of %s" % (username)) + if not self.has_user(username): + return [False, 'username not exists in users set'] + self.load_user(username) + result = self.users[username].acquire(num) + self.dump_user(username) + del self.users[username] + return result + + def acquire_userips_cidr(self, username, num=1): + logger.info ("acquire user ips of %s" % (username)) + if not self.has_user(username): + return [False, 'username not exists in users set'] + self.load_user(username) + result = self.users[username].acquire_cidr(num) + self.dump_user(username) + del self.users[username] + return result + + # ip_or_ips : one IP address or a list of IPs + def release_userips(self, username, ip_or_ips): + logger.info ("release user ips of %s with ips: %s" % (username, str(ip_or_ips))) + if not self.has_user(username): + return [False, 'username not exists in users set'] + self.load_user(username) + result = self.users[username].release(ip_or_ips) + self.dump_user(username) + del self.users[username] + return result + + def get_usergw(self, username): + if not self.has_user(username): + return [False, 'username not exists in users set'] + self.load_user(username) + result = self.users[username].get_gateway() + self.dump_user(username) + del self.users[username] + return result + + def get_usergw_cidr(self, username): + if not self.has_user(username): + return [False, 'username not exists in users set'] + self.load_user(username) + result = self.users[username].get_gateway_cidr() + self.dump_user(username) + del self.users[username] + return result + + def get_uservlanid(self, username): + if not self.has_user(username): + return [False, 'username not exists in users set'] + self.load_user(username) + result = self.users[username].vlanid + self.dump_user(username) + del self.users[username] + return result + + def acquire_sysips(self, num=1): + logger.info ("acquire system ips") + result = self.system.acquire(num) + self.dump_system() + return result + + def acquire_sysips_cidr(self, num=1): + logger.info ("acquire system ips") + result = self.system.acquire_cidr(num) + self.dump_system() + return result + + def release_sysips(self, ip_or_ips): + logger.info ("acquire system ips: %s" % str(ip_or_ips)) + result = self.system.release(ip_or_ips) + self.dump_system() + return result + + diff --git a/src/nodemgr.py b/src/nodemgr.py new file mode 100755 index 0000000..ffd1a09 --- /dev/null +++ b/src/nodemgr.py @@ -0,0 +1,159 @@ +#!/usr/bin/python3 + +import threading, random, time, xmlrpc.client, sys +#import network +from nettools import netcontrol +from log import logger +import env + +########################################## +# NodeMgr +# Description : manage the physical nodes +# 1. list running nodes now +# 2. update node list when new node joins +# ETCD table : +# machines/allnodes -- all nodes in docklet, for recovery +# machines/runnodes -- run nodes of this start up +############################################## +class NodeMgr(object): + def __init__(self, networkmgr, etcdclient, addr, mode): + self.addr = addr + logger.info ("begin initialize on %s" % self.addr) + self.networkmgr = networkmgr + self.etcd = etcdclient + self.mode = mode + + # initialize the network + logger.info ("initialize network") + + # 'docklet-br' not need ip address. Because every user has gateway + #[status, result] = self.networkmgr.acquire_sysips_cidr() + #self.networkmgr.printpools() + #if not status: + # logger.info ("initialize network failed, no IP for system bridge") + # sys.exit(1) + #self.bridgeip = result[0] + #logger.info ("initialize bridge wih ip %s" % self.bridgeip) + #network.netsetup("init", self.bridgeip) + + if self.mode == 'new': + if netcontrol.bridge_exists('docklet-br'): + netcontrol.del_bridge('docklet-br') + netcontrol.new_bridge('docklet-br') + else: + if not netcontrol.bridge_exists('docklet-br'): + logger.error("docklet-br not found") + sys.exit(1) + + # get allnodes + self.allnodes = self._nodelist_etcd("allnodes") + self.runnodes = self._nodelist_etcd("runnodes") + logger.info ("all nodes are: %s" % self.allnodes) + logger.info ("run nodes are: %s" % self.runnodes) + if len(self.runnodes)>0: + logger.error ("init runnodes is not null, need to be clean") + sys.exit(1) + # init rpc list + self.rpcs = [] + # start new thread to watch whether a new node joins + logger.info ("start thread to watch new nodes ...") + self.thread_watchnewnode = threading.Thread(target=self._watchnewnode) + self.thread_watchnewnode.start() + # wait for all nodes joins + while(True): + allin = True + for node in self.allnodes: + if node not in self.runnodes: + allin = False + break + if allin: + logger.info("all nodes necessary joins ...") + break + time.sleep(0.05) + logger.info ("run nodes are: %s" % self.runnodes) + + + # get nodes list from etcd table + def _nodelist_etcd(self, which): + if which == "allnodes" or which == "runnodes": + [status, nodeinfo]=self.etcd.listdir("machines/"+which) + if status: + nodelist = [] + for node in nodeinfo: + nodelist.append(node["key"].rsplit('/', 1)[1]) + return nodelist + return [] + + # thread target : watch whether a new node joins + def _watchnewnode(self): + workerport = env.getenv('WORKER_PORT') + while(True): + time.sleep(0.1) + [status, runlist] = self.etcd.listdir("machines/runnodes") + if not status: + logger.warning ("get runnodes list failed from etcd ") + continue + for node in runlist: + nodeip = node['key'].rsplit('/',1)[1] + if node['value']=='waiting': + logger.info ("%s want to joins, call it to init first" % nodeip) + # 'docklet-br' of worker do not need IP Addr. Not need to allocate an IP to it + #if nodeip != self.addr: + # [status, result] = self.networkmgr.acquire_sysips_cidr() + # self.networkmgr.printpools() + # if not status: + # logger.error("no IP for worker bridge, please check network system pool") + # continue + # bridgeip = result[0] + # self.etcd.setkey("network/workbridge", bridgeip) + if nodeip in self.allnodes: + ######## HERE MAYBE NEED TO FIX ############### + # here we must use "machines/runnodes/nodeip" + # we cannot use node['key'], node['key'] is absolute + # path, etcd client will append the path to prefix, + # which is wrong + ############################################### + self.etcd.setkey("machines/runnodes/"+nodeip, "init-"+self.mode) + else: + self.etcd.setkey('machines/runnodes/'+nodeip, "init-new") + elif node['value']=='work': + logger.info ("new node %s joins" % nodeip) + # setup GRE tunnels for new nodes + if self.addr == nodeip: + logger.debug ("worker start on master node. not need to setup GRE") + else: + logger.debug ("setup GRE for %s" % nodeip) + if netcontrol.gre_exists('docklet-br', nodeip): + logger.debug("GRE for %s already exists, reuse it" % nodeip) + else: + netcontrol.setup_gre('docklet-br', nodeip) + self.runnodes.append(nodeip) + self.etcd.setkey("machines/runnodes/"+nodeip, "ok") + if nodeip not in self.allnodes: + self.allnodes.append(nodeip) + self.etcd.setkey("machines/allnodes/"+nodeip, "ok") + logger.debug ("all nodes are: %s" % self.allnodes) + logger.debug ("run nodes are: %s" % self.runnodes) + self.rpcs.append(xmlrpc.client.ServerProxy("http://%s:%s" + % (nodeip, workerport))) + logger.info ("add %s:%s in rpc client list" % + (nodeip, workerport)) + + # get all run nodes' IP addr + def get_nodeips(self): + return self.allnodes + + def get_rpcs(self): + return self.rpcs + + def get_onerpc(self): + return self.rpcs[random.randint(0, len(self.rpcs)-1)] + + def rpc_to_ip(self, rpcclient): + return self.runnodes[self.rpcs.index(rpcclient)] + + def ip_to_rpc(self, nodeip): + return self.rpcs[self.runnodes.index(nodeip)] + + def get_allnodes(self): + return self.allnodes diff --git a/src/proxytool.py b/src/proxytool.py new file mode 100755 index 0000000..97e460f --- /dev/null +++ b/src/proxytool.py @@ -0,0 +1,31 @@ +#!/usr/bin/python3 + +import requests, json + +proxy_control="http://localhost:8001/api/routes" + +def get_routes(): + try: + resp = requests.get(proxy_control) + except: + return [False, 'Connect Failed'] + return [True, resp.json()] + +def set_route(path, target): + path='/'+path.strip('/') + if path=='' or target=='': + return [False, 'input not valid'] + try: + resp = requests.post(proxy_control+path, data=json.dumps({'target':target})) + except: + return [False, 'Connect Failed'] + return [True, 'set ok'] + +def delete_route(path): + path='/'+path.strip('/') + try: + resp = requests.delete(proxy_control+path) + except: + return [False, 'Connect Failed'] + # if exist and delete, status_code=204, if not exist, status_code=404 + return [True, 'delete ok'] diff --git a/src/tools.py b/src/tools.py new file mode 100755 index 0000000..b3c62d2 --- /dev/null +++ b/src/tools.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import os, random + +#from log import logger + +def loadenv(configpath): + configfile = open(configpath) + #logger.info ("load environment from %s" % configpath) + for line in configfile: + line = line.strip() + if line == '': + continue + keyvalue = line.split("=") + if len(keyvalue) < 2: + continue + key = keyvalue[0].strip() + value = keyvalue[1].strip() + #logger.info ("load env and put env %s:%s" % (key, value)) + os.environ[key] = value + +def gen_token(): + return str(random.randint(10000, 99999))+"-"+str(random.randint(10000, 99999)) diff --git a/src/userManager.py b/src/userManager.py new file mode 100755 index 0000000..eaaaddd --- /dev/null +++ b/src/userManager.py @@ -0,0 +1,643 @@ +''' +userManager for Docklet +provide a class for managing users and usergroups in Docklet +Warning: in some early versions, "token" stand for the instance of class model.User + now it stands for a string that can be parsed to get that instance. + in all functions start with "@administration_required" or "@administration_or_self_required", "token" is the instance +Original author: Liu Peidong +''' + +from model import db, User, UserGroup +from functools import wraps +import os, subprocess +import hashlib +import pam +from base64 import b64encode +import env +import smtplib +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart +from email.header import Header +from datetime import datetime + +email_from_address = env.getenv('EMAIL_FROM_ADDRESS') +admin_email_address = env.getenv('ADMIN_EMAIL_ADDRESS') +PAM = pam.pam() + +if (env.getenv('EXTERNAL_LOGIN').lower() == 'true'): + from plugin import external_receive + +def administration_required(func): + @wraps(func) + def wrapper(*args, **kwargs): + if ( ('cur_user' in kwargs) == False): + return {"success":'false', "reason":"Cannot get cur_user"} + cur_user = kwargs['cur_user'] + if ((cur_user.user_group == 'admin') or (cur_user.user_group == 'root')): + return func(*args, **kwargs) + else: + return {"success": 'false', "reason": 'Unauthorized Action'} + + return wrapper + +def administration_or_self_required(func): + @wraps(func) + def wrapper(*args, **kwargs): + if ( (not ('cur_user' in kwargs)) or (not ('user' in kwargs))): + return {"success":'false', "reason":"Cannot get cur_user or user"} + cur_user = kwargs['cur_user'] + user = kwargs['user'] + if ((cur_user.user_group == 'admin') or (cur_user.user_group == 'root') or (cur_user.username == user.username)): + return func(*args, **kwargs) + else: + return {"success": 'false', "reason": 'Unauthorized Action'} + + return wrapper + +def token_required(func): + @wraps(func) + def wrapper(*args, **kwargs): + if ( ('cur_user' in kwargs) == False): + return {"success":'false', "reason":"Cannot get cur_user"} + return func(*args, **kwargs) + + return wrapper + +def send_activated_email(to_address, username): + if (email_from_address in ['\'\'', '\"\"', '']): + return + #text = 'Dear '+ username + ':\n' + ' Your account in docklet has been activated' + text = '

Dear '+ username + ':

' + text += '''

      Your account in %s has been activated

+

      Enjoy your personal workspace in the cloud !

+
+

      Note: DO NOT reply to this email!

+

+

Docklet Team, SEI, PKU

+ ''' % (env.getenv("PORTAL_URL"), env.getenv("PORTAL_URL")) + text += '

'+ str(datetime.utcnow()) + '

' + text += '' + subject = 'Docklet account activated' + msg = MIMEMultipart() + textmsg = MIMEText(text,'html','utf-8') + msg['Subject'] = Header(subject, 'utf-8') + msg['From'] = email_from_address + msg['To'] = to_address + msg.attach(textmsg) + s = smtplib.SMTP() + s.connect() + s.sendmail(email_from_address, to_address, msg.as_string()) + s.close() + +def send_remind_activating_email(username): + nulladdr = ['\'\'', '\"\"', ''] + if (email_from_address in nulladdr or admin_email_address in nulladdr): + return + #text = 'Dear '+ username + ':\n' + ' Your account in docklet has been activated' + text = '

Dear '+ 'admin' + ':

' + text += '''

      An activating request for %s in %s has been sent

+

      Please check it !

+

+

Docklet Team, SEI, PKU

+ ''' % (username, env.getenv("PORTAL_URL"), env.getenv("PORTAL_URL")) + text += '

'+ str(datetime.utcnow()) + '

' + text += '' + subject = 'An activating request in Docklet has been sent' + msg = MIMEMultipart() + textmsg = MIMEText(text,'html','utf-8') + msg['Subject'] = Header(subject, 'utf-8') + msg['From'] = email_from_address + msg['To'] = admin_email_address + msg.attach(textmsg) + s = smtplib.SMTP() + s.connect() + s.sendmail(email_from_address, admin_email_address, msg.as_string()) + s.close() + + +class userManager: + def __init__(self, username = 'root', password = None): + ''' + Try to create the database when there is none + initialize 'root' user and 'root' & 'primary' group + ''' + try: + User.query.all() + UserGroup.query.all() + except: + db.create_all() + root = UserGroup('root') + db.session.add(root) + db.session.commit() + if password == None: + #set a random password + password = os.urandom(16) + password = b64encode(password).decode('utf-8') + fsdir = env.getenv('FS_PREFIX') + f = open(fsdir + '/local/generated_password.txt', 'w') + f.write("User=%s\nPass=%s\n"%(username, password)) + f.close() + sys_admin = User(username, hashlib.sha512(password.encode('utf-8')).hexdigest()) + sys_admin.status = 'normal' + sys_admin.nickname = 'root' + sys_admin.description = 'Root_User' + sys_admin.user_group = 'root' + sys_admin.auth_method = 'local' + db.session.add(sys_admin) + path = env.getenv('DOCKLET_LIB') + subprocess.call([path+"/userinit.sh", username]) + db.session.commit() + admin = UserGroup('admin') + primary = UserGroup('primary') + db.session.add(admin) + db.session.add(primary) + db.session.commit() + + def auth_local(self, username, password): + password = hashlib.sha512(password.encode('utf-8')).hexdigest() + user = User.query.filter_by(username = username).first() + if (user == None): + return {"success":'false', "reason": "User did not exist"} + if (user.password != password): + return {"success":'false', "reason": "Wrong password"} + result = { + "success": 'true', + "data":{ + "username" : user.username, + "avatar" : user.avatar, + "nickname" : user.nickname, + "description" : user.description, + "status" : user.status, + "group" : user.user_group, + "token" : user.generate_auth_token(), + } + } + return result + + def auth_pam(self, username, password): + user = User.query.filter_by(username = username).first() + pamresult = PAM.authenticate(username, password) + if (pamresult == False or (user != None and user.auth_method != 'pam')): + return {"success":'false', "reason": "Wrong password or wrong login method"} + if (user == None): + newuser = self.newuser(); + newuser.username = username + newuser.password = "no_password" + newuser.nickname = username + newuser.status = "init" + newuser.user_group = "primary" + newuser.auth_method = "pam" + self.register(user = newuser) + user = User.query.filter_by(username = username).first() + result = { + "success": 'true', + "data":{ + "username" : user.username, + "avatar" : user.avatar, + "nickname" : user.nickname, + "description" : user.description, + "status" : user.status, + "group" : user.user_group, + "token" : user.generate_auth_token(), + } + } + return result + + def auth_external(self, form): + + if (env.getenv('EXTERNAL_LOGIN') != 'True'): + failed_result = {'success': 'false', 'reason' : 'external auth disabled'} + return failed_result + + result = external_receive.external_auth_receive_request(form) + + if (result['success'] != 'True'): + failed_result = {'success':'false', 'result': result} + return failed_result + + username = result['username'] + user = User.query.filter_by(username = username).first() + if (user != None and user.auth_method == result['auth_method']): + result = { + "success": 'true', + "data":{ + "username" : user.username, + "avatar" : user.avatar, + "nickname" : user.nickname, + "description" : user.description, + "status" : user.status, + "group" : user.user_group, + "token" : user.generate_auth_token(), + } + } + return result + if (user != None and user.auth_method != result['auth_method']): + result = {'success': 'false', 'reason': 'other kinds of account already exists'} + return result + #user == None , register an account for external user + newuser = self.newuser(); + newuser.username = result['username'] + newuser.password = result['password'] + newuser.avatar = result['avatar'] + newuser.nickname = result['nickname'] + newuser.description = result['description'] + newuser.e_mail = result['e_mail'] + newuser.truename = result['truename'] + newuser.student_number = result['student_number'] + newuser.status = result['status'] + newuser.user_group = result['user_group'] + newuser.auth_method = result['auth_method'] + newuser.department = result['department'] + newuser.tel = result['tel'] + self.register(user = newuser) + user = User.query.filter_by(username = username).first() + result = { + "success": 'true', + "data":{ + "username" : user.username, + "avatar" : user.avatar, + "nickname" : user.nickname, + "description" : user.description, + "status" : user.status, + "group" : user.user_group, + "token" : user.generate_auth_token(), + } + } + return result + + def auth(self, username, password): + ''' + authenticate a user by username & password + return a token as well as some user information + ''' + user = User.query.filter_by(username = username).first() + if (user == None or user.auth_method =='pam'): + return self.auth_pam(username, password) + elif (user.auth_method == 'local'): + return self.auth_local(username, password) + else: + result = {'success':'false', 'reason':'auth_method error'} + return result + + def auth_token(self, token): + ''' + authenticate a user by a token + when succeeded, return the database iterator + otherwise return None + ''' + user = User.verify_auth_token(token) + return user + + @administration_required + def query(*args, **kwargs): + ''' + Usage: query(username = 'xxx', cur_user = token_from_auth) + || query(ID = a_integer, cur_user = token_from_auth) + Provide information about one user that administrators need to use + ''' + if ( 'ID' in kwargs): + user = User.query.filter_by(id = kwargs['ID']).first() + if (user == None): + return {"success":False, "reason":"User does not exist"} + result = { + "success":'true', + "data":{ + "username" : user.username, + "password" : user.password, + "avatar" : user.avatar, + "nickname" : user.nickname, + "description" : user.description, + "status" : user.status, + "e_mail" : user.e_mail, + "student_number": user.student_number, + "department" : user.department, + "truename" : user.truename, + "tel" : user.tel, + "register_date" : "%s"%(user.register_date), + "group" : user.user_group, + "description" : user.description, + }, + "token": user + } + return result + + if ( 'username' not in kwargs): + return {"success":'false', "reason":"Cannot get 'username'"} + username = kwargs['username'] + user = User.query.filter_by(username = username).first() + if (user == None): + return {"success":'false', "reason":"User does not exist"} + result = { + "success": 'true', + "data":{ + "username" : user.username, + "password" : user.password, + "avatar" : user.avatar, + "nickname" : user.nickname, + "description" : user.description, + "status" : user.status, + "e_mail" : user.e_mail, + "student_number": user.student_number, + "department" : user.department, + "truename" : user.truename, + "tel" : user.tel, + "register_date" : "%s"%(user.register_date), + "group" : user.user_group, + }, + "token": user + } + return result + + @token_required + def selfQuery(*args, **kwargs): + ''' + Usage: selfQuery(cur_user = token_from_auth) + List informantion for oneself + ''' + user = kwargs['cur_user'] + group = UserGroup.query.filter_by(name = user.user_group).first() + result = { + "success": 'true', + "data":{ + "username" : user.username, + "password" : user.password, + "avatar" : user.avatar, + "nickname" : user.nickname, + "description" : user.description, + "status" : user.status, + "e_mail" : user.e_mail, + "student_number": user.student_number, + "department" : user.department, + "truename" : user.truename, + "tel" : user.tel, + "register_date" : "%s"%(user.register_date), + "group" : user.user_group, + "groupinfo": { + "cpu": group.cpu, + "memory": group.memory, + "imageQuantity": group.imageQuantity, + "lifeCycle":group.lifeCycle, + }, + }, + } + return result + + @token_required + def selfModify(*args, **kwargs): + ''' + Usage: selfModify(cur_user = token_from_auth, newValue = form) + Modify informantion for oneself + ''' + form = kwargs['newValue'] + name = form.getvalue('name', None) + value = form.getvalue('value', None) + if (name == None or value == None): + result = {'success': 'false'} + return result + user = User.query.filter_by(username = kwargs['cur_user'].username).first() + if (name == 'nickname'): + user.nickname = value + elif (name == 'description'): + user.description = value + elif (name == 'department'): + user.department = value + elif (name == 'e_mail'): + user.e_mail = value + elif (name == 'tel'): + user.tel = value + else: + result = {'success': 'false'} + return result + db.session.commit() + result = {'success': 'true'} + return result + + + @administration_required + def userList(*args, **kwargs): + ''' + Usage: list(cur_user = token_from_auth) + List all users for an administrator + ''' + alluser = User.query.all() + result = { + "success": 'true', + "data":[] + } + for user in alluser: + userinfo = [ + user.id, + user.username, + user.truename, + user.e_mail, + user.tel, + "%s"%(user.register_date), + user.status, + user.user_group, + '', + ] + result["data"].append(userinfo) + return result + + @administration_required + def groupList(*args, **kwargs): + ''' + Usage: list(cur_user = token_from_auth) + List all groups for an administrator + ''' + allgroup = UserGroup.query.all() + result = { + "success": 'true', + "data":[] + } + for group in allgroup: + groupinfo = [ + group.id, + group.name, + group.cpu, + group.memory, + group.imageQuantity, + group.lifeCycle, + '', + ] + result["data"].append(groupinfo) + return result + + @administration_required + def groupQuery(*args, **kwargs): + ''' + Usage: groupQuery(id = XXX, cur_user = token_from_auth) + List a group for an administrator + ''' + group = UserGroup.query.filter_by(id = kwargs['ID']).first() + if (group == None): + return {"success":False, "reason":"Group does not exist"} + result = { + "success":'true', + "data":{ + "name" : group.name , + "cpu" : group.cpu , + "memory" : group.memory, + "imageQuantity" : group.imageQuantity, + "lifeCycle" : group.lifeCycle, + } + } + return result + + @administration_required + def groupListName(*args, **kwargs): + ''' + Usage: grouplist(cur_user = token_from_auth) + List all group names for an administrator + ''' + groups = UserGroup.query.all() + result = { + "groups": [], + } + for group in groups: + result["groups"].append(group.name) + return result + + @administration_required + def groupModify(*args, **kwargs): + ''' + Usage: groupModify(newValue = dict_from_form, cur_user = token_from_auth) + ''' + group_modify = UserGroup.query.filter_by(name = kwargs['newValue'].getvalue('groupname', None)).first() + if (group_modify == None): + return {"success":'false', "reason":"UserGroup does not exist"} + form = kwargs['newValue'] + group_modify.cpu = form.getvalue('cpu', '') + group_modify.memory = form.getvalue('memory', '') + group_modify.imageQuantity = form.getvalue('image', '') + group_modify.lifeCycle = form.getvalue('lifecycle', '') + db.session.commit() + return {"success":'true'} + + @administration_required + def modify(*args, **kwargs): + ''' + modify a user's information in database + will send an e-mail when status is changed from 'applying' to 'normal' + Usage: modify(newValue = dict_from_form, cur_user = token_from_auth) + ''' + user_modify = User.query.filter_by(username = kwargs['newValue'].getvalue('username', None)).first() + if (user_modify == None): + + return {"success":'false', "reason":"User does not exist"} + + #try: + form = kwargs['newValue'] + user_modify.truename = form.getvalue('truename', '') + user_modify.e_mail = form.getvalue('e_mail', '') + user_modify.department = form.getvalue('department', '') + user_modify.student_number = form.getvalue('student_number', '') + user_modify.tel = form.getvalue('tel', '') + user_modify.user_group = form.getvalue('group', '') + user_modify.auth_method = form.getvalue('auth_method', '') + if (user_modify.status == 'applying' and form.getvalue('status', '') == 'normal'): + send_activated_email(user_modify.e_mail, user_modify.username) + user_modify.status = form.getvalue('status', '') + if (form.getvalue('Chpassword', '') == 'Yes'): + new_password = form.getvalue('password','no_password') + new_password = hashlib.sha512(new_password.encode('utf-8')).hexdigest() + user_modify.password = new_password + #self.chpassword(cur_user = user_modify, password = form.getvalue('password','no_password')) + + db.session.commit() + return {"success":'true'} + #except: + #return {"success":'false', "reason":"Something happened"} + + @token_required + def chpassword(*args, **kwargs): + ''' + Usage: chpassword(cur_user = token_from_auth, password = 'your_password') + ''' + cur_user = kwargs['cur_user'] + cur_user.password = hashlib.sha512(kwargs['password'].encode('utf-8')).hexdigest() + + def newuser(*args, **kwargs): + ''' + Usage : newuser() + The only method to create a new user + call this method first, modify the return value which is a database row instance,then call self.register() + ''' + user_new = User('newuser', 'asdf1234') + user_new.user_group = 'primary' + user_new.avatar = 'default.png' + return user_new + + def register(*args, **kwargs): + ''' + Usage: register(user = modified_from_newuser()) + ''' + + if (kwargs['user'].username == None or kwargs['user'].username == ''): + return {"success":'false', "reason": "Empty username"} + user_check = User.query.filter_by(username = kwargs['user'].username).first() + if (user_check != None and user_check.status != "init"): + #for the activating form + return {"success":'false', "reason": "Unauthorized action"} + if (user_check != None and (user_check.status == "init")): + db.session.delete(user_check) + db.session.commit() + newuser = kwargs['user'] + newuser.password = hashlib.sha512(newuser.password.encode('utf-8')).hexdigest() + db.session.add(newuser) + db.session.commit() + + # if newuser status is normal, init some data for this user + # now initialize for all kind of users + #if newuser.status == 'normal': + path = env.getenv('DOCKLET_LIB') + subprocess.call([path+"/userinit.sh", newuser.username]) + return {"success":'true'} + + @administration_required + def groupadd(*args, **kwargs): + name = kwargs.get('name', None) + if (name == None): + return {"success":'false', "reason": "Empty group name"} + group_new = UserGroup(name) + db.session.add(group_new) + db.session.commit() + return {"success":'true'} + + def queryForDisplay(*args, **kwargs): + ''' + Usage: queryForDisplay(user = token_from_auth) + Provide information about one user that administrators need to use + ''' + + if ( 'user' not in kwargs): + return {"success":'false', "reason":"Cannot get 'user'"} + user = kwargs['user'] + if (user == None): + return {"success":'false', "reason":"User does not exist"} + result = { + "success": 'true', + "data":{ + "username" : user.username, + "password" : user.password, + "avatar" : user.avatar, + "nickname" : user.nickname, + "description" : user.description, + "status" : user.status, + "e_mail" : user.e_mail, + "student_number": user.student_number, + "department" : user.department, + "truename" : user.truename, + "tel" : user.tel, + "register_date" : "%s"%(user.register_date), + "group" : user.user_group, + "auth_method": user.auth_method, + } + } + return result + +# def usermodify(rowID, columnID, newValue, cur_user): +# '''not used now''' +# user = um.query(ID = request.form["rowID"], cur_user = root).get('token', None) +# result = um.modify(user = user, columnID = request.form["columnID"], newValue = request.form["newValue"], cur_user = root) +# return json.dumps(result) diff --git a/src/userinit.sh b/src/userinit.sh new file mode 100755 index 0000000..3ae8e0f --- /dev/null +++ b/src/userinit.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# initialize for a new user +# initialize directory : clusters, data, ssh +# generate ssh keys for new user + +[ -z $FS_PREFIX ] && FS_PREFIX="/opt/docklet" + +USERNAME=$1 + +[ -z $USERNAME ] && echo "[userinit.sh] USERNAME is needed" && exit 1 + +echo "[Info] [userinit.sh] initialize for user $USERNAME" + +USER_DIR=$FS_PREFIX/global/users/$USERNAME +[ -d $USER_DIR ] && echo "[userinit.sh] user directory already exists, delete it" && rm -r $USER_DIR + +mkdir -p $USER_DIR/{clusters,hosts,data,ssh} + +SSH_DIR=$USER_DIR/ssh +# here generate id_rsa.pub has "user@hostname" at the end +# maybe it should be delete +ssh-keygen -t rsa -P '' -f $SSH_DIR/id_rsa &>/dev/null +cp $SSH_DIR/id_rsa.pub $SSH_DIR/authorized_keys diff --git a/src/vclustermgr.py b/src/vclustermgr.py new file mode 100755 index 0000000..c09441b --- /dev/null +++ b/src/vclustermgr.py @@ -0,0 +1,397 @@ +#!/usr/bin/python3 + +import os, random, json, sys, imagemgr +import datetime + +from log import logger +import env +import proxytool + +################################################## +# VclusterMgr +# Description : VclusterMgr start/stop/manage virtual clusters +# +################################################## + +class VclusterMgr(object): + def __init__(self, nodemgr, networkmgr, etcdclient, addr, mode): + self.mode = mode + self.nodemgr = nodemgr + self.imgmgr = imagemgr.ImageMgr() + self.networkmgr = networkmgr + self.addr = addr + self.etcd = etcdclient + self.defaultsize = env.getenv("CLUSTER_SIZE") + self.fspath = env.getenv("FS_PREFIX") + + logger.info ("vcluster start on %s" % (self.addr)) + if self.mode == 'new': + logger.info ("starting in new mode on %s" % (self.addr)) + # check if all clusters data are deleted in httprest.py + clean = True + usersdir = self.fspath+"/global/users/" + for user in os.listdir(usersdir): + if len(os.listdir(usersdir+user+"/clusters")) > 0 or len(os.listdir(usersdir+user+"/hosts")) > 0: + clean = False + if not clean: + logger.error ("clusters files not clean, start failed") + sys.exit(1) + elif self.mode == "recovery": + logger.info ("starting in recovery mode on %s" % (self.addr)) + self.recover_allclusters() + else: + logger.error ("not supported mode:%s" % self.mode) + sys.exit(1) + + def recover_allclusters(self): + logger.info("recovering all vclusters for all users...") + usersdir = self.fspath+"/global/users/" + for user in os.listdir(usersdir): + for cluster in self.list_clusters(user)[1]: + logger.info ("recovering cluster:%s for user:%s ..." % (cluster, user)) + self.recover_cluster(cluster, user) + logger.info("recovered all vclusters for all users") + + def create_cluster(self, clustername, username, image, user_info): + if self.is_cluster(clustername, username): + return [False, "cluster:%s already exists" % clustername] + clustersize = int(self.defaultsize); + logger.info ("starting cluster %s with %d containers for %s" % (clustername, int(clustersize), username)) + workers = self.nodemgr.get_rpcs() + image_json = json.dumps(image) + if (len(workers) == 0): + logger.warning ("no workers to start containers, start cluster failed") + return [False, "no workers are running"] + # check user IP pool status, should be moved to user init later + if not self.networkmgr.has_user(username): + self.networkmgr.add_user(username, cidr=29) + [status, result] = self.networkmgr.acquire_userips_cidr(username, clustersize) + gateway = self.networkmgr.get_usergw(username) + vlanid = self.networkmgr.get_uservlanid(username) + logger.info ("create cluster with gateway : %s" % gateway) + self.networkmgr.printpools() + if not status: + logger.info ("create cluster failed: %s" % result) + return [False, result] + ips = result + clusterid = self._acquire_id() + clusterpath = self.fspath+"/global/users/"+username+"/clusters/"+clustername + hostpath = self.fspath+"/global/users/"+username+"/hosts/"+str(clusterid)+".hosts" + hosts = "127.0.0.1\tlocalhost\n" + containers = [] + for i in range(0, clustersize): + onework = workers[random.randint(0, len(workers)-1)] + lxc_name = username + "-" + str(clusterid) + "-" + str(i) + hostname = "host-"+str(i) + logger.info ("create container with : name-%s, username-%s, clustername-%s, clusterid-%s, hostname-%s, ip-%s, gateway-%s, image-%s" % (lxc_name, username, clustername, str(clusterid), hostname, ips[i], gateway, image_json)) + [success,message] = onework.create_container(lxc_name, username, user_info , clustername, str(clusterid), hostname, ips[i], gateway, str(vlanid), image_json) + if success is False: + logger.info("container create failed, so vcluster create failed") + return [False, message] + logger.info("container create success") + hosts = hosts + ips[i].split("/")[0] + "\t" + hostname + "\t" + hostname + "."+clustername + "\n" + containers.append({ 'containername':lxc_name, 'hostname':hostname, 'ip':ips[i], 'host':self.nodemgr.rpc_to_ip(onework), 'image':image['name'], 'lastsave':datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") }) + hostfile = open(hostpath, 'w') + hostfile.write(hosts) + hostfile.close() + clusterfile = open(clusterpath, 'w') + proxy_url = env.getenv("PORTAL_URL") + "/_web/" + username + "/" + clustername + info = {'clusterid':clusterid, 'status':'stopped', 'size':clustersize, 'containers':containers, 'nextcid': clustersize, 'create_time':datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), 'start_time':"------" , 'proxy_url':proxy_url} + clusterfile.write(json.dumps(info)) + clusterfile.close() + return [True, info] + + def scale_out_cluster(self,clustername,username,image,user_info): + if not self.is_cluster(clustername,username): + return [False, "cluster:%s not found" % clustername] + workers = self.nodemgr.get_rpcs() + if (len(workers) == 0): + logger.warning("no workers to start containers, scale out failed") + return [False, "no workers are running"] + image_json = json.dumps(image) + [status, result] = self.networkmgr.acquire_userips_cidr(username) + gateway = self.networkmgr.get_usergw(username) + vlanid = self.networkmgr.get_uservlanid(username) + self.networkmgr.printpools() + if not status: + return [False, result] + ip = result[0] + [status, clusterinfo] = self.get_clusterinfo(clustername,username) + clusterid = clusterinfo['clusterid'] + clusterpath = self.fspath + "/global/users/" + username + "/clusters/" + clustername + hostpath = self.fspath + "/global/users/" + username + "/hosts/" + str(clusterid) + ".hosts" + cid = clusterinfo['nextcid'] + onework = workers[random.randint(0, len(workers)-1)] + lxc_name = username + "-" + str(clusterid) + "-" + str(cid) + hostname = "host-" + str(cid) + [success, message] = onework.create_container(lxc_name, username, user_info, clustername, clusterid, hostname, ip, gateway, str(vlanid), image_json) + if success is False: + logger.info("create container failed, so scale out failed") + return [False, message] + if clusterinfo['status'] == "running": + onework.start_container(lxc_name) + onework.start_services(lxc_name, ["ssh"]) # TODO: need fix + logger.info("scale out success") + hostfile = open(hostpath, 'a') + hostfile.write(ip.split("/")[0] + "\t" + hostname + "\t" + hostname + "." + clustername + "\n") + hostfile.close() + clusterinfo['nextcid'] = int(clusterinfo['nextcid']) + 1 + clusterinfo['size'] = int(clusterinfo['size']) + 1 + clusterinfo['containers'].append({'containername':lxc_name, 'hostname':hostname, 'ip':ip, 'host':self.nodemgr.rpc_to_ip(onework), 'image':image['name'], 'lastsave':datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") }) + clusterfile = open(clusterpath, 'w') + clusterfile.write(json.dumps(clusterinfo)) + clusterfile.close() + return [True, clusterinfo] + + def addproxy(self,username,clustername,ip,port): + [status, clusterinfo] = self.get_clusterinfo(clustername, username) + if 'proxy_ip' in clusterinfo: + return [False, "proxy already exists"] + target = "http://" + ip + ":" + port + clusterinfo['proxy_ip'] = ip + ":" + port + clusterfile = open(self.fspath + "/global/users/" + username + "/clusters/" + clustername, 'w') + clusterfile.write(json.dumps(clusterinfo)) + clusterfile.close() + proxytool.set_route("/_web/" + username + "/" + clustername, target) + return [True, clusterinfo] + + def deleteproxy(self, username, clustername): + [status, clusterinfo] = self.get_clusterinfo(clustername, username) + if 'proxy_ip' not in clusterinfo: + return [False, "proxy not exists"] + clusterinfo.pop('proxy_ip') + clusterfile = open(self.fspath + "/global/users/" + username + "/clusters/" + clustername, 'w') + clusterfile.write(json.dumps(clusterinfo)) + clusterfile.close() + proxytool.delete_route("/_web/" + username + "/" + clustername) + return [True, clusterinfo] + + def flush_cluster(self,username,clustername,containername): + begintime = datetime.datetime.now() + [status, info] = self.get_clusterinfo(clustername, username) + if not status: + return [False, "cluster not found"] + containers = info['containers'] + imagetmp = username + "_tmp_docklet" + for container in containers: + if container['containername'] == containername: + logger.info("container: %s found" % containername) + onework = self.nodemgr.ip_to_rpc(container['host']) + onework.create_image(username,imagetmp,containername) + fimage = container['image'] + logger.info("image: %s created" % imagetmp) + break + else: + logger.error("container: %s not found" % containername) + for container in containers: + if container['containername'] != containername: + logger.info("container: %s now flush" % container['containername']) + onework = self.nodemgr.ip_to_rpc(container['host']) + #t = threading.Thread(target=onework.flush_container,args=(username,imagetmp,container['containername'])) + #threads.append(t) + onework.flush_container(username,imagetmp,container['containername']) + container['lastsave'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + container['image'] = fimage + logger.info("thread for container: %s has been prepared" % container['containername']) + clusterpath = self.fspath + "/global/users/" + username + "/clusters/" + clustername + infofile = open(clusterpath,'w') + infofile.write(json.dumps(info)) + infofile.close() + self.imgmgr.removeImage(username,imagetmp) + endtime = datetime.datetime.now() + dtime = (endtime - begintime).seconds + logger.info("flush spend %s seconds" % dtime) + logger.info("flush success") + + + def create_image(self,username,clustername,containername,imagename,description,isforce=False): + [status, info] = self.get_clusterinfo(clustername,username) + if not status: + return [False, "cluster not found"] + containers = info['containers'] + for container in containers: + if container['containername'] == containername: + logger.info("container: %s found" % containername) + onework = self.nodemgr.ip_to_rpc(container['host']) + res = onework.create_image(username,imagename,containername,description,isforce) + container['lastsave'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + container['image'] = imagename + break + else: + res = [False, "container not found"] + logger.error("container: %s not found" % containername) + clusterpath = self.fspath + "/global/users/" + username + "/clusters/" + clustername + infofile = open(clusterpath, 'w') + infofile.write(json.dumps(info)) + infofile.close() + return res + + def delete_cluster(self, clustername, username): + [status, info] = self.get_clusterinfo(clustername, username) + if not status: + return [False, "cluster not found"] + if info['status']=='running': + return [False, "cluster is still running, you need to stop it and then delete"] + ips = [] + for container in info['containers']: + worker = self.nodemgr.ip_to_rpc(container['host']) + worker.delete_container(container['containername']) + ips.append(container['ip']) + logger.info("delete vcluster and release vcluster ips") + self.networkmgr.release_userips(username, ips) + self.networkmgr.printpools() + os.remove(self.fspath+"/global/users/"+username+"/clusters/"+clustername) + os.remove(self.fspath+"/global/users/"+username+"/hosts/"+str(info['clusterid'])+".hosts") + return [True, "cluster delete"] + + def scale_in_cluster(self, clustername, username, containername): + [status, info] = self.get_clusterinfo(clustername, username) + if not status: + return [False, "cluster not found"] + new_containers = [] + for container in info['containers']: + if container['containername'] == containername: + worker = self.nodemgr.ip_to_rpc(container['host']) + worker.delete_container(containername) + self.networkmgr.release_userips(username, container['ip']) + self.networkmgr.printpools() + else: + new_containers.append(container) + info['containers'] = new_containers + info['size'] -= 1 + cid = containername[containername.rindex("-")+1:] + clusterid = info['clusterid'] + clusterpath = self.fspath + "/global/users/" + username + "/clusters/" + clustername + hostpath = self.fspath + "/global/users/" + username + "/hosts/" + str(clusterid) + ".hosts" + clusterfile = open(clusterpath, 'w') + clusterfile.write(json.dumps(info)) + clusterfile.close() + hostfile = open(hostpath, 'r') + hostinfo = hostfile.readlines() + hostfile.close() + hostfile = open(hostpath, 'w') + new_hostinfo = [] + new_hostinfo.append(hostinfo[0]) + for host in hostinfo[1:]: + parts = host.split("\t") + if parts[1][parts[1].rindex("-")+1:] == cid: + pass + else: + new_hostinfo.append(host) + hostfile.writelines(new_hostinfo) + hostfile.close() + return [True, info] + + + def start_cluster(self, clustername, username): + [status, info] = self.get_clusterinfo(clustername, username) + if not status: + return [False, "cluster not found"] + if info['status'] == 'running': + return [False, "cluster is already running"] + # check gateway for user + # after reboot, user gateway goes down and lose its configuration + # so, check is necessary + self.networkmgr.check_usergw(username) + # set proxy + try: + target = 'http://'+info['containers'][0]['ip'].split('/')[0]+":10000" + proxytool.set_route('/go/'+username+'/'+clustername, target) + except: + return [False, "start cluster failed with setting proxy failed"] + for container in info['containers']: + worker = self.nodemgr.ip_to_rpc(container['host']) + worker.start_container(container['containername']) + worker.start_services(container['containername']) + info['status']='running' + info['start_time']=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + infofile = open(self.fspath+"/global/users/"+username+"/clusters/"+clustername, 'w') + infofile.write(json.dumps(info)) + infofile.close() + return [True, "start cluster"] + + def recover_cluster(self, clustername, username): + [status, info] = self.get_clusterinfo(clustername, username) + if not status: + return [False, "cluster not found"] + if info['status'] == 'stopped': + return [True, "cluster no need to start"] + # need to check and recover gateway of this user + self.networkmgr.check_usergw(username) + # recover proxy of cluster + try: + target = 'http://'+info['containers'][0]['ip'].split('/')[0]+":10000" + proxytool.set_route('/go/'+username+'/'+clustername, target) + except: + return [False, "start cluster failed with setting proxy failed"] + info['containers'][0] + # recover containers of this cluster + for container in info['containers']: + worker = self.nodemgr.ip_to_rpc(container['host']) + worker.recover_container(container['containername']) + return [True, "start cluster"] + + + # maybe here should use cluster id + def stop_cluster(self, clustername, username): + [status, info] = self.get_clusterinfo(clustername, username) + if not status: + return [False, "cluster not found"] + if info['status'] == 'stopped': + return [False, 'cluster is already stopped'] + for container in info['containers']: + worker = self.nodemgr.ip_to_rpc(container['host']) + worker.stop_container(container['containername']) + info['status']='stopped' + info['start_time']="------" + infofile = open(self.fspath+"/global/users/"+username+"/clusters/"+clustername, 'w') + infofile.write(json.dumps(info)) + infofile.close() + return [True, "start cluster"] + + def list_clusters(self, user): + if not os.path.exists(self.fspath+"/global/users/"+user+"/clusters"): + return [True, []] + clusters = os.listdir(self.fspath+"/global/users/"+user+"/clusters") + full_clusters = [] + for cluster in clusters: + single_cluster = {} + single_cluster['name'] = cluster + [status, info] = self.get_clusterinfo(cluster,user) + if info['status'] == 'running': + single_cluster['status'] = 'running' + else: + single_cluster['status'] = 'stopping' + full_clusters.append(single_cluster) + return [True, clusters] + + def is_cluster(self, clustername, username): + [status, clusters] = self.list_clusters(username) + if clustername in clusters: + return True + else: + return False + + # get id from name + def get_clusterid(self, clustername, username): + [status, info] = self.get_clusterinfo(clustername, username) + if not status: + return -1 + if 'clusterid' in info: + return int(info['clusterid']) + logger.error ("internal error: cluster:%s info file has no clusterid " % clustername) + return -1 + + def get_clusterinfo(self, clustername, username): + clusterpath = self.fspath + "/global/users/" + username + "/clusters/" + clustername + if not os.path.isfile(clusterpath): + return [False, "cluster not found"] + infofile = open(clusterpath, 'r') + info = json.loads(infofile.read()) + return [True, info] + + # acquire cluster id from etcd + def _acquire_id(self): + clusterid = self.etcd.getkey("vcluster/nextid")[1] + self.etcd.setkey("vcluster/nextid", str(int(clusterid)+1)) + return int(clusterid) diff --git a/src/worker.py b/src/worker.py new file mode 100755 index 0000000..f3e9608 --- /dev/null +++ b/src/worker.py @@ -0,0 +1,201 @@ +#!/usr/bin/python3 + +# first init env +import env, tools +config = env.getenv("CONFIG") +tools.loadenv(config) + +# must import logger after initlogging, ugly +from log import initlogging +initlogging("docklet-worker") +from log import logger + +import xmlrpc.server, sys, time +from socketserver import ThreadingMixIn +import etcdlib, network, container +from nettools import netcontrol +import monitor +from lvmtool import * + +################################################################## +# Worker +# Description : Worker starts at worker node to listen rpc request and complete the work +# Init() : +# get master ip +# initialize rpc server +# register rpc functions +# initialize network +# initialize lvm group +# Start() : +# register in etcd +# setup GRE tunnel +# start rpc service +################################################################## + +class ThreadXMLRPCServer(ThreadingMixIn,xmlrpc.server.SimpleXMLRPCServer): + pass + +class Worker(object): + def __init__(self, etcdclient, addr, port): + self.addr = addr + self.port = port + logger.info ("begin initialize on %s" % self.addr) + + self.fspath = env.getenv('FS_PREFIX') + self.poolsize = env.getenv('DISKPOOL_SIZE') + + self.etcd = etcdclient + self.master = self.etcd.getkey("service/master")[1] + self.mode=None + + # register self to master + self.etcd.setkey("machines/runnodes/"+self.addr, "waiting") + for f in range (0, 3): + [status, value] = self.etcd.getkey("machines/runnodes/"+self.addr) + if not value.startswith("init"): + # master wakesup every 0.1s to check register + logger.debug("worker % register to master failed %d \ + time, sleep %fs" % (self.addr, f+1, 0.1)) + time.sleep(0.1) + else: + break + + if value.startswith("init"): + # check token to check global directory + [status, token_1] = self.etcd.getkey("token") + tokenfile = open(self.fspath+"/global/token", 'r') + token_2 = tokenfile.readline().strip() + if token_1 != token_2: + logger.error("check token failed, global directory is not a shared filesystem") + sys.exit(1) + else: + logger.error ("worker register in machines/runnodes failed, maybe master not start") + sys.exit(1) + logger.info ("worker registered in master and checked the token") + + Containers = container.Container(self.addr, etcdclient) + if value == 'init-new': + logger.info ("init worker with mode:new") + self.mode='new' + # check global directory do not have containers on this worker + [both, onlylocal, onlyglobal] = Containers.diff_containers() + if len(both+onlyglobal) > 0: + logger.error ("mode:new will clean containers recorded in global, please check") + sys.exit(1) + [status, info] = Containers.delete_allcontainers() + if not status: + logger.error ("delete all containers failed") + sys.exit(1) + # create new lvm VG at last + new_group("docklet-group",self.poolsize,self.fspath+"/local/docklet-storage") + #subprocess.call([self.libpath+"/lvmtool.sh", "new", "group", "docklet-group", self.poolsize, self.fspath+"/local/docklet-storage"]) + elif value == 'init-recovery': + logger.info ("init worker with mode:recovery") + self.mode='recovery' + # recover lvm VG first + recover_group("docklet-group",self.fspath+"/local/docklet-storage") + #subprocess.call([self.libpath+"/lvmtool.sh", "recover", "group", "docklet-group", self.fspath+"/local/docklet-storage"]) + [status, meg] = Containers.check_allcontainers() + if status: + logger.info ("all containers check ok") + else: + logger.info ("not all containers check ok") + #sys.exit(1) + else: + logger.error ("worker init mode:%s not supported" % value) + sys.exit(1) + # initialize rpc + # xmlrpc.server.SimpleXMLRPCServer(addr) -- addr : (ip-addr, port) + # if ip-addr is "", it will listen ports of all IPs of this host + logger.info ("initialize rpcserver %s:%d" % (self.addr, int(self.port))) + # logRequests=False : not print rpc log + #self.rpcserver = xmlrpc.server.SimpleXMLRPCServer((self.addr, self.port), logRequests=False) + self.rpcserver = ThreadXMLRPCServer((self.addr, int(self.port)), allow_none=True) + self.rpcserver.register_introspection_functions() + self.rpcserver.register_instance(Containers) + # register functions or instances to server for rpc + #self.rpcserver.register_function(function_name) + + # initialize the network + # if worker and master run on the same node, reuse bridges + # don't need to create new bridges + if (self.addr == self.master): + logger.info ("master also on this node. reuse master's network") + else: + logger.info ("initialize network") + # 'docklet-br' of worker do not need IP Addr. + #[status, result] = self.etcd.getkey("network/workbridge") + #if not status: + # logger.error ("get bridge IP failed, please check whether master set bridge IP for worker") + #self.bridgeip = result + # create bridges for worker + #network.netsetup("init", self.bridgeip) + if self.mode == 'new': + if netcontrol.bridge_exists('docklet-br'): + netcontrol.del_bridge('docklet-br') + netcontrol.new_bridge('docklet-br') + else: + if not netcontrol.bridge_exists('docklet-br'): + logger.error("docklet-br not found") + sys.exit(1) + logger.info ("setup GRE tunnel to master %s" % self.master) + #network.netsetup("gre", self.master) + if not netcontrol.gre_exists('docklet-br', self.master): + netcontrol.setup_gre('docklet-br', self.master) + + # start service of worker + def start(self): + self.etcd.setkey("machines/runnodes/"+self.addr, "work") + # start serving for rpc + logger.info ("begins to work") + self.rpcserver.serve_forever() + + +if __name__ == '__main__': + + etcdaddr = env.getenv("ETCD") + logger.info ("using ETCD %s" % etcdaddr ) + + clustername = env.getenv("CLUSTER_NAME") + logger.info ("using CLUSTER_NAME %s" % clustername ) + + # get network interface + net_dev = env.getenv("NETWORK_DEVICE") + logger.info ("using NETWORK_DEVICE %s" % net_dev ) + + ipaddr = network.getip(net_dev) + if ipaddr is False: + logger.error("network device is not correct") + sys.exit(1) + else: + logger.info("using ipaddr %s" % ipaddr) + # init etcdlib client + try: + etcdclient = etcdlib.Client(etcdaddr, prefix = clustername) + except Exception: + logger.error ("connect etcd failed, maybe etcd address not correct...") + sys.exit(1) + else: + logger.info("etcd connected") + + # init collector to collect monitor infomation + collector = monitor.Collector(etcdaddr,clustername,ipaddr) + collector.start() + + cpu_quota = env.getenv('CONTAINER_CPU') + logger.info ("using CONTAINER_CPU %s" % cpu_quota ) + + mem_quota = env.getenv('CONTAINER_MEMORY') + logger.info ("using CONTAINER_MEMORY %s" % mem_quota ) + + worker_port = env.getenv('WORKER_PORT') + logger.info ("using WORKER_PORT %s" % worker_port ) + + con_collector = monitor.Container_Collector(etcdaddr, clustername, + ipaddr, cpu_quota, mem_quota) + con_collector.start() + logger.info("CPU and Memory usage monitor started") + + logger.info("Starting worker") + worker = Worker(etcdclient, addr=ipaddr, port=worker_port) + worker.start() diff --git a/tools/DOCKLET_NOTES.txt b/tools/DOCKLET_NOTES.txt new file mode 100644 index 0000000..e03db53 --- /dev/null +++ b/tools/DOCKLET_NOTES.txt @@ -0,0 +1,17 @@ +** MUST READ ** + +1. Please keep your important data in ~/nfs directory. It will not be +destroyed even if the workspace is deleted. + +2. If you delete your workspace, all data in your Home directory will +be lost, except those in ~/nfs directory. + +3. You can save your workspace as a private image if you have modified +the system and do not want to repeat it in your new workspace or new +container. + +4. Your containers are distributed by default. So it is ideal for simple +parallel jobs. + +5. If you find the Web Terminal not align correctly, choose a monospace +font may help. diff --git a/tools/etcd-multi-nodes.sh b/tools/etcd-multi-nodes.sh new file mode 100755 index 0000000..db94120 --- /dev/null +++ b/tools/etcd-multi-nodes.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# more details for https://coreos.com/etcd/docs/latest + +which etcd &>/dev/null || { echo "etcd not installed, please install etcd first" && exit 1; } + +if [ $# -eq 0 ] ; then + echo "Usage: `basename $0` ip1 ip2 ip3" + echo " ip1 ip2 ip3 are the ip address of node etcd_1 etcd_2 etcd_3" + exit 1 +fi + +index=1 +while [ $# -gt 0 ] ; do + h="etcd_$index" + if [ $index -eq 1 ] ; then + CLUSTER="$h=http://$1:2380" + else + CLUSTER="$CLUSTER,$h=http://$1:2380" + fi + index=$(($index+1)) + shift +done + +# -initial-advertise-peer-urls : tell others what peer urls of me +# -listen-peer-urls : what peer urls of me + +# -listen-client-urls : what client urls to listen +# -advertise-client-urls : tell others what client urls to listen of me + +# -initial-cluster-state : new means join a new cluster; existing means join an existing cluster +# : new not means clear + + +etcd --name etcd_1 \ + --initial-advertise-peer-urls http://$etcd_1:2380 \ + --listen-peer-urls http://$etcd_1:2380 \ + --listen-client-urls http://$etcd_1:2379 \ + --advertise-client-urls http://$etcd_1:2379 \ + --initial-cluster-token etcd-cluster \ + --initial-cluster $CLUSTER \ + --initial-cluster-state new diff --git a/tools/etcd-one-node.sh b/tools/etcd-one-node.sh new file mode 100755 index 0000000..7192dd6 --- /dev/null +++ b/tools/etcd-one-node.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# more details for https://coreos.com/etcd/docs/latest + +#which etcd &>/dev/null || { echo "etcd not installed, please install etcd first" && exit 1; } +which etcd >/dev/null || { echo "etcd not installed, please install etcd first" && exit 1; } + +etcd_1=localhost + +if [ $# -gt 0 ] ; then + etcd_1=$1 +fi + + +# -initial-advertise-peer-urls : tell others what peer urls of me +# -listen-peer-urls : what peer urls of me + +# -listen-client-urls : what client urls to listen +# -advertise-client-urls : tell others what client urls to listen of me + +# -initial-cluster-state : new means join a new cluster; existing means a new node join an existing cluster +# : new not means clear, old data is still alive + +depdir=${0%/*} +tempdir=/opt/docklet/local +[ ! -d $tempdir/log ] && mkdir -p $tempdir/log +[ ! -d $tempdir/run ] && mkdir -p $tempdir/run + +echo "starting etcd on $etcd_1" + +#stdbuf -o0 -e0 $tempdir/etcd --name etcd_1 \ +etcd --name etcd_1 \ + --data-dir $tempdir/etcd_data \ + --initial-advertise-peer-urls http://$etcd_1:2380 \ + --listen-peer-urls http://$etcd_1:2380 \ + --listen-client-urls http://$etcd_1:2379 \ + --advertise-client-urls http://$etcd_1:2379 \ + --initial-cluster-token etcd_cluster \ + --initial-cluster etcd_1=http://$etcd_1:2380 \ + --initial-cluster-state new > $tempdir/log/etcd.log 2>&1 & + +etcdpid=$! +echo "etcd start with pid: $etcdpid and log:$tempdir/log/etcd.log" +echo $etcdpid > $tempdir/run/etcd.pid + diff --git a/tools/npmrc b/tools/npmrc new file mode 100644 index 0000000..3bd4c82 --- /dev/null +++ b/tools/npmrc @@ -0,0 +1 @@ +registry = https://registry.npm.taobao.org diff --git a/tools/pip.conf b/tools/pip.conf new file mode 100644 index 0000000..4026cd4 --- /dev/null +++ b/tools/pip.conf @@ -0,0 +1,2 @@ +[global] +index-url=https://pypi.mirrors.ustc.edu.cn/simple/ diff --git a/tools/resolv.conf b/tools/resolv.conf new file mode 100644 index 0000000..c7271f2 --- /dev/null +++ b/tools/resolv.conf @@ -0,0 +1,2 @@ +nameserver 162.105.129.26 +nameserver 162.105.129.27 diff --git a/tools/sources.list b/tools/sources.list new file mode 100644 index 0000000..8b31aad --- /dev/null +++ b/tools/sources.list @@ -0,0 +1 @@ +deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse diff --git a/tools/start_jupyter.sh b/tools/start_jupyter.sh new file mode 100755 index 0000000..73a5976 --- /dev/null +++ b/tools/start_jupyter.sh @@ -0,0 +1,56 @@ +#!/bin/sh + +# +# this script should be placed in basefs/home/jupyter +# + +# This next line determines what user the script runs as. +DAEMON_USER=root + +# settings for docklet worker +DAEMON=/usr/local/bin/jupyterhub-singleuser +DAEMON_NAME=jupyter +# The process ID of the script when it runs is stored here: +PIDFILE=/home/jupyter/$DAEMON_NAME.pid + +RUN_DIR=/root + +#export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games + +#export HOME=/home + +#export SHELL=/bin/bash + +#export LOGNAME=root + +# JPY_API_TOKEN is needed by jupyterhub-singleuser +# it will send this token in request header to hub-api-url for authorization +# but we don't use this by now +export JPY_API_TOKEN=not-use + +# user for this notebook +USER=root +# port to start service +PORT=10000 +# cookie name to get from http request and send to hub_api_url for authorization +COOKIE_NAME=docklet-jupyter-cookie +# base url of this server. client will use this url for request +BASE_URL=/workspace/$USER +# prefix for login and logout +HUB_PREFIX=/jupyter +# URL for authorising cookie +HUB_API_URL=http://192.168.192.64:9000/jupyter +# IP for listening request +IP=0.0.0.0 + +[ -f /home/jupyter/jupyter.config ] && . /home/jupyter/jupyter.config + +[ -z $IP ] && IP=$(ip address show dev eth0 | grep -P -o '10\.[0-9]*\.[0-9]*\.[0-9]*(?=/)') + +DAEMON_OPTS="--no-browser --user=$USER --port=$PORT --cookie-name=$COOKIE_NAME --base-url=$BASE_URL --hub-prefix=$HUB_PREFIX --hub-api-url=$HUB_API_URL --ip=$IP --debug" + +. /lib/lsb/init-functions + +########### + +start-stop-daemon --start --oknodo --background -d $RUN_DIR --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS diff --git a/tools/update-basefs.sh b/tools/update-basefs.sh new file mode 100755 index 0000000..a19d6e0 --- /dev/null +++ b/tools/update-basefs.sh @@ -0,0 +1,106 @@ +#!/bin/sh + +## WARNING +## This sript is just for my own convenience . my image is +## based on Ubuntu xenial. I did not test it for other distros. +## Therefore this script may not work for your basefs image. +## + + +if [ "$1" != "-y" ] ; then + echo "This script will update your basefs. backup it first." + echo "then run: $0 -y" + exit 1 +fi + + +# READ docklet.conf + +FS_PREFIX=/opt/docklet + +BASEFS=$FS_PREFIX/local/basefs + +CONF=../conf/docklet.conf + +echo "Reading $CONF" + +if [ -f $CONF ] ; then + . $CONF + BASEFS=$FS_PREFIX/local/basefs + echo "$CONF exit, basefs=$BASEFS" +else + echo "$CONF not exist, default basefs=$BASEFS" +fi + +if [ ! -d $BASEFS ] ; then + echo "Checking $BASEFS: not exist, FAIL" + exit 1 +else + echo "Checking $BASEFS: exist. " +fi + +echo "[*] Copying start_jupyter.sh to $BASEFS/home/jupyter" + +mkdir -p $BASEFS/home/jupyter + +cp start_jupyter.sh $BASEFS/home/jupyter + +echo "" + +echo "[*] Changing $BASEFS/etc/network/interfaces using static" + +echo "Original network/interfaces is" + +cat $BASEFS/etc/network/interfaces | sed 's/^/OLD /' + +sed -i -- 's/dhcp/static/g' $BASEFS/etc/network/interfaces + +# setting resolv.conf, use your own resolv.conf for your image +echo "[*] Setting $BASEFS/etc/resolv.conf" +cp resolv.conf $BASEFS/etc/resolvconf/resolv.conf.d/base + +echo "[*] Masking console-getty.service" +chroot $BASEFS systemctl mask console-getty.service + +echo "[*] Masking system-journald.service" +chroot $BASEFS systemctl mask systemd-journald.service + +echo "[*] Masking system-logind.service" +chroot $BASEFS systemctl mask systemd-logind.service + +echo "[*] Masking dbus.service" +chroot $BASEFS systemctl mask dbus.service + +echo "[*] Disabling apache2 service(if installed)" +chroot $BASEFS update-rc.d apache2 disable + +echo "[*] Disabling ondemand service(if installed)" +chroot $BASEFS update-rc.d ondemand disable + +echo "[*] Disabling dbus service(if installed)" +chroot $BASEFS update-rc.d dbus disable + +echo "[*] Disabling mysql service(if installed)" +chroot $BASEFS update-rc.d mysql disable + +echo "[*] Disabling nginx service(if installed)" +chroot $BASEFS update-rc.d nginx disable + +echo "[*] Setting worker_processes of nginx to 1(if installed)" +[ -f $BASEFS/etc/nginx/nginx.conf ] && sed -i -- 's/worker_processes\ auto/worker_processes\ 1/g' $BASEFS/etc/nginx/nginx.conf + +echo "[*] Deleting default /etc/nginx/sites-enabled/default" +rm -f $BASEFS/etc/nginx/sites-enabled/default + +echo "[*] Copying vimrc.local to $BASEFS/etc/vim/" +cp vimrc.local $BASEFS/etc/vim + +echo "[*] Copying pip.conf to $BASEFS/root/.pip/" +mkdir -p $BASEFS/root/.pip/ +cp pip.conf $BASEFS/root/.pip + +echo "[*] Copying npmrc to $BASEFS/root/.npmrc" +cp npmrc $BASEFS/root/.npmrc + +echo "[*] Copying DOCKLET_NOTES.txt to $BASEFS/root/DOCKLET_NOTES.txt" +cp DOCKLET_NOTES.txt $BASEFS/root/ diff --git a/tools/vimrc.local b/tools/vimrc.local new file mode 100644 index 0000000..d9d78c4 --- /dev/null +++ b/tools/vimrc.local @@ -0,0 +1,15 @@ +syntax on + +set smarttab expandtab sw=4 ts=4 + +set sm ai + +set hlsearch + +set wildchar= wildmenu wildmode=full + +set enc=utf-8 +set fileencoding=utf-8 +set fileencodings=utf-8,cp936,euc-cn,ascii + +filetype indent on diff --git a/web/static/avatar/default.png b/web/static/avatar/default.png new file mode 100644 index 0000000000000000000000000000000000000000..caaef9218cc474d362767e4bac4b0479f54b650b GIT binary patch literal 102163 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

%t%o_@M$3TPm(B^HYKdMnyDjw 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 Xz_U^X>6X+d00000NkvXXu0mjfm;62h literal 0 HcmV?d00001 diff --git a/web/static/css/docklet.css b/web/static/css/docklet.css new file mode 100644 index 0000000..fa54f98 --- /dev/null +++ b/web/static/css/docklet.css @@ -0,0 +1,54 @@ +.btn-outline, .btn-outline-default, .badge-outline, .badge-outline-default, .label-outline, .label-outline-default { + border: 1px solid #AAB2BD; + background-color: transparent; + color: #434A54; +} +.btn-outline-success, .badge-outline-success, .label-outline-success { + border: 1px solid #1C84C6; + background-color: transparent; + color: #1C84C6; +} +.btn-outline-warning, .badge-outline-warning, .label-outline-warning { + border: 1px solid #F8AC59; + background-color: transparent; + color: #F8AC59; +} + +.btn-outline-default:hover, +.btn-outline:hover { + border: 1px solid #AAB2BD; + background-color: #AAB2BD; + color: #434A54; +} + +.btn-outline-success:hover { + border: 1px solid #1C84C6; + background-color: #1C84C6; + color: #FFFFFF; +} + +.btn-outline-warning:hover { + border: 1px solid #F8AC59; + background-color: #F8AC59; + color: #FFFFFF; +} +.docklet-red-block{ + background-color: #EB4235; + color: #FFFFFF; +} + +.docklet-green-block{ + background-color: #7DB600; + color: #FFFFFF; +} + +.docklet-yellow-block{ + background-color: #FABC05; + color: #FFFFFF; +} + +.docklet-blue-block{ + background-color: #4185F6; + color: #FFFFFF; +} + diff --git a/web/static/dist/css/AdminLTE.css b/web/static/dist/css/AdminLTE.css new file mode 100644 index 0000000..6fd65f4 --- /dev/null +++ b/web/static/dist/css/AdminLTE.css @@ -0,0 +1,4914 @@ +/*! + * AdminLTE v2.3.2 + * Author: Almsaeed Studio + * Website: Almsaeed Studio + * License: Open source - MIT + * Please visit http://opensource.org/licenses/MIT for more information +!*/ +/* + * Core: General Layout Style + * ------------------------- + */ +html, +body { + min-height: 100%; +} +.layout-boxed html, +.layout-boxed body { + height: 100%; +} +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 400; + overflow-x: hidden; + overflow-y: auto; +} +/* Layout */ +.wrapper { + min-height: 100%; + position: relative; + overflow: hidden; +} +.wrapper:before, +.wrapper:after { + content: " "; + display: table; +} +.wrapper:after { + clear: both; +} +.layout-boxed .wrapper { + max-width: 1250px; + margin: 0 auto; + min-height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + position: relative; +} +.layout-boxed { + background: url('../img/boxed-bg.jpg') repeat fixed; +} +/* + * Content Wrapper - contains the main content + * ```.right-side has been deprecated as of v2.0.0 in favor of .content-wrapper ``` + */ +.content-wrapper, +.right-side, +.main-footer { + -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out; + -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out; + -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out; + margin-left: 230px; + z-index: 820; +} +.layout-top-nav .content-wrapper, +.layout-top-nav .right-side, +.layout-top-nav .main-footer { + margin-left: 0; +} +@media (max-width: 767px) { + .content-wrapper, + .right-side, + .main-footer { + margin-left: 0; + } +} +@media (min-width: 768px) { + .sidebar-collapse .content-wrapper, + .sidebar-collapse .right-side, + .sidebar-collapse .main-footer { + margin-left: 0; + } +} +@media (max-width: 767px) { + .sidebar-open .content-wrapper, + .sidebar-open .right-side, + .sidebar-open .main-footer { + -webkit-transform: translate(230px, 0); + -ms-transform: translate(230px, 0); + -o-transform: translate(230px, 0); + transform: translate(230px, 0); + } +} +.content-wrapper, +.right-side { + min-height: 100%; + background-color: #ecf0f5; + z-index: 800; +} +.main-footer { + background: #fff; + padding: 15px; + color: #444; + border-top: 1px solid #d2d6de; +} +/* Fixed layout */ +.fixed .main-header, +.fixed .main-sidebar, +.fixed .left-side { + position: fixed; +} +.fixed .main-header { + top: 0; + right: 0; + left: 0; +} +.fixed .content-wrapper, +.fixed .right-side { + padding-top: 50px; +} +@media (max-width: 767px) { + .fixed .content-wrapper, + .fixed .right-side { + padding-top: 100px; + } +} +.fixed.layout-boxed .wrapper { + max-width: 100%; +} +body.hold-transition .content-wrapper, +body.hold-transition .right-side, +body.hold-transition .main-footer, +body.hold-transition .main-sidebar, +body.hold-transition .left-side, +body.hold-transition .main-header > .navbar, +body.hold-transition .main-header .logo { + /* Fix for IE */ + -webkit-transition: none; + -o-transition: none; + transition: none; +} +/* Content */ +.content { + min-height: 250px; + padding: 15px; + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +/* H1 - H6 font */ +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: 'Source Sans Pro', sans-serif; +} +/* General Links */ +a { + color: #3c8dbc; +} +a:hover, +a:active, +a:focus { + outline: none; + text-decoration: none; + color: #72afd2; +} +/* Page Header */ +.page-header { + margin: 10px 0 20px 0; + font-size: 22px; +} +.page-header > small { + color: #666; + display: block; + margin-top: 5px; +} +/* + * Component: Main Header + * ---------------------- + */ +.main-header { + position: relative; + max-height: 100px; + z-index: 1030; +} +.main-header > .navbar { + -webkit-transition: margin-left 0.3s ease-in-out; + -o-transition: margin-left 0.3s ease-in-out; + transition: margin-left 0.3s ease-in-out; + margin-bottom: 0; + margin-left: 230px; + border: none; + min-height: 50px; + border-radius: 0; +} +.layout-top-nav .main-header > .navbar { + margin-left: 0; +} +.main-header #navbar-search-input.form-control { + background: rgba(255, 255, 255, 0.2); + border-color: transparent; +} +.main-header #navbar-search-input.form-control:focus, +.main-header #navbar-search-input.form-control:active { + border-color: rgba(0, 0, 0, 0.1); + background: rgba(255, 255, 255, 0.9); +} +.main-header #navbar-search-input.form-control::-moz-placeholder { + color: #ccc; + opacity: 1; +} +.main-header #navbar-search-input.form-control:-ms-input-placeholder { + color: #ccc; +} +.main-header #navbar-search-input.form-control::-webkit-input-placeholder { + color: #ccc; +} +.main-header .navbar-custom-menu, +.main-header .navbar-right { + float: right; +} +@media (max-width: 991px) { + .main-header .navbar-custom-menu a, + .main-header .navbar-right a { + color: inherit; + background: transparent; + } +} +@media (max-width: 767px) { + .main-header .navbar-right { + float: none; + } + .navbar-collapse .main-header .navbar-right { + margin: 7.5px -15px; + } + .main-header .navbar-right > li { + color: inherit; + border: 0; + } +} +.main-header .sidebar-toggle { + float: left; + background-color: transparent; + background-image: none; + padding: 15px 15px; + font-family: fontAwesome; +} +.main-header .sidebar-toggle:before { + content: "\f0c9"; +} +.main-header .sidebar-toggle:hover { + color: #fff; +} +.main-header .sidebar-toggle:focus, +.main-header .sidebar-toggle:active { + background: transparent; +} +.main-header .sidebar-toggle .icon-bar { + display: none; +} +.main-header .navbar .nav > li.user > a > .fa, +.main-header .navbar .nav > li.user > a > .glyphicon, +.main-header .navbar .nav > li.user > a > .ion { + margin-right: 5px; +} +.main-header .navbar .nav > li > a > .label { + position: absolute; + top: 9px; + right: 7px; + text-align: center; + font-size: 9px; + padding: 2px 3px; + line-height: .9; +} +.main-header .logo { + -webkit-transition: width 0.3s ease-in-out; + -o-transition: width 0.3s ease-in-out; + transition: width 0.3s ease-in-out; + display: block; + float: left; + height: 50px; + font-size: 20px; + line-height: 50px; + text-align: center; + width: 230px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 15px; + font-weight: 300; + overflow: hidden; +} +.main-header .logo .logo-lg { + display: block; +} +.main-header .logo .logo-mini { + display: none; +} +.main-header .navbar-brand { + color: #fff; +} +.content-header { + position: relative; + padding: 15px 15px 0 15px; +} +.content-header > h1 { + margin: 0; + font-size: 24px; +} +.content-header > h1 > small { + font-size: 15px; + display: inline-block; + padding-left: 4px; + font-weight: 300; +} +.content-header > .breadcrumb { + float: right; + background: transparent; + margin-top: 0; + margin-bottom: 0; + font-size: 12px; + padding: 7px 5px; + position: absolute; + top: 15px; + right: 10px; + border-radius: 2px; +} +.content-header > .breadcrumb > li > a { + color: #444; + text-decoration: none; + display: inline-block; +} +.content-header > .breadcrumb > li > a > .fa, +.content-header > .breadcrumb > li > a > .glyphicon, +.content-header > .breadcrumb > li > a > .ion { + margin-right: 5px; +} +.content-header > .breadcrumb > li + li:before { + content: '>\00a0'; +} +@media (max-width: 991px) { + .content-header > .breadcrumb { + position: relative; + margin-top: 5px; + top: 0; + right: 0; + float: none; + background: #d2d6de; + padding-left: 10px; + } + .content-header > .breadcrumb li:before { + color: #97a0b3; + } +} +.navbar-toggle { + color: #fff; + border: 0; + margin: 0; + padding: 15px 15px; +} +@media (max-width: 991px) { + .navbar-custom-menu .navbar-nav > li { + float: left; + } + .navbar-custom-menu .navbar-nav { + margin: 0; + float: left; + } + .navbar-custom-menu .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px; + } +} +@media (max-width: 767px) { + .main-header { + position: relative; + } + .main-header .logo, + .main-header .navbar { + width: 100%; + float: none; + } + .main-header .navbar { + margin: 0; + } + .main-header .navbar-custom-menu { + float: right; + } +} +@media (max-width: 991px) { + .navbar-collapse.pull-left { + float: none !important; + } + .navbar-collapse.pull-left + .navbar-custom-menu { + display: block; + position: absolute; + top: 0; + right: 40px; + } +} +/* + * Component: Sidebar + * ------------------ + */ +.main-sidebar, +.left-side { + position: absolute; + top: 0; + left: 0; + padding-top: 50px; + min-height: 100%; + width: 230px; + z-index: 810; + -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out; + -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out; + -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, width 0.3s ease-in-out; +} +@media (max-width: 767px) { + .main-sidebar, + .left-side { + padding-top: 100px; + } +} +@media (max-width: 767px) { + .main-sidebar, + .left-side { + -webkit-transform: translate(-230px, 0); + -ms-transform: translate(-230px, 0); + -o-transform: translate(-230px, 0); + transform: translate(-230px, 0); + } +} +@media (min-width: 768px) { + .sidebar-collapse .main-sidebar, + .sidebar-collapse .left-side { + -webkit-transform: translate(-230px, 0); + -ms-transform: translate(-230px, 0); + -o-transform: translate(-230px, 0); + transform: translate(-230px, 0); + } +} +@media (max-width: 767px) { + .sidebar-open .main-sidebar, + .sidebar-open .left-side { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + } +} +.sidebar { + padding-bottom: 10px; +} +.sidebar-form input:focus { + border-color: transparent; +} +.user-panel { + position: relative; + width: 100%; + padding: 10px; + overflow: hidden; +} +.user-panel:before, +.user-panel:after { + content: " "; + display: table; +} +.user-panel:after { + clear: both; +} +.user-panel > .image > img { + width: 100%; + max-width: 45px; + height: auto; +} +.user-panel > .info { + padding: 5px 5px 5px 15px; + line-height: 1; + position: absolute; + left: 55px; +} +.user-panel > .info > p { + font-weight: 600; + margin-bottom: 9px; +} +.user-panel > .info > a { + text-decoration: none; + padding-right: 5px; + margin-top: 3px; + font-size: 11px; +} +.user-panel > .info > a > .fa, +.user-panel > .info > a > .ion, +.user-panel > .info > a > .glyphicon { + margin-right: 3px; +} +.sidebar-menu { + list-style: none; + margin: 0; + padding: 0; +} +.sidebar-menu > li { + position: relative; + margin: 0; + padding: 0; +} +.sidebar-menu > li > a { + padding: 12px 5px 12px 15px; + display: block; +} +.sidebar-menu > li > a > .fa, +.sidebar-menu > li > a > .glyphicon, +.sidebar-menu > li > a > .ion { + width: 20px; +} +.sidebar-menu > li .label, +.sidebar-menu > li .badge { + margin-top: 3px; + margin-right: 5px; +} +.sidebar-menu li.header { + padding: 10px 25px 10px 15px; + font-size: 12px; +} +.sidebar-menu li > a > .fa-angle-left { + width: auto; + height: auto; + padding: 0; + margin-right: 10px; + margin-top: 3px; +} +.sidebar-menu li.active > a > .fa-angle-left { + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); +} +.sidebar-menu li.active > .treeview-menu { + display: block; +} +.sidebar-menu .treeview-menu { + display: none; + list-style: none; + padding: 0; + margin: 0; + padding-left: 5px; +} +.sidebar-menu .treeview-menu .treeview-menu { + padding-left: 20px; +} +.sidebar-menu .treeview-menu > li { + margin: 0; +} +.sidebar-menu .treeview-menu > li > a { + padding: 5px 5px 5px 15px; + display: block; + font-size: 14px; +} +.sidebar-menu .treeview-menu > li > a > .fa, +.sidebar-menu .treeview-menu > li > a > .glyphicon, +.sidebar-menu .treeview-menu > li > a > .ion { + width: 20px; +} +.sidebar-menu .treeview-menu > li > a > .fa-angle-left, +.sidebar-menu .treeview-menu > li > a > .fa-angle-down { + width: auto; +} +/* + * Component: Sidebar Mini + */ +@media (min-width: 768px) { + .sidebar-mini.sidebar-collapse .content-wrapper, + .sidebar-mini.sidebar-collapse .right-side, + .sidebar-mini.sidebar-collapse .main-footer { + margin-left: 50px !important; + z-index: 840; + } + .sidebar-mini.sidebar-collapse .main-sidebar { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + width: 50px !important; + z-index: 850; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li { + position: relative; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a { + margin-right: 0; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span { + border-top-right-radius: 4px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span { + border-bottom-right-radius: 4px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + padding-top: 5px; + padding-bottom: 5px; + border-bottom-right-radius: 4px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right), + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { + display: block !important; + position: absolute; + width: 180px; + left: 50px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span { + top: 0; + margin-left: -3px; + padding: 12px 5px 12px 20px; + background-color: inherit; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { + top: 44px; + margin-left: 0; + } + .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info, + .sidebar-mini.sidebar-collapse .sidebar-form, + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span, + .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu, + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right, + .sidebar-mini.sidebar-collapse .sidebar-menu li.header { + display: none !important; + -webkit-transform: translateZ(0); + } + .sidebar-mini.sidebar-collapse .main-header .logo { + width: 50px; + } + .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini { + display: block; + margin-left: -15px; + margin-right: -15px; + font-size: 18px; + } + .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg { + display: none; + } + .sidebar-mini.sidebar-collapse .main-header .navbar { + margin-left: 50px; + } +} +.sidebar-menu, +.main-sidebar .user-panel, +.sidebar-menu > li.header { + white-space: nowrap; + overflow: hidden; +} +.sidebar-menu:hover { + overflow: visible; +} +.sidebar-form, +.sidebar-menu > li.header { + overflow: hidden; + text-overflow: clip; +} +.sidebar-menu li > a { + position: relative; +} +.sidebar-menu li > a > .pull-right { + position: absolute; + right: 10px; + top: 50%; + margin-top: -7px; +} +/* + * Component: Control sidebar. By default, this is the right sidebar. + */ +.control-sidebar-bg { + position: fixed; + z-index: 1000; + bottom: 0; +} +.control-sidebar-bg, +.control-sidebar { + top: 0; + right: -230px; + width: 230px; + -webkit-transition: right 0.3s ease-in-out; + -o-transition: right 0.3s ease-in-out; + transition: right 0.3s ease-in-out; +} +.control-sidebar { + position: absolute; + padding-top: 50px; + z-index: 1010; +} +@media (max-width: 768px) { + .control-sidebar { + padding-top: 100px; + } +} +.control-sidebar > .tab-content { + padding: 10px 15px; +} +.control-sidebar.control-sidebar-open, +.control-sidebar.control-sidebar-open + .control-sidebar-bg { + right: 0; +} +.control-sidebar-open .control-sidebar-bg, +.control-sidebar-open .control-sidebar { + right: 0; +} +@media (min-width: 768px) { + .control-sidebar-open .content-wrapper, + .control-sidebar-open .right-side, + .control-sidebar-open .main-footer { + margin-right: 230px; + } +} +.nav-tabs.control-sidebar-tabs > li:first-of-type > a, +.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover, +.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus { + border-left-width: 0; +} +.nav-tabs.control-sidebar-tabs > li > a { + border-radius: 0; +} +.nav-tabs.control-sidebar-tabs > li > a, +.nav-tabs.control-sidebar-tabs > li > a:hover { + border-top: none; + border-right: none; + border-left: 1px solid transparent; + border-bottom: 1px solid transparent; +} +.nav-tabs.control-sidebar-tabs > li > a .icon { + font-size: 16px; +} +.nav-tabs.control-sidebar-tabs > li.active > a, +.nav-tabs.control-sidebar-tabs > li.active > a:hover, +.nav-tabs.control-sidebar-tabs > li.active > a:focus, +.nav-tabs.control-sidebar-tabs > li.active > a:active { + border-top: none; + border-right: none; + border-bottom: none; +} +@media (max-width: 768px) { + .nav-tabs.control-sidebar-tabs { + display: table; + } + .nav-tabs.control-sidebar-tabs > li { + display: table-cell; + } +} +.control-sidebar-heading { + font-weight: 400; + font-size: 16px; + padding: 10px 0; + margin-bottom: 10px; +} +.control-sidebar-subheading { + display: block; + font-weight: 400; + font-size: 14px; +} +.control-sidebar-menu { + list-style: none; + padding: 0; + margin: 0 -15px; +} +.control-sidebar-menu > li > a { + display: block; + padding: 10px 15px; +} +.control-sidebar-menu > li > a:before, +.control-sidebar-menu > li > a:after { + content: " "; + display: table; +} +.control-sidebar-menu > li > a:after { + clear: both; +} +.control-sidebar-menu > li > a > .control-sidebar-subheading { + margin-top: 0; +} +.control-sidebar-menu .menu-icon { + float: left; + width: 35px; + height: 35px; + border-radius: 50%; + text-align: center; + line-height: 35px; +} +.control-sidebar-menu .menu-info { + margin-left: 45px; + margin-top: 3px; +} +.control-sidebar-menu .menu-info > .control-sidebar-subheading { + margin: 0; +} +.control-sidebar-menu .menu-info > p { + margin: 0; + font-size: 11px; +} +.control-sidebar-menu .progress { + margin: 0; +} +.control-sidebar-dark { + color: #b8c7ce; +} +.control-sidebar-dark, +.control-sidebar-dark + .control-sidebar-bg { + background: #222d32; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs { + border-bottom: #1c2529; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a { + background: #181f23; + color: #b8c7ce; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus { + border-left-color: #141a1d; + border-bottom-color: #141a1d; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active { + background: #1c2529; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover { + color: #fff; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active { + background: #222d32; + color: #fff; +} +.control-sidebar-dark .control-sidebar-heading, +.control-sidebar-dark .control-sidebar-subheading { + color: #fff; +} +.control-sidebar-dark .control-sidebar-menu > li > a:hover { + background: #1e282c; +} +.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p { + color: #b8c7ce; +} +.control-sidebar-light { + color: #5e5e5e; +} +.control-sidebar-light, +.control-sidebar-light + .control-sidebar-bg { + background: #f9fafc; + border-left: 1px solid #d2d6de; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs { + border-bottom: #d2d6de; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a { + background: #e8ecf4; + color: #444444; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus { + border-left-color: #d2d6de; + border-bottom-color: #d2d6de; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active { + background: #eff1f7; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active { + background: #f9fafc; + color: #111; +} +.control-sidebar-light .control-sidebar-heading, +.control-sidebar-light .control-sidebar-subheading { + color: #111; +} +.control-sidebar-light .control-sidebar-menu { + margin-left: -14px; +} +.control-sidebar-light .control-sidebar-menu > li > a:hover { + background: #f4f4f5; +} +.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p { + color: #5e5e5e; +} +/* + * Component: Dropdown menus + * ------------------------- + */ +/*Dropdowns in general*/ +.dropdown-menu { + box-shadow: none; + border-color: #eee; +} +.dropdown-menu > li > a { + color: #777; +} +.dropdown-menu > li > a > .glyphicon, +.dropdown-menu > li > a > .fa, +.dropdown-menu > li > a > .ion { + margin-right: 10px; +} +.dropdown-menu > li > a:hover { + background-color: #e1e3e9; + color: #333; +} +.dropdown-menu > .divider { + background-color: #eee; +} +.navbar-nav > .notifications-menu > .dropdown-menu, +.navbar-nav > .messages-menu > .dropdown-menu, +.navbar-nav > .tasks-menu > .dropdown-menu { + width: 280px; + padding: 0 0 0 0; + margin: 0; + top: 100%; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li, +.navbar-nav > .messages-menu > .dropdown-menu > li, +.navbar-nav > .tasks-menu > .dropdown-menu > li { + position: relative; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li.header, +.navbar-nav > .messages-menu > .dropdown-menu > li.header, +.navbar-nav > .tasks-menu > .dropdown-menu > li.header { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + background-color: #ffffff; + padding: 7px 10px; + border-bottom: 1px solid #f4f4f4; + color: #444444; + font-size: 14px; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a, +.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a, +.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + font-size: 12px; + background-color: #fff; + padding: 7px 10px; + border-bottom: 1px solid #eeeeee; + color: #444 !important; + text-align: center; +} +@media (max-width: 991px) { + .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a, + .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a, + .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a { + background: #fff !important; + color: #444 !important; + } +} +.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover, +.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover, +.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover { + text-decoration: none; + font-weight: normal; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu, +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu { + max-height: 200px; + margin: 0; + padding: 0; + list-style: none; + overflow-x: hidden; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a, +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a { + display: block; + white-space: nowrap; + /* Prevent text from breaking */ + border-bottom: 1px solid #f4f4f4; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover, +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover { + background: #f4f4f4; + text-decoration: none; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a { + color: #444444; + overflow: hidden; + text-overflow: ellipsis; + padding: 10px; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon, +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa, +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion { + width: 20px; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a { + margin: 0; + padding: 10px 10px; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img { + margin: auto 10px auto auto; + width: 40px; + height: 40px; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 { + padding: 0; + margin: 0 0 0 45px; + color: #444444; + font-size: 15px; + position: relative; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small { + color: #999999; + font-size: 10px; + position: absolute; + top: 0; + right: 0; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p { + margin: 0 0 0 45px; + font-size: 12px; + color: #888888; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { + content: " "; + display: table; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { + clear: both; +} +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a { + padding: 10px; +} +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 { + font-size: 14px; + padding: 0; + margin: 0 0 10px 0; + color: #666666; +} +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress { + padding: 0; + margin: 0; +} +.navbar-nav > .user-menu > .dropdown-menu { + border-top-right-radius: 0; + border-top-left-radius: 0; + padding: 1px 0 0 0; + border-top-width: 0; + width: 280px; +} +.navbar-nav > .user-menu > .dropdown-menu, +.navbar-nav > .user-menu > .dropdown-menu > .user-body { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header { + height: 175px; + padding: 10px; + text-align: center; +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img { + z-index: 5; + height: 90px; + width: 90px; + border: 3px solid; + border-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p { + z-index: 5; + color: #fff; + color: rgba(255, 255, 255, 0.8); + font-size: 17px; + margin-top: 10px; +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small { + display: block; + font-size: 12px; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body { + padding: 15px; + border-bottom: 1px solid #f4f4f4; + border-top: 1px solid #dddddd; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body:before, +.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { + content: " "; + display: table; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { + clear: both; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body a { + color: #444 !important; +} +@media (max-width: 991px) { + .navbar-nav > .user-menu > .dropdown-menu > .user-body a { + background: #fff !important; + color: #444 !important; + } +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer { + background-color: #f9f9f9; + padding: 10px; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before, +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { + content: " "; + display: table; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { + clear: both; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default { + color: #666666; +} +@media (max-width: 991px) { + .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover { + background-color: #f9f9f9; + } +} +.navbar-nav > .user-menu .user-image { + float: left; + width: 25px; + height: 25px; + border-radius: 50%; + margin-right: 10px; + margin-top: -2px; +} +@media (max-width: 767px) { + .navbar-nav > .user-menu .user-image { + float: none; + margin-right: 0; + margin-top: -8px; + line-height: 10px; + } +} +/* Add fade animation to dropdown menus by appending + the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/ +.open:not(.dropup) > .animated-dropdown-menu { + backface-visibility: visible !important; + -webkit-animation: flipInX 0.7s both; + -o-animation: flipInX 0.7s both; + animation: flipInX 0.7s both; +} +@keyframes flipInX { + 0% { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transition-timing-function: ease-in; + opacity: 0; + } + 40% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transition-timing-function: ease-in; + } + 60% { + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + 100% { + transform: perspective(400px); + } +} +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + 100% { + -webkit-transform: perspective(400px); + } +} +/* Fix dropdown menu in navbars */ +.navbar-custom-menu > .navbar-nav > li { + position: relative; +} +.navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + position: absolute; + right: 0; + left: auto; +} +@media (max-width: 991px) { + .navbar-custom-menu > .navbar-nav { + float: right; + } + .navbar-custom-menu > .navbar-nav > li { + position: static; + } + .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + position: absolute; + right: 5%; + left: auto; + border: 1px solid #ddd; + background: #fff; + } +} +/* + * Component: Form + * --------------- + */ +.form-control { + border-radius: 0; + box-shadow: none; + border-color: #d2d6de; +} +.form-control:focus { + border-color: #3c8dbc; + box-shadow: none; +} +.form-control::-moz-placeholder, +.form-control:-ms-input-placeholder, +.form-control::-webkit-input-placeholder { + color: #bbb; + opacity: 1; +} +.form-control:not(select) { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.form-group.has-success label { + color: #00a65a; +} +.form-group.has-success .form-control { + border-color: #00a65a; + box-shadow: none; +} +.form-group.has-success .help-block { + color: #00a65a; +} +.form-group.has-warning label { + color: #f39c12; +} +.form-group.has-warning .form-control { + border-color: #f39c12; + box-shadow: none; +} +.form-group.has-warning .help-block { + color: #f39c12; +} +.form-group.has-error label { + color: #dd4b39; +} +.form-group.has-error .form-control { + border-color: #dd4b39; + box-shadow: none; +} +.form-group.has-error .help-block { + color: #dd4b39; +} +/* Input group */ +.input-group .input-group-addon { + border-radius: 0; + border-color: #d2d6de; + background-color: #fff; +} +/* button groups */ +.btn-group-vertical .btn.btn-flat:first-of-type, +.btn-group-vertical .btn.btn-flat:last-of-type { + border-radius: 0; +} +.icheck > label { + padding-left: 0; +} +/* support Font Awesome icons in form-control */ +.form-control-feedback.fa { + line-height: 34px; +} +.input-lg + .form-control-feedback.fa, +.input-group-lg + .form-control-feedback.fa, +.form-group-lg .form-control + .form-control-feedback.fa { + line-height: 46px; +} +.input-sm + .form-control-feedback.fa, +.input-group-sm + .form-control-feedback.fa, +.form-group-sm .form-control + .form-control-feedback.fa { + line-height: 30px; +} +/* + * Component: Progress Bar + * ----------------------- + */ +.progress, +.progress > .progress-bar { + -webkit-box-shadow: none; + box-shadow: none; +} +.progress, +.progress > .progress-bar, +.progress .progress-bar, +.progress > .progress-bar .progress-bar { + border-radius: 1px; +} +/* size variation */ +.progress.sm, +.progress-sm { + height: 10px; +} +.progress.sm, +.progress-sm, +.progress.sm .progress-bar, +.progress-sm .progress-bar { + border-radius: 1px; +} +.progress.xs, +.progress-xs { + height: 7px; +} +.progress.xs, +.progress-xs, +.progress.xs .progress-bar, +.progress-xs .progress-bar { + border-radius: 1px; +} +.progress.xxs, +.progress-xxs { + height: 3px; +} +.progress.xxs, +.progress-xxs, +.progress.xxs .progress-bar, +.progress-xxs .progress-bar { + border-radius: 1px; +} +/* Vertical bars */ +.progress.vertical { + position: relative; + width: 30px; + height: 200px; + display: inline-block; + margin-right: 10px; +} +.progress.vertical > .progress-bar { + width: 100%; + position: absolute; + bottom: 0; +} +.progress.vertical.sm, +.progress.vertical.progress-sm { + width: 20px; +} +.progress.vertical.xs, +.progress.vertical.progress-xs { + width: 10px; +} +.progress.vertical.xxs, +.progress.vertical.progress-xxs { + width: 3px; +} +.progress-group .progress-text { + font-weight: 600; +} +.progress-group .progress-number { + float: right; +} +/* Remove margins from progress bars when put in a table */ +.table tr > td .progress { + margin: 0; +} +.progress-bar-light-blue, +.progress-bar-primary { + background-color: #3c8dbc; +} +.progress-striped .progress-bar-light-blue, +.progress-striped .progress-bar-primary { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-green, +.progress-bar-success { + background-color: #00a65a; +} +.progress-striped .progress-bar-green, +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-aqua, +.progress-bar-info { + background-color: #00c0ef; +} +.progress-striped .progress-bar-aqua, +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-yellow, +.progress-bar-warning { + background-color: #f39c12; +} +.progress-striped .progress-bar-yellow, +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-red, +.progress-bar-danger { + background-color: #dd4b39; +} +.progress-striped .progress-bar-red, +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +/* + * Component: Small Box + * -------------------- + */ +.small-box { + border-radius: 2px; + position: relative; + display: block; + margin-bottom: 20px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +.small-box > .inner { + padding: 10px; +} +.small-box > .small-box-footer { + position: relative; + text-align: center; + padding: 3px 0; + color: #fff; + color: rgba(255, 255, 255, 0.8); + display: block; + z-index: 10; + background: rgba(0, 0, 0, 0.1); + text-decoration: none; +} +.small-box > .small-box-footer:hover { + color: #fff; + background: rgba(0, 0, 0, 0.15); +} +.small-box h3 { + font-size: 38px; + font-weight: bold; + margin: 0 0 10px 0; + white-space: nowrap; + padding: 0; +} +.small-box p { + font-size: 15px; +} +.small-box p > small { + display: block; + color: #f9f9f9; + font-size: 13px; + margin-top: 5px; +} +.small-box h3, +.small-box p { + z-index: 5; +} +.small-box .icon { + -webkit-transition: all 0.3s linear; + -o-transition: all 0.3s linear; + transition: all 0.3s linear; + position: absolute; + top: -10px; + right: 10px; + z-index: 0; + font-size: 90px; + color: rgba(0, 0, 0, 0.15); +} +.small-box:hover { + text-decoration: none; + color: #f9f9f9; +} +.small-box:hover .icon { + font-size: 95px; +} +@media (max-width: 767px) { + .small-box { + text-align: center; + } + .small-box .icon { + display: none; + } + .small-box p { + font-size: 12px; + } +} +/* + * Component: Box + * -------------- + */ +.box { + position: relative; + border-radius: 3px; + background: #ffffff; + border-top: 3px solid #d2d6de; + margin-bottom: 20px; + width: 100%; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +.box.box-primary { + border-top-color: #3c8dbc; +} +.box.box-info { + border-top-color: #00c0ef; +} +.box.box-danger { + border-top-color: #dd4b39; +} +.box.box-warning { + border-top-color: #f39c12; +} +.box.box-success { + border-top-color: #00a65a; +} +.box.box-default { + border-top-color: #d2d6de; +} +.box.collapsed-box .box-body, +.box.collapsed-box .box-footer { + display: none; +} +.box .nav-stacked > li { + border-bottom: 1px solid #f4f4f4; + margin: 0; +} +.box .nav-stacked > li:last-of-type { + border-bottom: none; +} +.box.height-control .box-body { + max-height: 300px; + overflow: auto; +} +.box .border-right { + border-right: 1px solid #f4f4f4; +} +.box .border-left { + border-left: 1px solid #f4f4f4; +} +.box.box-solid { + border-top: 0; +} +.box.box-solid > .box-header .btn.btn-default { + background: transparent; +} +.box.box-solid > .box-header .btn:hover, +.box.box-solid > .box-header a:hover { + background: rgba(0, 0, 0, 0.1); +} +.box.box-solid.box-default { + border: 1px solid #d2d6de; +} +.box.box-solid.box-default > .box-header { + color: #444444; + background: #d2d6de; + background-color: #d2d6de; +} +.box.box-solid.box-default > .box-header a, +.box.box-solid.box-default > .box-header .btn { + color: #444444; +} +.box.box-solid.box-primary { + border: 1px solid #3c8dbc; +} +.box.box-solid.box-primary > .box-header { + color: #ffffff; + background: #3c8dbc; + background-color: #3c8dbc; +} +.box.box-solid.box-primary > .box-header a, +.box.box-solid.box-primary > .box-header .btn { + color: #ffffff; +} +.box.box-solid.box-info { + border: 1px solid #00c0ef; +} +.box.box-solid.box-info > .box-header { + color: #ffffff; + background: #00c0ef; + background-color: #00c0ef; +} +.box.box-solid.box-info > .box-header a, +.box.box-solid.box-info > .box-header .btn { + color: #ffffff; +} +.box.box-solid.box-danger { + border: 1px solid #dd4b39; +} +.box.box-solid.box-danger > .box-header { + color: #ffffff; + background: #dd4b39; + background-color: #dd4b39; +} +.box.box-solid.box-danger > .box-header a, +.box.box-solid.box-danger > .box-header .btn { + color: #ffffff; +} +.box.box-solid.box-warning { + border: 1px solid #f39c12; +} +.box.box-solid.box-warning > .box-header { + color: #ffffff; + background: #f39c12; + background-color: #f39c12; +} +.box.box-solid.box-warning > .box-header a, +.box.box-solid.box-warning > .box-header .btn { + color: #ffffff; +} +.box.box-solid.box-success { + border: 1px solid #00a65a; +} +.box.box-solid.box-success > .box-header { + color: #ffffff; + background: #00a65a; + background-color: #00a65a; +} +.box.box-solid.box-success > .box-header a, +.box.box-solid.box-success > .box-header .btn { + color: #ffffff; +} +.box.box-solid > .box-header > .box-tools .btn { + border: 0; + box-shadow: none; +} +.box.box-solid[class*='bg'] > .box-header { + color: #fff; +} +.box .box-group > .box { + margin-bottom: 5px; +} +.box .knob-label { + text-align: center; + color: #333; + font-weight: 100; + font-size: 12px; + margin-bottom: 0.3em; +} +.box > .overlay, +.overlay-wrapper > .overlay, +.box > .loading-img, +.overlay-wrapper > .loading-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.box .overlay, +.overlay-wrapper .overlay { + z-index: 50; + background: rgba(255, 255, 255, 0.7); + border-radius: 3px; +} +.box .overlay > .fa, +.overlay-wrapper .overlay > .fa { + position: absolute; + top: 50%; + left: 50%; + margin-left: -15px; + margin-top: -15px; + color: #000; + font-size: 30px; +} +.box .overlay.dark, +.overlay-wrapper .overlay.dark { + background: rgba(0, 0, 0, 0.5); +} +.box-header:before, +.box-body:before, +.box-footer:before, +.box-header:after, +.box-body:after, +.box-footer:after { + content: " "; + display: table; +} +.box-header:after, +.box-body:after, +.box-footer:after { + clear: both; +} +.box-header { + color: #444; + display: block; + padding: 10px; + position: relative; +} +.box-header.with-border { + border-bottom: 1px solid #f4f4f4; +} +.collapsed-box .box-header.with-border { + border-bottom: none; +} +.box-header > .fa, +.box-header > .glyphicon, +.box-header > .ion, +.box-header .box-title { + display: inline-block; + font-size: 18px; + margin: 0; + line-height: 1; +} +.box-header > .fa, +.box-header > .glyphicon, +.box-header > .ion { + margin-right: 5px; +} +.box-header > .box-tools { + position: absolute; + right: 10px; + top: 5px; +} +.box-header > .box-tools [data-toggle="tooltip"] { + position: relative; +} +.box-header > .box-tools.pull-right .dropdown-menu { + right: 0; + left: auto; +} +.btn-box-tool { + padding: 5px; + font-size: 12px; + background: transparent; + color: #97a0b3; +} +.open .btn-box-tool, +.btn-box-tool:hover { + color: #606c84; +} +.btn-box-tool.btn:active { + box-shadow: none; +} +.box-body { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + padding: 10px; +} +.no-header .box-body { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.box-body > .table { + margin-bottom: 0; +} +.box-body .fc { + margin-top: 5px; +} +.box-body .full-width-chart { + margin: -19px; +} +.box-body.no-padding .full-width-chart { + margin: -9px; +} +.box-body .box-pane { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 3px; +} +.box-body .box-pane-right { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 0; +} +.box-footer { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-top: 1px solid #f4f4f4; + padding: 10px; + background-color: #ffffff; +} +.chart-legend { + margin: 10px 0; +} +@media (max-width: 991px) { + .chart-legend > li { + float: left; + margin-right: 10px; + } +} +.box-comments { + background: #f7f7f7; +} +.box-comments .box-comment { + padding: 8px 0; + border-bottom: 1px solid #eee; +} +.box-comments .box-comment:before, +.box-comments .box-comment:after { + content: " "; + display: table; +} +.box-comments .box-comment:after { + clear: both; +} +.box-comments .box-comment:last-of-type { + border-bottom: 0; +} +.box-comments .box-comment:first-of-type { + padding-top: 0; +} +.box-comments .box-comment img { + float: left; +} +.box-comments .comment-text { + margin-left: 40px; + color: #555; +} +.box-comments .username { + color: #444; + display: block; + font-weight: 600; +} +.box-comments .text-muted { + font-weight: 400; + font-size: 12px; +} +/* Widget: TODO LIST */ +.todo-list { + margin: 0; + padding: 0; + list-style: none; + overflow: auto; +} +.todo-list > li { + border-radius: 2px; + padding: 10px; + background: #f4f4f4; + margin-bottom: 2px; + border-left: 2px solid #e6e7e8; + color: #444; +} +.todo-list > li:last-of-type { + margin-bottom: 0; +} +.todo-list > li > input[type='checkbox'] { + margin: 0 10px 0 5px; +} +.todo-list > li .text { + display: inline-block; + margin-left: 5px; + font-weight: 600; +} +.todo-list > li .label { + margin-left: 10px; + font-size: 9px; +} +.todo-list > li .tools { + display: none; + float: right; + color: #dd4b39; +} +.todo-list > li .tools > .fa, +.todo-list > li .tools > .glyphicon, +.todo-list > li .tools > .ion { + margin-right: 5px; + cursor: pointer; +} +.todo-list > li:hover .tools { + display: inline-block; +} +.todo-list > li.done { + color: #999; +} +.todo-list > li.done .text { + text-decoration: line-through; + font-weight: 500; +} +.todo-list > li.done .label { + background: #d2d6de !important; +} +.todo-list .danger { + border-left-color: #dd4b39; +} +.todo-list .warning { + border-left-color: #f39c12; +} +.todo-list .info { + border-left-color: #00c0ef; +} +.todo-list .success { + border-left-color: #00a65a; +} +.todo-list .primary { + border-left-color: #3c8dbc; +} +.todo-list .handle { + display: inline-block; + cursor: move; + margin: 0 5px; +} +/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/ +.chat { + padding: 5px 20px 5px 10px; +} +.chat .item { + margin-bottom: 10px; +} +.chat .item:before, +.chat .item:after { + content: " "; + display: table; +} +.chat .item:after { + clear: both; +} +.chat .item > img { + width: 40px; + height: 40px; + border: 2px solid transparent; + border-radius: 50%; +} +.chat .item > .online { + border: 2px solid #00a65a; +} +.chat .item > .offline { + border: 2px solid #dd4b39; +} +.chat .item > .message { + margin-left: 55px; + margin-top: -40px; +} +.chat .item > .message > .name { + display: block; + font-weight: 600; +} +.chat .item > .attachment { + border-radius: 3px; + background: #f4f4f4; + margin-left: 65px; + margin-right: 15px; + padding: 10px; +} +.chat .item > .attachment > h4 { + margin: 0 0 5px 0; + font-weight: 600; + font-size: 14px; +} +.chat .item > .attachment > p, +.chat .item > .attachment > .filename { + font-weight: 600; + font-size: 13px; + font-style: italic; + margin: 0; +} +.chat .item > .attachment:before, +.chat .item > .attachment:after { + content: " "; + display: table; +} +.chat .item > .attachment:after { + clear: both; +} +.box-input { + max-width: 200px; +} +.modal .panel-body { + color: #444; +} +/* + * Component: Info Box + * ------------------- + */ +.info-box { + display: block; + min-height: 90px; + background: #fff; + width: 100%; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 2px; + margin-bottom: 15px; +} +.info-box small { + font-size: 14px; +} +.info-box .progress { + background: rgba(0, 0, 0, 0.2); + margin: 5px -10px 5px -10px; + height: 2px; +} +.info-box .progress, +.info-box .progress .progress-bar { + border-radius: 0; +} +.info-box .progress .progress-bar { + background: #fff; +} +.info-box-icon { + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; + display: block; + float: left; + height: 90px; + width: 90px; + text-align: center; + font-size: 45px; + line-height: 90px; + background: rgba(0, 0, 0, 0.2); +} +.info-box-icon > img { + max-width: 100%; +} +.info-box-content { + padding: 5px 10px; + margin-left: 90px; +} +.info-box-number { + display: block; + font-weight: bold; + font-size: 18px; +} +.progress-description, +.info-box-text { + display: block; + font-size: 14px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.info-box-text { + text-transform: uppercase; +} +.info-box-more { + display: block; +} +.progress-description { + margin: 0; +} +/* + * Component: Timeline + * ------------------- + */ +.timeline { + position: relative; + margin: 0 0 30px 0; + padding: 0; + list-style: none; +} +.timeline:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + width: 4px; + background: #ddd; + left: 31px; + margin: 0; + border-radius: 2px; +} +.timeline > li { + position: relative; + margin-right: 10px; + margin-bottom: 15px; +} +.timeline > li:before, +.timeline > li:after { + content: " "; + display: table; +} +.timeline > li:after { + clear: both; +} +.timeline > li > .timeline-item { + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 3px; + margin-top: 0; + background: #fff; + color: #444; + margin-left: 60px; + margin-right: 15px; + padding: 0; + position: relative; +} +.timeline > li > .timeline-item > .time { + color: #999; + float: right; + padding: 10px; + font-size: 12px; +} +.timeline > li > .timeline-item > .timeline-header { + margin: 0; + color: #555; + border-bottom: 1px solid #f4f4f4; + padding: 10px; + font-size: 16px; + line-height: 1.1; +} +.timeline > li > .timeline-item > .timeline-header > a { + font-weight: 600; +} +.timeline > li > .timeline-item > .timeline-body, +.timeline > li > .timeline-item > .timeline-footer { + padding: 10px; +} +.timeline > li > .fa, +.timeline > li > .glyphicon, +.timeline > li > .ion { + width: 30px; + height: 30px; + font-size: 15px; + line-height: 30px; + position: absolute; + color: #666; + background: #d2d6de; + border-radius: 50%; + text-align: center; + left: 18px; + top: 0; +} +.timeline > .time-label > span { + font-weight: 600; + padding: 5px; + display: inline-block; + background-color: #fff; + border-radius: 4px; +} +.timeline-inverse > li > .timeline-item { + background: #f0f0f0; + border: 1px solid #ddd; + -webkit-box-shadow: none; + box-shadow: none; +} +.timeline-inverse > li > .timeline-item > .timeline-header { + border-bottom-color: #ddd; +} +/* + * Component: Button + * ----------------- + */ +.btn { + border-radius: 3px; + -webkit-box-shadow: none; + box-shadow: none; + border: 1px solid transparent; +} +.btn.uppercase { + text-transform: uppercase; +} +.btn.btn-flat { + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + border-width: 1px; +} +.btn:active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn:focus { + outline: none; +} +.btn.btn-file { + position: relative; + overflow: hidden; +} +.btn.btn-file > input[type='file'] { + position: absolute; + top: 0; + right: 0; + min-width: 100%; + min-height: 100%; + font-size: 100px; + text-align: right; + opacity: 0; + filter: alpha(opacity=0); + outline: none; + background: white; + cursor: inherit; + display: block; +} +.btn-default { + background-color: #f4f4f4; + color: #444; + border-color: #ddd; +} +.btn-default:hover, +.btn-default:active, +.btn-default.hover { + background-color: #e7e7e7; +} +.btn-primary { + background-color: #3c8dbc; + border-color: #367fa9; +} +.btn-primary:hover, +.btn-primary:active, +.btn-primary.hover { + background-color: #367fa9; +} +.btn-success { + background-color: #00a65a; + border-color: #008d4c; +} +.btn-success:hover, +.btn-success:active, +.btn-success.hover { + background-color: #008d4c; +} +.btn-info { + background-color: #00c0ef; + border-color: #00acd6; +} +.btn-info:hover, +.btn-info:active, +.btn-info.hover { + background-color: #00acd6; +} +.btn-danger { + background-color: #dd4b39; + border-color: #d73925; +} +.btn-danger:hover, +.btn-danger:active, +.btn-danger.hover { + background-color: #d73925; +} +.btn-warning { + background-color: #f39c12; + border-color: #e08e0b; +} +.btn-warning:hover, +.btn-warning:active, +.btn-warning.hover { + background-color: #e08e0b; +} +.btn-outline { + border: 1px solid #fff; + background: transparent; + color: #fff; +} +.btn-outline:hover, +.btn-outline:focus, +.btn-outline:active { + color: rgba(255, 255, 255, 0.7); + border-color: rgba(255, 255, 255, 0.7); +} +.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn[class*='bg-']:hover { + -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2); +} +.btn-app { + border-radius: 3px; + position: relative; + padding: 15px 5px; + margin: 0 0 10px 10px; + min-width: 80px; + height: 60px; + text-align: center; + color: #666; + border: 1px solid #ddd; + background-color: #f4f4f4; + font-size: 12px; +} +.btn-app > .fa, +.btn-app > .glyphicon, +.btn-app > .ion { + font-size: 20px; + display: block; +} +.btn-app:hover { + background: #f4f4f4; + color: #444; + border-color: #aaa; +} +.btn-app:active, +.btn-app:focus { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-app > .badge { + position: absolute; + top: -3px; + right: -10px; + font-size: 10px; + font-weight: 400; +} +/* + * Component: Callout + * ------------------ + */ +.callout { + border-radius: 3px; + margin: 0 0 20px 0; + padding: 15px 30px 15px 15px; + border-left: 5px solid #eee; +} +.callout a { + color: #fff; + text-decoration: underline; +} +.callout a:hover { + color: #eee; +} +.callout h4 { + margin-top: 0; + font-weight: 600; +} +.callout p:last-child { + margin-bottom: 0; +} +.callout code, +.callout .highlight { + background-color: #fff; +} +.callout.callout-danger { + border-color: #c23321; +} +.callout.callout-warning { + border-color: #c87f0a; +} +.callout.callout-info { + border-color: #0097bc; +} +.callout.callout-success { + border-color: #00733e; +} +/* + * Component: alert + * ---------------- + */ +.alert { + border-radius: 3px; +} +.alert h4 { + font-weight: 600; +} +.alert .icon { + margin-right: 10px; +} +.alert .close { + color: #000; + opacity: 0.2; + filter: alpha(opacity=20); +} +.alert .close:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} +.alert a { + color: #fff; + text-decoration: underline; +} +.alert-success { + border-color: #008d4c; +} +.alert-danger, +.alert-error { + border-color: #d73925; +} +.alert-warning { + border-color: #e08e0b; +} +.alert-info { + border-color: #00acd6; +} +/* + * Component: Nav + * -------------- + */ +.nav > li > a:hover, +.nav > li > a:active, +.nav > li > a:focus { + color: #444; + background: #f7f7f7; +} +/* NAV PILLS */ +.nav-pills > li > a { + border-radius: 0; + border-top: 3px solid transparent; + color: #444; +} +.nav-pills > li > a > .fa, +.nav-pills > li > a > .glyphicon, +.nav-pills > li > a > .ion { + margin-right: 5px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + border-top-color: #3c8dbc; +} +.nav-pills > li.active > a { + font-weight: 600; +} +/* NAV STACKED */ +.nav-stacked > li > a { + border-radius: 0; + border-top: 0; + border-left: 3px solid transparent; + color: #444; +} +.nav-stacked > li.active > a, +.nav-stacked > li.active > a:hover { + background: transparent; + color: #444; + border-top: 0; + border-left-color: #3c8dbc; +} +.nav-stacked > li.header { + border-bottom: 1px solid #ddd; + color: #777; + margin-bottom: 10px; + padding: 5px 10px; + text-transform: uppercase; +} +/* NAV TABS */ +.nav-tabs-custom { + margin-bottom: 20px; + background: #fff; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 3px; +} +.nav-tabs-custom > .nav-tabs { + margin: 0; + border-bottom-color: #f4f4f4; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.nav-tabs-custom > .nav-tabs > li { + border-top: 3px solid transparent; + margin-bottom: -2px; + margin-right: 5px; +} +.nav-tabs-custom > .nav-tabs > li > a { + color: #444; + border-radius: 0; +} +.nav-tabs-custom > .nav-tabs > li > a.text-muted { + color: #999; +} +.nav-tabs-custom > .nav-tabs > li > a, +.nav-tabs-custom > .nav-tabs > li > a:hover { + background: transparent; + margin: 0; +} +.nav-tabs-custom > .nav-tabs > li > a:hover { + color: #999; +} +.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover, +.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus, +.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active { + border-color: transparent; +} +.nav-tabs-custom > .nav-tabs > li.active { + border-top-color: #3c8dbc; +} +.nav-tabs-custom > .nav-tabs > li.active > a, +.nav-tabs-custom > .nav-tabs > li.active:hover > a { + background-color: #fff; + color: #444; +} +.nav-tabs-custom > .nav-tabs > li.active > a { + border-top-color: transparent; + border-left-color: #f4f4f4; + border-right-color: #f4f4f4; +} +.nav-tabs-custom > .nav-tabs > li:first-of-type { + margin-left: 0; +} +.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a { + border-left-color: transparent; +} +.nav-tabs-custom > .nav-tabs.pull-right { + float: none !important; +} +.nav-tabs-custom > .nav-tabs.pull-right > li { + float: right; +} +.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type { + margin-right: 0; +} +.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a { + border-left-width: 1px; +} +.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a { + border-left-color: #f4f4f4; + border-right-color: transparent; +} +.nav-tabs-custom > .nav-tabs > li.header { + line-height: 35px; + padding: 0 10px; + font-size: 20px; + color: #444; +} +.nav-tabs-custom > .nav-tabs > li.header > .fa, +.nav-tabs-custom > .nav-tabs > li.header > .glyphicon, +.nav-tabs-custom > .nav-tabs > li.header > .ion { + margin-right: 5px; +} +.nav-tabs-custom > .tab-content { + background: #fff; + padding: 10px; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.nav-tabs-custom .dropdown.open > a:active, +.nav-tabs-custom .dropdown.open > a:focus { + background: transparent; + color: #999; +} +.nav-tabs-custom.tab-primary > .nav-tabs > li.active { + border-top-color: #3c8dbc; +} +.nav-tabs-custom.tab-info > .nav-tabs > li.active { + border-top-color: #00c0ef; +} +.nav-tabs-custom.tab-danger > .nav-tabs > li.active { + border-top-color: #dd4b39; +} +.nav-tabs-custom.tab-warning > .nav-tabs > li.active { + border-top-color: #f39c12; +} +.nav-tabs-custom.tab-success > .nav-tabs > li.active { + border-top-color: #00a65a; +} +.nav-tabs-custom.tab-default > .nav-tabs > li.active { + border-top-color: #d2d6de; +} +/* PAGINATION */ +.pagination > li > a { + background: #fafafa; + color: #666; +} +.pagination.pagination-flat > li > a { + border-radius: 0 !important; +} +/* + * Component: Products List + * ------------------------ + */ +.products-list { + list-style: none; + margin: 0; + padding: 0; +} +.products-list > .item { + border-radius: 3px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + padding: 10px 0; + background: #fff; +} +.products-list > .item:before, +.products-list > .item:after { + content: " "; + display: table; +} +.products-list > .item:after { + clear: both; +} +.products-list .product-img { + float: left; +} +.products-list .product-img img { + width: 50px; + height: 50px; +} +.products-list .product-info { + margin-left: 60px; +} +.products-list .product-title { + font-weight: 600; +} +.products-list .product-description { + display: block; + color: #999; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.product-list-in-box > .item { + -webkit-box-shadow: none; + box-shadow: none; + border-radius: 0; + border-bottom: 1px solid #f4f4f4; +} +.product-list-in-box > .item:last-of-type { + border-bottom-width: 0; +} +/* + * Component: Table + * ---------------- + */ +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + border-top: 1px solid #f4f4f4; +} +.table > thead > tr > th { + border-bottom: 2px solid #f4f4f4; +} +.table tr td .progress { + margin-top: 5px; +} +.table-bordered { + border: 1px solid #f4f4f4; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #f4f4f4; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table.no-border, +.table.no-border td, +.table.no-border th { + border: 0; +} +/* .text-center in tables */ +table.text-center, +table.text-center td, +table.text-center th { + text-align: center; +} +.table.align th { + text-align: left; +} +.table.align td { + text-align: right; +} +/* + * Component: Label + * ---------------- + */ +.label-default { + background-color: #d2d6de; + color: #444; +} +/* + * Component: Direct Chat + * ---------------------- + */ +.direct-chat .box-body { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + position: relative; + overflow-x: hidden; + padding: 0; +} +.direct-chat.chat-pane-open .direct-chat-contacts { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.direct-chat-messages { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + padding: 10px; + height: 250px; + overflow: auto; +} +.direct-chat-msg, +.direct-chat-text { + display: block; +} +.direct-chat-msg { + margin-bottom: 10px; +} +.direct-chat-msg:before, +.direct-chat-msg:after { + content: " "; + display: table; +} +.direct-chat-msg:after { + clear: both; +} +.direct-chat-messages, +.direct-chat-contacts { + -webkit-transition: -webkit-transform 0.5s ease-in-out; + -moz-transition: -moz-transform 0.5s ease-in-out; + -o-transition: -o-transform 0.5s ease-in-out; + transition: transform 0.5s ease-in-out; +} +.direct-chat-text { + border-radius: 5px; + position: relative; + padding: 5px 10px; + background: #d2d6de; + border: 1px solid #d2d6de; + margin: 5px 0 0 50px; + color: #444444; +} +.direct-chat-text:after, +.direct-chat-text:before { + position: absolute; + right: 100%; + top: 15px; + border: solid transparent; + border-right-color: #d2d6de; + content: ' '; + height: 0; + width: 0; + pointer-events: none; +} +.direct-chat-text:after { + border-width: 5px; + margin-top: -5px; +} +.direct-chat-text:before { + border-width: 6px; + margin-top: -6px; +} +.right .direct-chat-text { + margin-right: 50px; + margin-left: 0; +} +.right .direct-chat-text:after, +.right .direct-chat-text:before { + right: auto; + left: 100%; + border-right-color: transparent; + border-left-color: #d2d6de; +} +.direct-chat-img { + border-radius: 50%; + float: left; + width: 40px; + height: 40px; +} +.right .direct-chat-img { + float: right; +} +.direct-chat-info { + display: block; + margin-bottom: 2px; + font-size: 12px; +} +.direct-chat-name { + font-weight: 600; +} +.direct-chat-timestamp { + color: #999; +} +.direct-chat-contacts-open .direct-chat-contacts { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.direct-chat-contacts { + -webkit-transform: translate(101%, 0); + -ms-transform: translate(101%, 0); + -o-transform: translate(101%, 0); + transform: translate(101%, 0); + position: absolute; + top: 0; + bottom: 0; + height: 250px; + width: 100%; + background: #222d32; + color: #fff; + overflow: auto; +} +.contacts-list > li { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + padding: 10px; + margin: 0; +} +.contacts-list > li:before, +.contacts-list > li:after { + content: " "; + display: table; +} +.contacts-list > li:after { + clear: both; +} +.contacts-list > li:last-of-type { + border-bottom: none; +} +.contacts-list-img { + border-radius: 50%; + width: 40px; + float: left; +} +.contacts-list-info { + margin-left: 45px; + color: #fff; +} +.contacts-list-name, +.contacts-list-status { + display: block; +} +.contacts-list-name { + font-weight: 600; +} +.contacts-list-status { + font-size: 12px; +} +.contacts-list-date { + color: #aaa; + font-weight: normal; +} +.contacts-list-msg { + color: #999; +} +.direct-chat-danger .right > .direct-chat-text { + background: #dd4b39; + border-color: #dd4b39; + color: #ffffff; +} +.direct-chat-danger .right > .direct-chat-text:after, +.direct-chat-danger .right > .direct-chat-text:before { + border-left-color: #dd4b39; +} +.direct-chat-primary .right > .direct-chat-text { + background: #3c8dbc; + border-color: #3c8dbc; + color: #ffffff; +} +.direct-chat-primary .right > .direct-chat-text:after, +.direct-chat-primary .right > .direct-chat-text:before { + border-left-color: #3c8dbc; +} +.direct-chat-warning .right > .direct-chat-text { + background: #f39c12; + border-color: #f39c12; + color: #ffffff; +} +.direct-chat-warning .right > .direct-chat-text:after, +.direct-chat-warning .right > .direct-chat-text:before { + border-left-color: #f39c12; +} +.direct-chat-info .right > .direct-chat-text { + background: #00c0ef; + border-color: #00c0ef; + color: #ffffff; +} +.direct-chat-info .right > .direct-chat-text:after, +.direct-chat-info .right > .direct-chat-text:before { + border-left-color: #00c0ef; +} +.direct-chat-success .right > .direct-chat-text { + background: #00a65a; + border-color: #00a65a; + color: #ffffff; +} +.direct-chat-success .right > .direct-chat-text:after, +.direct-chat-success .right > .direct-chat-text:before { + border-left-color: #00a65a; +} +/* + * Component: Users List + * --------------------- + */ +.users-list > li { + width: 25%; + float: left; + padding: 10px; + text-align: center; +} +.users-list > li img { + border-radius: 50%; + max-width: 100%; + height: auto; +} +.users-list > li > a:hover, +.users-list > li > a:hover .users-list-name { + color: #999; +} +.users-list-name, +.users-list-date { + display: block; +} +.users-list-name { + font-weight: 600; + color: #444; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.users-list-date { + color: #999; + font-size: 12px; +} +/* + * Component: Carousel + * ------------------- + */ +.carousel-control.left, +.carousel-control.right { + background-image: none; +} +.carousel-control > .fa { + font-size: 40px; + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -20px; +} +/* + * Component: modal + * ---------------- + */ +.modal { + background: rgba(0, 0, 0, 0.3); +} +.modal-content { + border-radius: 0; + -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + border: 0; +} +@media (min-width: 768px) { + .modal-content { + -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + } +} +.modal-header { + border-bottom-color: #f4f4f4; +} +.modal-footer { + border-top-color: #f4f4f4; +} +.modal-primary .modal-header, +.modal-primary .modal-footer { + border-color: #307095; +} +.modal-warning .modal-header, +.modal-warning .modal-footer { + border-color: #c87f0a; +} +.modal-info .modal-header, +.modal-info .modal-footer { + border-color: #0097bc; +} +.modal-success .modal-header, +.modal-success .modal-footer { + border-color: #00733e; +} +.modal-danger .modal-header, +.modal-danger .modal-footer { + border-color: #c23321; +} +/* + * Component: Social Widgets + * ------------------------- + */ +.box-widget { + border: none; + position: relative; +} +.widget-user .widget-user-header { + padding: 20px; + height: 120px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.widget-user .widget-user-username { + margin-top: 0; + margin-bottom: 5px; + font-size: 25px; + font-weight: 300; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); +} +.widget-user .widget-user-desc { + margin-top: 0; +} +.widget-user .widget-user-image { + position: absolute; + top: 65px; + left: 50%; + margin-left: -45px; +} +.widget-user .widget-user-image > img { + width: 90px; + height: auto; + border: 3px solid #fff; +} +.widget-user .box-footer { + padding-top: 30px; +} +.widget-user-2 .widget-user-header { + padding: 20px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.widget-user-2 .widget-user-username { + margin-top: 5px; + margin-bottom: 5px; + font-size: 25px; + font-weight: 300; +} +.widget-user-2 .widget-user-desc { + margin-top: 0; +} +.widget-user-2 .widget-user-username, +.widget-user-2 .widget-user-desc { + margin-left: 75px; +} +.widget-user-2 .widget-user-image > img { + width: 65px; + height: auto; + float: left; +} +/* + * Page: Mailbox + * ------------- + */ +.mailbox-messages > .table { + margin: 0; +} +.mailbox-controls { + padding: 5px; +} +.mailbox-controls.with-border { + border-bottom: 1px solid #f4f4f4; +} +.mailbox-read-info { + border-bottom: 1px solid #f4f4f4; + padding: 10px; +} +.mailbox-read-info h3 { + font-size: 20px; + margin: 0; +} +.mailbox-read-info h5 { + margin: 0; + padding: 5px 0 0 0; +} +.mailbox-read-time { + color: #999; + font-size: 13px; +} +.mailbox-read-message { + padding: 10px; +} +.mailbox-attachments li { + float: left; + width: 200px; + border: 1px solid #eee; + margin-bottom: 10px; + margin-right: 10px; +} +.mailbox-attachment-name { + font-weight: bold; + color: #666; +} +.mailbox-attachment-icon, +.mailbox-attachment-info, +.mailbox-attachment-size { + display: block; +} +.mailbox-attachment-info { + padding: 10px; + background: #f4f4f4; +} +.mailbox-attachment-size { + color: #999; + font-size: 12px; +} +.mailbox-attachment-icon { + text-align: center; + font-size: 65px; + color: #666; + padding: 20px 10px; +} +.mailbox-attachment-icon.has-img { + padding: 0; +} +.mailbox-attachment-icon.has-img > img { + max-width: 100%; + height: auto; +} +/* + * Page: Lock Screen + * ----------------- + */ +/* ADD THIS CLASS TO THE TAG */ +.lockscreen { + background: #d2d6de; +} +.lockscreen-logo { + font-size: 35px; + text-align: center; + margin-bottom: 25px; + font-weight: 300; +} +.lockscreen-logo a { + color: #444; +} +.lockscreen-wrapper { + max-width: 400px; + margin: 0 auto; + margin-top: 10%; +} +/* User name [optional] */ +.lockscreen .lockscreen-name { + text-align: center; + font-weight: 600; +} +/* Will contain the image and the sign in form */ +.lockscreen-item { + border-radius: 4px; + padding: 0; + background: #fff; + position: relative; + margin: 10px auto 30px auto; + width: 290px; +} +/* User image */ +.lockscreen-image { + border-radius: 50%; + position: absolute; + left: -10px; + top: -25px; + background: #fff; + padding: 5px; + z-index: 10; +} +.lockscreen-image > img { + border-radius: 50%; + width: 70px; + height: 70px; +} +/* Contains the password input and the login button */ +.lockscreen-credentials { + margin-left: 70px; +} +.lockscreen-credentials .form-control { + border: 0; +} +.lockscreen-credentials .btn { + background-color: #fff; + border: 0; + padding: 0 10px; +} +.lockscreen-footer { + margin-top: 10px; +} +/* + * Page: Login & Register + * ---------------------- + */ +.login-logo, +.register-logo { + font-size: 35px; + text-align: center; + margin-bottom: 25px; + font-weight: 300; +} +.login-logo a, +.register-logo a { + color: #444; +} +.login-page, +.register-page { + background: #d2d6de; +} +.login-box, +.register-box { + width: 360px; + margin: 7% auto; +} +@media (max-width: 768px) { + .login-box, + .register-box { + width: 90%; + margin-top: 20px; + } +} +.login-box-body, +.register-box-body { + background: #fff; + padding: 20px; + border-top: 0; + color: #666; +} +.login-box-body .form-control-feedback, +.register-box-body .form-control-feedback { + color: #777; +} +.login-box-msg, +.register-box-msg { + margin: 0; + text-align: center; + padding: 0 20px 20px 20px; +} +.social-auth-links { + margin: 10px 0; +} +/* + * Page: 400 and 500 error pages + * ------------------------------ + */ +.error-page { + width: 600px; + margin: 20px auto 0 auto; +} +@media (max-width: 991px) { + .error-page { + width: 100%; + } +} +.error-page > .headline { + float: left; + font-size: 100px; + font-weight: 300; +} +@media (max-width: 991px) { + .error-page > .headline { + float: none; + text-align: center; + } +} +.error-page > .error-content { + margin-left: 190px; + display: block; +} +@media (max-width: 991px) { + .error-page > .error-content { + margin-left: 0; + } +} +.error-page > .error-content > h3 { + font-weight: 300; + font-size: 25px; +} +@media (max-width: 991px) { + .error-page > .error-content > h3 { + text-align: center; + } +} +/* + * Page: Invoice + * ------------- + */ +.invoice { + position: relative; + background: #fff; + border: 1px solid #f4f4f4; + padding: 20px; + margin: 10px 25px; +} +.invoice-title { + margin-top: 0; +} +/* + * Page: Profile + * ------------- + */ +.profile-user-img { + margin: 0 auto; + width: 100px; + padding: 3px; + border: 3px solid #d2d6de; +} +.profile-username { + font-size: 21px; + margin-top: 5px; +} +.post { + border-bottom: 1px solid #d2d6de; + margin-bottom: 15px; + padding-bottom: 15px; + color: #666; +} +.post:last-of-type { + border-bottom: 0; + margin-bottom: 0; + padding-bottom: 0; +} +.post .user-block { + margin-bottom: 15px; +} +/* + * Social Buttons for Bootstrap + * + * Copyright 2013-2015 Panayiotis Lipiridis + * Licensed under the MIT License + * + * https://github.com/lipis/bootstrap-social + */ +.btn-social { + position: relative; + padding-left: 44px; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.btn-social > :first-child { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 32px; + line-height: 34px; + font-size: 1.6em; + text-align: center; + border-right: 1px solid rgba(0, 0, 0, 0.2); +} +.btn-social.btn-lg { + padding-left: 61px; +} +.btn-social.btn-lg > :first-child { + line-height: 45px; + width: 45px; + font-size: 1.8em; +} +.btn-social.btn-sm { + padding-left: 38px; +} +.btn-social.btn-sm > :first-child { + line-height: 28px; + width: 28px; + font-size: 1.4em; +} +.btn-social.btn-xs { + padding-left: 30px; +} +.btn-social.btn-xs > :first-child { + line-height: 20px; + width: 20px; + font-size: 1.2em; +} +.btn-social-icon { + position: relative; + padding-left: 44px; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: 34px; + width: 34px; + padding: 0; +} +.btn-social-icon > :first-child { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 32px; + line-height: 34px; + font-size: 1.6em; + text-align: center; + border-right: 1px solid rgba(0, 0, 0, 0.2); +} +.btn-social-icon.btn-lg { + padding-left: 61px; +} +.btn-social-icon.btn-lg > :first-child { + line-height: 45px; + width: 45px; + font-size: 1.8em; +} +.btn-social-icon.btn-sm { + padding-left: 38px; +} +.btn-social-icon.btn-sm > :first-child { + line-height: 28px; + width: 28px; + font-size: 1.4em; +} +.btn-social-icon.btn-xs { + padding-left: 30px; +} +.btn-social-icon.btn-xs > :first-child { + line-height: 20px; + width: 20px; + font-size: 1.2em; +} +.btn-social-icon > :first-child { + border: none; + text-align: center; + width: 100%; +} +.btn-social-icon.btn-lg { + height: 45px; + width: 45px; + padding-left: 0; + padding-right: 0; +} +.btn-social-icon.btn-sm { + height: 30px; + width: 30px; + padding-left: 0; + padding-right: 0; +} +.btn-social-icon.btn-xs { + height: 22px; + width: 22px; + padding-left: 0; + padding-right: 0; +} +.btn-adn { + color: #ffffff; + background-color: #d87a68; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:focus, +.btn-adn.focus { + color: #ffffff; + background-color: #ce563f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:hover { + color: #ffffff; + background-color: #ce563f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:active, +.btn-adn.active, +.open > .dropdown-toggle.btn-adn { + color: #ffffff; + background-color: #ce563f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:active, +.btn-adn.active, +.open > .dropdown-toggle.btn-adn { + background-image: none; +} +.btn-adn .badge { + color: #d87a68; + background-color: #ffffff; +} +.btn-bitbucket { + color: #ffffff; + background-color: #205081; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:focus, +.btn-bitbucket.focus { + color: #ffffff; + background-color: #163758; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:hover { + color: #ffffff; + background-color: #163758; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:active, +.btn-bitbucket.active, +.open > .dropdown-toggle.btn-bitbucket { + color: #ffffff; + background-color: #163758; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:active, +.btn-bitbucket.active, +.open > .dropdown-toggle.btn-bitbucket { + background-image: none; +} +.btn-bitbucket .badge { + color: #205081; + background-color: #ffffff; +} +.btn-dropbox { + color: #ffffff; + background-color: #1087dd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:focus, +.btn-dropbox.focus { + color: #ffffff; + background-color: #0d6aad; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:hover { + color: #ffffff; + background-color: #0d6aad; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:active, +.btn-dropbox.active, +.open > .dropdown-toggle.btn-dropbox { + color: #ffffff; + background-color: #0d6aad; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:active, +.btn-dropbox.active, +.open > .dropdown-toggle.btn-dropbox { + background-image: none; +} +.btn-dropbox .badge { + color: #1087dd; + background-color: #ffffff; +} +.btn-facebook { + color: #ffffff; + background-color: #3b5998; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:focus, +.btn-facebook.focus { + color: #ffffff; + background-color: #2d4373; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:hover { + color: #ffffff; + background-color: #2d4373; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:active, +.btn-facebook.active, +.open > .dropdown-toggle.btn-facebook { + color: #ffffff; + background-color: #2d4373; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:active, +.btn-facebook.active, +.open > .dropdown-toggle.btn-facebook { + background-image: none; +} +.btn-facebook .badge { + color: #3b5998; + background-color: #ffffff; +} +.btn-flickr { + color: #ffffff; + background-color: #ff0084; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:focus, +.btn-flickr.focus { + color: #ffffff; + background-color: #cc006a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:hover { + color: #ffffff; + background-color: #cc006a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:active, +.btn-flickr.active, +.open > .dropdown-toggle.btn-flickr { + color: #ffffff; + background-color: #cc006a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:active, +.btn-flickr.active, +.open > .dropdown-toggle.btn-flickr { + background-image: none; +} +.btn-flickr .badge { + color: #ff0084; + background-color: #ffffff; +} +.btn-foursquare { + color: #ffffff; + background-color: #f94877; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:focus, +.btn-foursquare.focus { + color: #ffffff; + background-color: #f71752; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:hover { + color: #ffffff; + background-color: #f71752; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:active, +.btn-foursquare.active, +.open > .dropdown-toggle.btn-foursquare { + color: #ffffff; + background-color: #f71752; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:active, +.btn-foursquare.active, +.open > .dropdown-toggle.btn-foursquare { + background-image: none; +} +.btn-foursquare .badge { + color: #f94877; + background-color: #ffffff; +} +.btn-github { + color: #ffffff; + background-color: #444444; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:focus, +.btn-github.focus { + color: #ffffff; + background-color: #2b2b2b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:hover { + color: #ffffff; + background-color: #2b2b2b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:active, +.btn-github.active, +.open > .dropdown-toggle.btn-github { + color: #ffffff; + background-color: #2b2b2b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:active, +.btn-github.active, +.open > .dropdown-toggle.btn-github { + background-image: none; +} +.btn-github .badge { + color: #444444; + background-color: #ffffff; +} +.btn-google { + color: #ffffff; + background-color: #dd4b39; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:focus, +.btn-google.focus { + color: #ffffff; + background-color: #c23321; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:hover { + color: #ffffff; + background-color: #c23321; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:active, +.btn-google.active, +.open > .dropdown-toggle.btn-google { + color: #ffffff; + background-color: #c23321; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:active, +.btn-google.active, +.open > .dropdown-toggle.btn-google { + background-image: none; +} +.btn-google .badge { + color: #dd4b39; + background-color: #ffffff; +} +.btn-instagram { + color: #ffffff; + background-color: #3f729b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:focus, +.btn-instagram.focus { + color: #ffffff; + background-color: #305777; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:hover { + color: #ffffff; + background-color: #305777; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:active, +.btn-instagram.active, +.open > .dropdown-toggle.btn-instagram { + color: #ffffff; + background-color: #305777; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:active, +.btn-instagram.active, +.open > .dropdown-toggle.btn-instagram { + background-image: none; +} +.btn-instagram .badge { + color: #3f729b; + background-color: #ffffff; +} +.btn-linkedin { + color: #ffffff; + background-color: #007bb6; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:focus, +.btn-linkedin.focus { + color: #ffffff; + background-color: #005983; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:hover { + color: #ffffff; + background-color: #005983; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:active, +.btn-linkedin.active, +.open > .dropdown-toggle.btn-linkedin { + color: #ffffff; + background-color: #005983; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:active, +.btn-linkedin.active, +.open > .dropdown-toggle.btn-linkedin { + background-image: none; +} +.btn-linkedin .badge { + color: #007bb6; + background-color: #ffffff; +} +.btn-microsoft { + color: #ffffff; + background-color: #2672ec; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:focus, +.btn-microsoft.focus { + color: #ffffff; + background-color: #125acd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:hover { + color: #ffffff; + background-color: #125acd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:active, +.btn-microsoft.active, +.open > .dropdown-toggle.btn-microsoft { + color: #ffffff; + background-color: #125acd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:active, +.btn-microsoft.active, +.open > .dropdown-toggle.btn-microsoft { + background-image: none; +} +.btn-microsoft .badge { + color: #2672ec; + background-color: #ffffff; +} +.btn-openid { + color: #ffffff; + background-color: #f7931e; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:focus, +.btn-openid.focus { + color: #ffffff; + background-color: #da7908; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:hover { + color: #ffffff; + background-color: #da7908; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:active, +.btn-openid.active, +.open > .dropdown-toggle.btn-openid { + color: #ffffff; + background-color: #da7908; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:active, +.btn-openid.active, +.open > .dropdown-toggle.btn-openid { + background-image: none; +} +.btn-openid .badge { + color: #f7931e; + background-color: #ffffff; +} +.btn-pinterest { + color: #ffffff; + background-color: #cb2027; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:focus, +.btn-pinterest.focus { + color: #ffffff; + background-color: #9f191f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:hover { + color: #ffffff; + background-color: #9f191f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:active, +.btn-pinterest.active, +.open > .dropdown-toggle.btn-pinterest { + color: #ffffff; + background-color: #9f191f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:active, +.btn-pinterest.active, +.open > .dropdown-toggle.btn-pinterest { + background-image: none; +} +.btn-pinterest .badge { + color: #cb2027; + background-color: #ffffff; +} +.btn-reddit { + color: #000000; + background-color: #eff7ff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:focus, +.btn-reddit.focus { + color: #000000; + background-color: #bcddff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:hover { + color: #000000; + background-color: #bcddff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:active, +.btn-reddit.active, +.open > .dropdown-toggle.btn-reddit { + color: #000000; + background-color: #bcddff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:active, +.btn-reddit.active, +.open > .dropdown-toggle.btn-reddit { + background-image: none; +} +.btn-reddit .badge { + color: #eff7ff; + background-color: #000000; +} +.btn-soundcloud { + color: #ffffff; + background-color: #ff5500; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:focus, +.btn-soundcloud.focus { + color: #ffffff; + background-color: #cc4400; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:hover { + color: #ffffff; + background-color: #cc4400; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:active, +.btn-soundcloud.active, +.open > .dropdown-toggle.btn-soundcloud { + color: #ffffff; + background-color: #cc4400; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:active, +.btn-soundcloud.active, +.open > .dropdown-toggle.btn-soundcloud { + background-image: none; +} +.btn-soundcloud .badge { + color: #ff5500; + background-color: #ffffff; +} +.btn-tumblr { + color: #ffffff; + background-color: #2c4762; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:focus, +.btn-tumblr.focus { + color: #ffffff; + background-color: #1c2d3f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:hover { + color: #ffffff; + background-color: #1c2d3f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:active, +.btn-tumblr.active, +.open > .dropdown-toggle.btn-tumblr { + color: #ffffff; + background-color: #1c2d3f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:active, +.btn-tumblr.active, +.open > .dropdown-toggle.btn-tumblr { + background-image: none; +} +.btn-tumblr .badge { + color: #2c4762; + background-color: #ffffff; +} +.btn-twitter { + color: #ffffff; + background-color: #55acee; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:focus, +.btn-twitter.focus { + color: #ffffff; + background-color: #2795e9; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:hover { + color: #ffffff; + background-color: #2795e9; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:active, +.btn-twitter.active, +.open > .dropdown-toggle.btn-twitter { + color: #ffffff; + background-color: #2795e9; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:active, +.btn-twitter.active, +.open > .dropdown-toggle.btn-twitter { + background-image: none; +} +.btn-twitter .badge { + color: #55acee; + background-color: #ffffff; +} +.btn-vimeo { + color: #ffffff; + background-color: #1ab7ea; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:focus, +.btn-vimeo.focus { + color: #ffffff; + background-color: #1295bf; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:hover { + color: #ffffff; + background-color: #1295bf; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:active, +.btn-vimeo.active, +.open > .dropdown-toggle.btn-vimeo { + color: #ffffff; + background-color: #1295bf; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:active, +.btn-vimeo.active, +.open > .dropdown-toggle.btn-vimeo { + background-image: none; +} +.btn-vimeo .badge { + color: #1ab7ea; + background-color: #ffffff; +} +.btn-vk { + color: #ffffff; + background-color: #587ea3; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:focus, +.btn-vk.focus { + color: #ffffff; + background-color: #466482; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:hover { + color: #ffffff; + background-color: #466482; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:active, +.btn-vk.active, +.open > .dropdown-toggle.btn-vk { + color: #ffffff; + background-color: #466482; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:active, +.btn-vk.active, +.open > .dropdown-toggle.btn-vk { + background-image: none; +} +.btn-vk .badge { + color: #587ea3; + background-color: #ffffff; +} +.btn-yahoo { + color: #ffffff; + background-color: #720e9e; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:focus, +.btn-yahoo.focus { + color: #ffffff; + background-color: #500a6f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:hover { + color: #ffffff; + background-color: #500a6f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:active, +.btn-yahoo.active, +.open > .dropdown-toggle.btn-yahoo { + color: #ffffff; + background-color: #500a6f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:active, +.btn-yahoo.active, +.open > .dropdown-toggle.btn-yahoo { + background-image: none; +} +.btn-yahoo .badge { + color: #720e9e; + background-color: #ffffff; +} +/* + * Plugin: Full Calendar + * --------------------- + */ +.fc-button { + background: #f4f4f4; + background-image: none; + color: #444; + border-color: #ddd; + border-bottom-color: #ddd; +} +.fc-button:hover, +.fc-button:active, +.fc-button.hover { + background-color: #e9e9e9; +} +.fc-header-title h2 { + font-size: 15px; + line-height: 1.6em; + color: #666; + margin-left: 10px; +} +.fc-header-right { + padding-right: 10px; +} +.fc-header-left { + padding-left: 10px; +} +.fc-widget-header { + background: #fafafa; +} +.fc-grid { + width: 100%; + border: 0; +} +.fc-widget-header:first-of-type, +.fc-widget-content:first-of-type { + border-left: 0; + border-right: 0; +} +.fc-widget-header:last-of-type, +.fc-widget-content:last-of-type { + border-right: 0; +} +.fc-toolbar { + padding: 10px; + margin: 0; +} +.fc-day-number { + font-size: 20px; + font-weight: 300; + padding-right: 10px; +} +.fc-color-picker { + list-style: none; + margin: 0; + padding: 0; +} +.fc-color-picker > li { + float: left; + font-size: 30px; + margin-right: 5px; + line-height: 30px; +} +.fc-color-picker > li .fa { + -webkit-transition: -webkit-transform linear 0.3s; + -moz-transition: -moz-transform linear 0.3s; + -o-transition: -o-transform linear 0.3s; + transition: transform linear 0.3s; +} +.fc-color-picker > li .fa:hover { + -webkit-transform: rotate(30deg); + -ms-transform: rotate(30deg); + -o-transform: rotate(30deg); + transform: rotate(30deg); +} +#add-new-event { + -webkit-transition: all linear 0.3s; + -o-transition: all linear 0.3s; + transition: all linear 0.3s; +} +.external-event { + padding: 5px 10px; + font-weight: bold; + margin-bottom: 4px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 3px; + cursor: move; +} +.external-event:hover { + box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2); +} +/* + * Plugin: Select2 + * --------------- + */ +.select2-container--default.select2-container--focus, +.select2-selection.select2-container--focus, +.select2-container--default:focus, +.select2-selection:focus, +.select2-container--default:active, +.select2-selection:active { + outline: none; +} +.select2-container--default .select2-selection--single, +.select2-selection .select2-selection--single { + border: 1px solid #d2d6de; + border-radius: 0; + padding: 6px 12px; + height: 34px; +} +.select2-container--default.select2-container--open { + border-color: #3c8dbc; +} +.select2-dropdown { + border: 1px solid #d2d6de; + border-radius: 0; +} +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #3c8dbc; + color: white; +} +.select2-results__option { + padding: 6px 12px; + user-select: none; + -webkit-user-select: none; +} +.select2-container .select2-selection--single .select2-selection__rendered { + padding-left: 0; + padding-right: 0; + height: auto; + margin-top: -4px; +} +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 6px; + padding-left: 20px; +} +.select2-container--default .select2-selection--single .select2-selection__arrow { + height: 28px; + right: 3px; +} +.select2-container--default .select2-selection--single .select2-selection__arrow b { + margin-top: 0; +} +.select2-dropdown .select2-search__field, +.select2-search--inline .select2-search__field { + border: 1px solid #d2d6de; +} +.select2-dropdown .select2-search__field:focus, +.select2-search--inline .select2-search__field:focus { + outline: none; + border: 1px solid #3c8dbc; +} +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; +} +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; +} +.select2-container--default .select2-results__option[aria-selected=true], +.select2-container--default .select2-results__option[aria-selected=true]:hover { + color: #444; +} +.select2-container--default .select2-selection--multiple { + border: 1px solid #d2d6de; + border-radius: 0; +} +.select2-container--default .select2-selection--multiple:focus { + border-color: #3c8dbc; +} +.select2-container--default.select2-container--focus .select2-selection--multiple { + border-color: #d2d6de; +} +.select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #3c8dbc; + border-color: #367fa9; + padding: 1px 10px; + color: #fff; +} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + margin-right: 5px; + color: rgba(255, 255, 255, 0.7); +} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #fff; +} +.select2-container .select2-selection--single .select2-selection__rendered { + padding-right: 10px; +} +/* + * General: Miscellaneous + * ---------------------- + */ +.pad { + padding: 10px; +} +.margin { + margin: 10px; +} +.margin-bottom { + margin-bottom: 20px; +} +.margin-bottom-none { + margin-bottom: 0; +} +.margin-r-5 { + margin-right: 5px; +} +.inline { + display: inline; +} +.description-block { + display: block; + margin: 10px 0; + text-align: center; +} +.description-block.margin-bottom { + margin-bottom: 25px; +} +.description-block > .description-header { + margin: 0; + padding: 0; + font-weight: 600; + font-size: 16px; +} +.description-block > .description-text { + text-transform: uppercase; +} +.bg-red, +.bg-yellow, +.bg-aqua, +.bg-blue, +.bg-light-blue, +.bg-green, +.bg-navy, +.bg-teal, +.bg-olive, +.bg-lime, +.bg-orange, +.bg-fuchsia, +.bg-purple, +.bg-maroon, +.bg-black, +.bg-red-active, +.bg-yellow-active, +.bg-aqua-active, +.bg-blue-active, +.bg-light-blue-active, +.bg-green-active, +.bg-navy-active, +.bg-teal-active, +.bg-olive-active, +.bg-lime-active, +.bg-orange-active, +.bg-fuchsia-active, +.bg-purple-active, +.bg-maroon-active, +.bg-black-active, +.callout.callout-danger, +.callout.callout-warning, +.callout.callout-info, +.callout.callout-success, +.alert-success, +.alert-danger, +.alert-error, +.alert-warning, +.alert-info, +.label-danger, +.label-info, +.label-warning, +.label-primary, +.label-success, +.modal-primary .modal-body, +.modal-primary .modal-header, +.modal-primary .modal-footer, +.modal-warning .modal-body, +.modal-warning .modal-header, +.modal-warning .modal-footer, +.modal-info .modal-body, +.modal-info .modal-header, +.modal-info .modal-footer, +.modal-success .modal-body, +.modal-success .modal-header, +.modal-success .modal-footer, +.modal-danger .modal-body, +.modal-danger .modal-header, +.modal-danger .modal-footer { + color: #fff !important; +} +.bg-gray { + color: #000; + background-color: #d2d6de !important; +} +.bg-gray-light { + background-color: #f7f7f7; +} +.bg-black { + background-color: #111111 !important; +} +.bg-red, +.callout.callout-danger, +.alert-danger, +.alert-error, +.label-danger, +.modal-danger .modal-body { + background-color: #dd4b39 !important; +} +.bg-yellow, +.callout.callout-warning, +.alert-warning, +.label-warning, +.modal-warning .modal-body { + background-color: #f39c12 !important; +} +.bg-aqua, +.callout.callout-info, +.alert-info, +.label-info, +.modal-info .modal-body { + background-color: #00c0ef !important; +} +.bg-blue { + background-color: #0073b7 !important; +} +.bg-light-blue, +.label-primary, +.modal-primary .modal-body { + background-color: #3c8dbc !important; +} +.bg-green, +.callout.callout-success, +.alert-success, +.label-success, +.modal-success .modal-body { + background-color: #00a65a !important; +} +.bg-navy { + background-color: #001f3f !important; +} +.bg-teal { + background-color: #39cccc !important; +} +.bg-olive { + background-color: #3d9970 !important; +} +.bg-lime { + background-color: #01ff70 !important; +} +.bg-orange { + background-color: #ff851b !important; +} +.bg-fuchsia { + background-color: #f012be !important; +} +.bg-purple { + background-color: #605ca8 !important; +} +.bg-maroon { + background-color: #d81b60 !important; +} +.bg-gray-active { + color: #000; + background-color: #b5bbc8 !important; +} +.bg-black-active { + background-color: #000000 !important; +} +.bg-red-active, +.modal-danger .modal-header, +.modal-danger .modal-footer { + background-color: #d33724 !important; +} +.bg-yellow-active, +.modal-warning .modal-header, +.modal-warning .modal-footer { + background-color: #db8b0b !important; +} +.bg-aqua-active, +.modal-info .modal-header, +.modal-info .modal-footer { + background-color: #00a7d0 !important; +} +.bg-blue-active { + background-color: #005384 !important; +} +.bg-light-blue-active, +.modal-primary .modal-header, +.modal-primary .modal-footer { + background-color: #357ca5 !important; +} +.bg-green-active, +.modal-success .modal-header, +.modal-success .modal-footer { + background-color: #008d4c !important; +} +.bg-navy-active { + background-color: #001a35 !important; +} +.bg-teal-active { + background-color: #30bbbb !important; +} +.bg-olive-active { + background-color: #368763 !important; +} +.bg-lime-active { + background-color: #00e765 !important; +} +.bg-orange-active { + background-color: #ff7701 !important; +} +.bg-fuchsia-active { + background-color: #db0ead !important; +} +.bg-purple-active { + background-color: #555299 !important; +} +.bg-maroon-active { + background-color: #ca195a !important; +} +[class^="bg-"].disabled { + opacity: 0.65; + filter: alpha(opacity=65); +} +.text-red { + color: #dd4b39 !important; +} +.text-yellow { + color: #f39c12 !important; +} +.text-aqua { + color: #00c0ef !important; +} +.text-blue { + color: #0073b7 !important; +} +.text-black { + color: #111111 !important; +} +.text-light-blue { + color: #3c8dbc !important; +} +.text-green { + color: #00a65a !important; +} +.text-gray { + color: #d2d6de !important; +} +.text-navy { + color: #001f3f !important; +} +.text-teal { + color: #39cccc !important; +} +.text-olive { + color: #3d9970 !important; +} +.text-lime { + color: #01ff70 !important; +} +.text-orange { + color: #ff851b !important; +} +.text-fuchsia { + color: #f012be !important; +} +.text-purple { + color: #605ca8 !important; +} +.text-maroon { + color: #d81b60 !important; +} +.link-muted { + color: #7a869d; +} +.link-muted:hover, +.link-muted:focus { + color: #606c84; +} +.link-black { + color: #666; +} +.link-black:hover, +.link-black:focus { + color: #999; +} +.hide { + display: none !important; +} +.no-border { + border: 0 !important; +} +.no-padding { + padding: 0 !important; +} +.no-margin { + margin: 0 !important; +} +.no-shadow { + box-shadow: none !important; +} +.list-unstyled, +.chart-legend, +.contacts-list, +.users-list, +.mailbox-attachments { + list-style: none; + margin: 0; + padding: 0; +} +.list-group-unbordered > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} +.flat { + border-radius: 0 !important; +} +.text-bold, +.text-bold.table td, +.text-bold.table th { + font-weight: 700; +} +.text-sm { + font-size: 12px; +} +.jqstooltip { + padding: 5px !important; + width: auto !important; + height: auto !important; +} +.bg-teal-gradient { + background: #39cccc !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important; + background: -ms-linear-gradient(bottom, #39cccc, #7adddd) !important; + background: -moz-linear-gradient(center bottom, #39cccc 0%, #7adddd 100%) !important; + background: -o-linear-gradient(#7adddd, #39cccc) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important; + color: #fff; +} +.bg-light-blue-gradient { + background: #3c8dbc !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important; + background: -ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important; + background: -moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important; + background: -o-linear-gradient(#67a8ce, #3c8dbc) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important; + color: #fff; +} +.bg-blue-gradient { + background: #0073b7 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important; + background: -ms-linear-gradient(bottom, #0073b7, #0089db) !important; + background: -moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important; + background: -o-linear-gradient(#0089db, #0073b7) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important; + color: #fff; +} +.bg-aqua-gradient { + background: #00c0ef !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important; + background: -ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important; + background: -moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important; + background: -o-linear-gradient(#14d1ff, #00c0ef) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important; + color: #fff; +} +.bg-yellow-gradient { + background: #f39c12 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important; + background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important; + background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important; + background: -o-linear-gradient(#f7bc60, #f39c12) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important; + color: #fff; +} +.bg-purple-gradient { + background: #605ca8 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important; + background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important; + background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important; + background: -o-linear-gradient(#9491c4, #605ca8) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important; + color: #fff; +} +.bg-green-gradient { + background: #00a65a !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important; + background: -ms-linear-gradient(bottom, #00a65a, #00ca6d) !important; + background: -moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important; + background: -o-linear-gradient(#00ca6d, #00a65a) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important; + color: #fff; +} +.bg-red-gradient { + background: #dd4b39 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important; + background: -ms-linear-gradient(bottom, #dd4b39, #e47365) !important; + background: -moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important; + background: -o-linear-gradient(#e47365, #dd4b39) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important; + color: #fff; +} +.bg-black-gradient { + background: #111111 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111111), color-stop(1, #2b2b2b)) !important; + background: -ms-linear-gradient(bottom, #111111, #2b2b2b) !important; + background: -moz-linear-gradient(center bottom, #111111 0%, #2b2b2b 100%) !important; + background: -o-linear-gradient(#2b2b2b, #111111) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important; + color: #fff; +} +.bg-maroon-gradient { + background: #d81b60 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important; + background: -ms-linear-gradient(bottom, #d81b60, #e73f7c) !important; + background: -moz-linear-gradient(center bottom, #d81b60 0%, #e73f7c 100%) !important; + background: -o-linear-gradient(#e73f7c, #d81b60) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important; + color: #fff; +} +.description-block .description-icon { + font-size: 16px; +} +.no-pad-top { + padding-top: 0; +} +.position-static { + position: static !important; +} +.list-header { + font-size: 15px; + padding: 10px 4px; + font-weight: bold; + color: #666; +} +.list-seperator { + height: 1px; + background: #f4f4f4; + margin: 15px 0 9px 0; +} +.list-link > a { + padding: 4px; + color: #777; +} +.list-link > a:hover { + color: #222; +} +.font-light { + font-weight: 300; +} +.user-block:before, +.user-block:after { + content: " "; + display: table; +} +.user-block:after { + clear: both; +} +.user-block img { + width: 40px; + height: 40px; + float: left; +} +.user-block .username, +.user-block .description, +.user-block .comment { + display: block; + margin-left: 50px; +} +.user-block .username { + font-size: 16px; + font-weight: 600; +} +.user-block .description { + color: #999; + font-size: 13px; +} +.user-block.user-block-sm .username, +.user-block.user-block-sm .description, +.user-block.user-block-sm .comment { + margin-left: 40px; +} +.user-block.user-block-sm .username { + font-size: 14px; +} +.img-sm, +.img-md, +.img-lg, +.box-comments .box-comment img, +.user-block.user-block-sm img { + float: left; +} +.img-sm, +.box-comments .box-comment img, +.user-block.user-block-sm img { + width: 30px !important; + height: 30px !important; +} +.img-sm + .img-push { + margin-left: 40px; +} +.img-md { + width: 60px; + height: 60px; +} +.img-md + .img-push { + margin-left: 70px; +} +.img-lg { + width: 100px; + height: 100px; +} +.img-lg + .img-push { + margin-left: 110px; +} +.img-bordered { + border: 3px solid #d2d6de; + padding: 3px; +} +.img-bordered-sm { + border: 2px solid #d2d6de; + padding: 2px; +} +.attachment-block { + border: 1px solid #f4f4f4; + padding: 5px; + margin-bottom: 10px; + background: #f7f7f7; +} +.attachment-block .attachment-img { + max-width: 100px; + max-height: 100px; + height: auto; + float: left; +} +.attachment-block .attachment-pushed { + margin-left: 110px; +} +.attachment-block .attachment-heading { + margin: 0; +} +.attachment-block .attachment-text { + color: #555; +} +.connectedSortable { + min-height: 100px; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.sort-highlight { + background: #f4f4f4; + border: 1px dashed #ddd; + margin-bottom: 10px; +} +.full-opacity-hover { + opacity: 0.65; + filter: alpha(opacity=65); +} +.full-opacity-hover:hover { + opacity: 1; + filter: alpha(opacity=100); +} +.chart { + position: relative; + overflow: hidden; + width: 100%; +} +.chart svg, +.chart canvas { + width: 100% !important; +} +/* + * Misc: print + * ----------- + */ +@media print { + .no-print, + .main-sidebar, + .left-side, + .main-header, + .content-header { + display: none !important; + } + .content-wrapper, + .right-side, + .main-footer { + margin-left: 0 !important; + min-height: 0 !important; + -webkit-transform: translate(0, 0) !important; + -ms-transform: translate(0, 0) !important; + -o-transform: translate(0, 0) !important; + transform: translate(0, 0) !important; + } + .fixed .content-wrapper, + .fixed .right-side { + padding-top: 0 !important; + } + .invoice { + width: 100%; + border: 0; + margin: 0; + padding: 0; + } + .invoice-col { + float: left; + width: 33.3333333%; + } + .table-responsive { + overflow: auto; + } + .table-responsive > .table tr th, + .table-responsive > .table tr td { + white-space: normal !important; + } +} diff --git a/web/static/dist/css/AdminLTE.min.css b/web/static/dist/css/AdminLTE.min.css new file mode 100644 index 0000000..78ff989 --- /dev/null +++ b/web/static/dist/css/AdminLTE.min.css @@ -0,0 +1,6 @@ + * AdminLTE v2.3.2 + * Author: Almsaeed Studio + * Website: Almsaeed Studio + * License: Open source - MIT + * Please visit http://opensource.org/licenses/MIT for more information +!*/html,body{min-height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{min-height:100%;position:relative;overflow:hidden}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background:url('../img/boxed-bg.jpg') repeat fixed}.content-wrapper,.right-side,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,margin .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .right-side,.layout-top-nav .main-footer{margin-left:0}@media (max-width:767px){.content-wrapper,.right-side,.main-footer{margin-left:0}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .right-side,.sidebar-collapse .main-footer{margin-left:0}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .right-side,.sidebar-open .main-footer{-webkit-transform:translate(230px, 0);-ms-transform:translate(230px, 0);-o-transform:translate(230px, 0);transform:translate(230px, 0)}}.content-wrapper,.right-side{min-height:100%;background-color:#ecf0f5;z-index:800}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}body.hold-transition .content-wrapper,body.hold-transition .right-side,body.hold-transition .main-footer,body.hold-transition .main-sidebar,body.hold-transition .left-side,body.hold-transition .main-header>.navbar,body.hold-transition .main-header .logo{-webkit-transition:none;-o-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header>.navbar{-webkit-transition:margin-left .3s ease-in-out;-o-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0}.layout-top-nav .main-header>.navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media (max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\f0c9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-mini{display:none}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\00a0'}@media (max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media (max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media (max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar,.left-side{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,width .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out}@media (max-width:767px){.main-sidebar,.left-side{padding-top:100px}}@media (max-width:767px){.main-sidebar,.left-side{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (min-width:768px){.sidebar-collapse .main-sidebar,.sidebar-collapse .left-side{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (max-width:767px){.sidebar-open .main-sidebar,.sidebar-open .left-side{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-top:3px;margin-right:5px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;margin-top:3px}.sidebar-menu li.active>a>.fa-angle-left{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu li.active>.treeview-menu{display:block}.sidebar-menu .treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.sidebar-menu .treeview-menu .treeview-menu{padding-left:20px}.sidebar-menu .treeview-menu>li{margin:0}.sidebar-menu .treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.sidebar-menu .treeview-menu>li>a>.fa,.sidebar-menu .treeview-menu>li>a>.glyphicon,.sidebar-menu .treeview-menu>li>a>.ion{width:20px}.sidebar-menu .treeview-menu>li>a>.fa-angle-left,.sidebar-menu .treeview-menu>li>a>.fa-angle-down{width:auto}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);width:50px !important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini.sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block !important;position:absolute;width:180px;left:50px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini.sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;-o-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media (max-width:768px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a{border-radius:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:none;border-right:none;border-bottom:none}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.dropdown-menu>li>a>.glyphicon,.dropdown-menu>li>a>.fa,.dropdown-menu>li>a>.ion{margin-right:10px}.dropdown-menu>li>a:hover{background-color:#e1e3e9;color:#333}.dropdown-menu>.divider{background-color:#eee}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center}@media (max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff !important;color:#444 !important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444 !important}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff !important;color:#444 !important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666666}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media (max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{backface-visibility:visible !important;-webkit-animation:flipInX .7s both;-o-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{border-radius:0;box-shadow:none;border-color:#d2d6de}.form-control:focus{border-color:#3c8dbc;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control{border-color:#00a65a;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control{border-color:#f39c12;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control{border-color:#dd4b39;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;-o-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media (max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#d2d6de}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:none}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #d2d6de}.box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:0.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:none}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{position:absolute;right:10px;top:5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media (max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#d2d6de !important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress,.info-box .progress .progress-bar{border-radius:0}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:3px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:none}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-radius:0;border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li>a{color:#444;border-radius:0}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none !important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0 !important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#d2d6de;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-messages{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;-moz-transition:-moz-transform .5s ease-in-out;-o-transition:-o-transform .5s ease-in-out;transition:transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-contacts{-webkit-transform:translate(101%, 0);-ms-transform:translate(101%, 0);-o-transform:translate(101%, 0);transform:translate(101%, 0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:none}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:none;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#d2d6de}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{background:#d2d6de}.login-box,.register-box{width:360px;margin:7% auto}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media (max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media (max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media (max-width:991px){.error-page>.error-content>h3{text-align:center}}.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:none;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;-moz-transition:-moz-transform linear .3s;-o-transition:-o-transform linear .3s;transition:transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;-o-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none;border:1px solid #3c8dbc}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important}.bg-gray{color:#000;background-color:#d2d6de !important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111 !important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39 !important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12 !important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef !important}.bg-blue{background-color:#0073b7 !important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc !important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a !important}.bg-navy{background-color:#001f3f !important}.bg-teal{background-color:#39cccc !important}.bg-olive{background-color:#3d9970 !important}.bg-lime{background-color:#01ff70 !important}.bg-orange{background-color:#ff851b !important}.bg-fuchsia{background-color:#f012be !important}.bg-purple{background-color:#605ca8 !important}.bg-maroon{background-color:#d81b60 !important}.bg-gray-active{color:#000;background-color:#b5bbc8 !important}.bg-black-active{background-color:#000 !important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724 !important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0 !important}.bg-blue-active{background-color:#005384 !important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c !important}.bg-navy-active{background-color:#001a35 !important}.bg-teal-active{background-color:#30bbbb !important}.bg-olive-active{background-color:#368763 !important}.bg-lime-active{background-color:#00e765 !important}.bg-orange-active{background-color:#ff7701 !important}.bg-fuchsia-active{background-color:#db0ead !important}.bg-purple-active{background-color:#555299 !important}.bg-maroon-active{background-color:#ca195a !important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39 !important}.text-yellow{color:#f39c12 !important}.text-aqua{color:#00c0ef !important}.text-blue{color:#0073b7 !important}.text-black{color:#111 !important}.text-light-blue{color:#3c8dbc !important}.text-green{color:#00a65a !important}.text-gray{color:#d2d6de !important}.text-navy{color:#001f3f !important}.text-teal{color:#39cccc !important}.text-olive{color:#3d9970 !important}.text-lime{color:#01ff70 !important}.text-orange{color:#ff851b !important}.text-fuchsia{color:#f012be !important}.text-purple{color:#605ca8 !important}.text-maroon{color:#d81b60 !important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none !important}.no-border{border:0 !important}.no-padding{padding:0 !important}.no-margin{margin:0 !important}.no-shadow{box-shadow:none !important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.flat{border-radius:0 !important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px !important;width:auto !important;height:auto !important}.bg-teal-gradient{background:#39cccc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;background:-ms-linear-gradient(bottom, #39cccc, #7adddd) !important;background:-moz-linear-gradient(center bottom, #39cccc 0, #7adddd 100%) !important;background:-o-linear-gradient(#7adddd, #39cccc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;background:-ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;background:-moz-linear-gradient(center bottom, #3c8dbc 0, #67a8ce 100%) !important;background:-o-linear-gradient(#67a8ce, #3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;color:#fff}.bg-blue-gradient{background:#0073b7 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;background:-ms-linear-gradient(bottom, #0073b7, #0089db) !important;background:-moz-linear-gradient(center bottom, #0073b7 0, #0089db 100%) !important;background:-o-linear-gradient(#0089db, #0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;color:#fff}.bg-aqua-gradient{background:#00c0ef !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;background:-ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;background:-moz-linear-gradient(center bottom, #00c0ef 0, #14d1ff 100%) !important;background:-o-linear-gradient(#14d1ff, #00c0ef) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;color:#fff}.bg-yellow-gradient{background:#f39c12 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;background:-ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;background:-moz-linear-gradient(center bottom, #f39c12 0, #f7bc60 100%) !important;background:-o-linear-gradient(#f7bc60, #f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;color:#fff}.bg-purple-gradient{background:#605ca8 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;background:-ms-linear-gradient(bottom, #605ca8, #9491c4) !important;background:-moz-linear-gradient(center bottom, #605ca8 0, #9491c4 100%) !important;background:-o-linear-gradient(#9491c4, #605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;color:#fff}.bg-green-gradient{background:#00a65a !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;background:-ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;background:-moz-linear-gradient(center bottom, #00a65a 0, #00ca6d 100%) !important;background:-o-linear-gradient(#00ca6d, #00a65a) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;color:#fff}.bg-red-gradient{background:#dd4b39 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;background:-ms-linear-gradient(bottom, #dd4b39, #e47365) !important;background:-moz-linear-gradient(center bottom, #dd4b39 0, #e47365 100%) !important;background:-o-linear-gradient(#e47365, #dd4b39) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;color:#fff}.bg-black-gradient{background:#111 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #111), color-stop(1, #2b2b2b)) !important;background:-ms-linear-gradient(bottom, #111, #2b2b2b) !important;background:-moz-linear-gradient(center bottom, #111 0, #2b2b2b 100%) !important;background:-o-linear-gradient(#2b2b2b, #111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;color:#fff}.bg-maroon-gradient{background:#d81b60 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;background:-ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;background:-moz-linear-gradient(center bottom, #d81b60 0, #e73f7c 100%) !important;background:-o-linear-gradient(#e73f7c, #d81b60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static !important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px}.img-bordered{border:3px solid #d2d6de;padding:3px}.img-bordered-sm{border:2px solid #d2d6de;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100% !important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0, 0) !important;-ms-transform:translate(0, 0) !important;-o-transform:translate(0, 0) !important;transform:translate(0, 0) !important}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal !important}} diff --git a/web/static/dist/css/flotconfig.css b/web/static/dist/css/flotconfig.css new file mode 100644 index 0000000..0d50f8e --- /dev/null +++ b/web/static/dist/css/flotconfig.css @@ -0,0 +1,65 @@ +/* FLOT CHART */ +.flot-chart { + display: block; + height: 200px; +} +.widget .flot-chart.dashboard-chart { + display: block; + height: 120px; + margin-top: 40px; +} +.flot-chart.dashboard-chart { + display: block; + height: 180px; + margin-top: 40px; +} +.flot-chart-content { + width: 100%; + height: 100%; +} +.flot-chart-pie-content { + width: 200px; + height: 200px; + margin: auto; +} +.jqstooltip { + position: absolute; + display: block; + left: 0px; + top: 0px; + visibility: hidden; + background: #2b303a; + background-color: rgba(43, 48, 58, 0.8); + color: white; + text-align: left; + white-space: nowrap; + z-index: 10000; + padding: 5px 5px 5px 5px; + min-height: 22px; + border-radius: 3px; +} +.jqsfield { + color: white; + text-align: left; +} +.h-200 { + min-height: 200px; +} +.legendLabel { + padding-left: 5px; +} +.stat-list li:first-child { + margin-top: 0; +} +.stat-list { + list-style: none; + padding: 0; + margin: 0; +} +.stat-percent { + float: right; +} +.stat-list li { + margin-top: 15px; + position: relative; +} diff --git a/web/static/dist/css/modalconfig.css b/web/static/dist/css/modalconfig.css new file mode 100644 index 0000000..57a033f --- /dev/null +++ b/web/static/dist/css/modalconfig.css @@ -0,0 +1,39 @@ +/* MODAL */ +.modal-content { + background-clip: padding-box; + background-color: #FFFFFF; + border: 1px solid rgba(0, 0, 0, 0); + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + outline: 0 none; + position: relative; +} +.modal-dialog { + z-index: 2200; +} +.modal-body { + padding: 20px 30px 30px 30px; +} +.inmodal .modal-body { + background: #f8fafb; +} +.inmodal .modal-header { + padding: 30px 15px; + text-align: center; +} +.animated.modal.fade .modal-dialog { + -webkit-transform: none; + -ms-transform: none; + -o-transform: none; + transform: none; +} +.inmodal .modal-title { + font-size: 26px; +} +.inmodal .modal-icon { + font-size: 84px; + color: #e2e3e3; +} +.modal-footer { + margin-top: 0; +} diff --git a/web/static/dist/css/skins/_all-skins.css b/web/static/dist/css/skins/_all-skins.css new file mode 100644 index 0000000..ed24088 --- /dev/null +++ b/web/static/dist/css/skins/_all-skins.css @@ -0,0 +1,1806 @@ +/* + * Skin: Blue + * ---------- + */ +.skin-blue .main-header .navbar { + background-color: #3c8dbc; +} +.skin-blue .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-blue .main-header .navbar .nav > li > a:hover, +.skin-blue .main-header .navbar .nav > li > a:active, +.skin-blue .main-header .navbar .nav > li > a:focus, +.skin-blue .main-header .navbar .nav .open > a, +.skin-blue .main-header .navbar .nav .open > a:hover, +.skin-blue .main-header .navbar .nav .open > a:focus, +.skin-blue .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-blue .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-blue .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-blue .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-blue .main-header .navbar .sidebar-toggle:hover { + background-color: #367fa9; +} +@media (max-width: 767px) { + .skin-blue .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-blue .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-blue .main-header .navbar .dropdown-menu li a:hover { + background: #367fa9; + } +} +.skin-blue .main-header .logo { + background-color: #367fa9; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue .main-header .logo:hover { + background-color: #357ca5; +} +.skin-blue .main-header li.user-header { + background-color: #3c8dbc; +} +.skin-blue .content-header { + background: transparent; +} +.skin-blue .wrapper, +.skin-blue .main-sidebar, +.skin-blue .left-side { + background-color: #222d32; +} +.skin-blue .user-panel > .info, +.skin-blue .user-panel > .info > a { + color: #fff; +} +.skin-blue .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-blue .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-blue .sidebar-menu > li:hover > a, +.skin-blue .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #3c8dbc; +} +.skin-blue .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-blue .sidebar a { + color: #b8c7ce; +} +.skin-blue .sidebar a:hover { + text-decoration: none; +} +.skin-blue .treeview-menu > li > a { + color: #8aa4af; +} +.skin-blue .treeview-menu > li.active > a, +.skin-blue .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-blue .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-blue .sidebar-form input[type="text"], +.skin-blue .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-blue .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-blue .sidebar-form input[type="text"]:focus, +.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-blue .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +.skin-blue.layout-top-nav .main-header > .logo { + background-color: #3c8dbc; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue.layout-top-nav .main-header > .logo:hover { + background-color: #3b8ab8; +} +/* + * Skin: Blue + * ---------- + */ +.skin-blue-light .main-header .navbar { + background-color: #3c8dbc; +} +.skin-blue-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-blue-light .main-header .navbar .nav > li > a:hover, +.skin-blue-light .main-header .navbar .nav > li > a:active, +.skin-blue-light .main-header .navbar .nav > li > a:focus, +.skin-blue-light .main-header .navbar .nav .open > a, +.skin-blue-light .main-header .navbar .nav .open > a:hover, +.skin-blue-light .main-header .navbar .nav .open > a:focus, +.skin-blue-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-blue-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-blue-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-blue-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-blue-light .main-header .navbar .sidebar-toggle:hover { + background-color: #367fa9; +} +@media (max-width: 767px) { + .skin-blue-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-blue-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-blue-light .main-header .navbar .dropdown-menu li a:hover { + background: #367fa9; + } +} +.skin-blue-light .main-header .logo { + background-color: #3c8dbc; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue-light .main-header .logo:hover { + background-color: #3b8ab8; +} +.skin-blue-light .main-header li.user-header { + background-color: #3c8dbc; +} +.skin-blue-light .content-header { + background: transparent; +} +.skin-blue-light .wrapper, +.skin-blue-light .main-sidebar, +.skin-blue-light .left-side { + background-color: #f9fafc; +} +.skin-blue-light .content-wrapper, +.skin-blue-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-blue-light .user-panel > .info, +.skin-blue-light .user-panel > .info > a { + color: #444444; +} +.skin-blue-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-blue-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-blue-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-blue-light .sidebar-menu > li:hover > a, +.skin-blue-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-blue-light .sidebar-menu > li.active { + border-left-color: #3c8dbc; +} +.skin-blue-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-blue-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-blue-light .sidebar a { + color: #444444; +} +.skin-blue-light .sidebar a:hover { + text-decoration: none; +} +.skin-blue-light .treeview-menu > li > a { + color: #777777; +} +.skin-blue-light .treeview-menu > li.active > a, +.skin-blue-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-blue-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-blue-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-blue-light .sidebar-form input[type="text"], +.skin-blue-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-blue-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-blue-light .sidebar-form input[type="text"]:focus, +.skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-blue-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +.skin-blue-light .main-footer { + border-top-color: #d2d6de; +} +.skin-blue.layout-top-nav .main-header > .logo { + background-color: #3c8dbc; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue.layout-top-nav .main-header > .logo:hover { + background-color: #3b8ab8; +} +/* + * Skin: Black + * ----------- + */ +/* skin-black navbar */ +.skin-black .main-header { + -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); +} +.skin-black .main-header .navbar-toggle { + color: #333; +} +.skin-black .main-header .navbar-brand { + color: #333; + border-right: 1px solid #eee; +} +.skin-black .main-header > .navbar { + background-color: #ffffff; +} +.skin-black .main-header > .navbar .nav > li > a { + color: #333333; +} +.skin-black .main-header > .navbar .nav > li > a:hover, +.skin-black .main-header > .navbar .nav > li > a:active, +.skin-black .main-header > .navbar .nav > li > a:focus, +.skin-black .main-header > .navbar .nav .open > a, +.skin-black .main-header > .navbar .nav .open > a:hover, +.skin-black .main-header > .navbar .nav .open > a:focus, +.skin-black .main-header > .navbar .nav > .active > a { + background: #ffffff; + color: #999999; +} +.skin-black .main-header > .navbar .sidebar-toggle { + color: #333333; +} +.skin-black .main-header > .navbar .sidebar-toggle:hover { + color: #999999; + background: #ffffff; +} +.skin-black .main-header > .navbar > .sidebar-toggle { + color: #333; + border-right: 1px solid #eee; +} +.skin-black .main-header > .navbar .navbar-nav > li > a { + border-right: 1px solid #eee; +} +.skin-black .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a, +.skin-black .main-header > .navbar .navbar-right > li > a { + border-left: 1px solid #eee; + border-right-width: 0; +} +.skin-black .main-header > .logo { + background-color: #ffffff; + color: #333333; + border-bottom: 0 solid transparent; + border-right: 1px solid #eee; +} +.skin-black .main-header > .logo:hover { + background-color: #fcfcfc; +} +@media (max-width: 767px) { + .skin-black .main-header > .logo { + background-color: #222222; + color: #ffffff; + border-bottom: 0 solid transparent; + border-right: none; + } + .skin-black .main-header > .logo:hover { + background-color: #1f1f1f; + } +} +.skin-black .main-header li.user-header { + background-color: #222; +} +.skin-black .content-header { + background: transparent; + box-shadow: none; +} +.skin-black .wrapper, +.skin-black .main-sidebar, +.skin-black .left-side { + background-color: #222d32; +} +.skin-black .user-panel > .info, +.skin-black .user-panel > .info > a { + color: #fff; +} +.skin-black .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-black .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-black .sidebar-menu > li:hover > a, +.skin-black .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #ffffff; +} +.skin-black .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-black .sidebar a { + color: #b8c7ce; +} +.skin-black .sidebar a:hover { + text-decoration: none; +} +.skin-black .treeview-menu > li > a { + color: #8aa4af; +} +.skin-black .treeview-menu > li.active > a, +.skin-black .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-black .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-black .sidebar-form input[type="text"], +.skin-black .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-black .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-black .sidebar-form input[type="text"]:focus, +.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-black .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +.skin-black .pace .pace-progress { + background: #222; +} +.skin-black .pace .pace-activity { + border-top-color: #222; + border-left-color: #222; +} +/* + * Skin: Black + * ----------- + */ +/* skin-black navbar */ +.skin-black-light .main-header { + -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); +} +.skin-black-light .main-header .navbar-toggle { + color: #333; +} +.skin-black-light .main-header .navbar-brand { + color: #333; + border-right: 1px solid #eee; +} +.skin-black-light .main-header > .navbar { + background-color: #ffffff; +} +.skin-black-light .main-header > .navbar .nav > li > a { + color: #333333; +} +.skin-black-light .main-header > .navbar .nav > li > a:hover, +.skin-black-light .main-header > .navbar .nav > li > a:active, +.skin-black-light .main-header > .navbar .nav > li > a:focus, +.skin-black-light .main-header > .navbar .nav .open > a, +.skin-black-light .main-header > .navbar .nav .open > a:hover, +.skin-black-light .main-header > .navbar .nav .open > a:focus, +.skin-black-light .main-header > .navbar .nav > .active > a { + background: #ffffff; + color: #999999; +} +.skin-black-light .main-header > .navbar .sidebar-toggle { + color: #333333; +} +.skin-black-light .main-header > .navbar .sidebar-toggle:hover { + color: #999999; + background: #ffffff; +} +.skin-black-light .main-header > .navbar > .sidebar-toggle { + color: #333; + border-right: 1px solid #eee; +} +.skin-black-light .main-header > .navbar .navbar-nav > li > a { + border-right: 1px solid #eee; +} +.skin-black-light .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a, +.skin-black-light .main-header > .navbar .navbar-right > li > a { + border-left: 1px solid #eee; + border-right-width: 0; +} +.skin-black-light .main-header > .logo { + background-color: #ffffff; + color: #333333; + border-bottom: 0 solid transparent; + border-right: 1px solid #eee; +} +.skin-black-light .main-header > .logo:hover { + background-color: #fcfcfc; +} +@media (max-width: 767px) { + .skin-black-light .main-header > .logo { + background-color: #222222; + color: #ffffff; + border-bottom: 0 solid transparent; + border-right: none; + } + .skin-black-light .main-header > .logo:hover { + background-color: #1f1f1f; + } +} +.skin-black-light .main-header li.user-header { + background-color: #222; +} +.skin-black-light .content-header { + background: transparent; + box-shadow: none; +} +.skin-black-light .wrapper, +.skin-black-light .main-sidebar, +.skin-black-light .left-side { + background-color: #f9fafc; +} +.skin-black-light .content-wrapper, +.skin-black-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-black-light .user-panel > .info, +.skin-black-light .user-panel > .info > a { + color: #444444; +} +.skin-black-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-black-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-black-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-black-light .sidebar-menu > li:hover > a, +.skin-black-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-black-light .sidebar-menu > li.active { + border-left-color: #ffffff; +} +.skin-black-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-black-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-black-light .sidebar a { + color: #444444; +} +.skin-black-light .sidebar a:hover { + text-decoration: none; +} +.skin-black-light .treeview-menu > li > a { + color: #777777; +} +.skin-black-light .treeview-menu > li.active > a, +.skin-black-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-black-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-black-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-black-light .sidebar-form input[type="text"], +.skin-black-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-black-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-black-light .sidebar-form input[type="text"]:focus, +.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-black-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +/* + * Skin: Green + * ----------- + */ +.skin-green .main-header .navbar { + background-color: #00a65a; +} +.skin-green .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-green .main-header .navbar .nav > li > a:hover, +.skin-green .main-header .navbar .nav > li > a:active, +.skin-green .main-header .navbar .nav > li > a:focus, +.skin-green .main-header .navbar .nav .open > a, +.skin-green .main-header .navbar .nav .open > a:hover, +.skin-green .main-header .navbar .nav .open > a:focus, +.skin-green .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-green .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-green .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-green .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-green .main-header .navbar .sidebar-toggle:hover { + background-color: #008d4c; +} +@media (max-width: 767px) { + .skin-green .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-green .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-green .main-header .navbar .dropdown-menu li a:hover { + background: #008d4c; + } +} +.skin-green .main-header .logo { + background-color: #008d4c; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-green .main-header .logo:hover { + background-color: #008749; +} +.skin-green .main-header li.user-header { + background-color: #00a65a; +} +.skin-green .content-header { + background: transparent; +} +.skin-green .wrapper, +.skin-green .main-sidebar, +.skin-green .left-side { + background-color: #222d32; +} +.skin-green .user-panel > .info, +.skin-green .user-panel > .info > a { + color: #fff; +} +.skin-green .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-green .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-green .sidebar-menu > li:hover > a, +.skin-green .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #00a65a; +} +.skin-green .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-green .sidebar a { + color: #b8c7ce; +} +.skin-green .sidebar a:hover { + text-decoration: none; +} +.skin-green .treeview-menu > li > a { + color: #8aa4af; +} +.skin-green .treeview-menu > li.active > a, +.skin-green .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-green .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-green .sidebar-form input[type="text"], +.skin-green .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-green .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-green .sidebar-form input[type="text"]:focus, +.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-green .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +/* + * Skin: Green + * ----------- + */ +.skin-green-light .main-header .navbar { + background-color: #00a65a; +} +.skin-green-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-green-light .main-header .navbar .nav > li > a:hover, +.skin-green-light .main-header .navbar .nav > li > a:active, +.skin-green-light .main-header .navbar .nav > li > a:focus, +.skin-green-light .main-header .navbar .nav .open > a, +.skin-green-light .main-header .navbar .nav .open > a:hover, +.skin-green-light .main-header .navbar .nav .open > a:focus, +.skin-green-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-green-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-green-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-green-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-green-light .main-header .navbar .sidebar-toggle:hover { + background-color: #008d4c; +} +@media (max-width: 767px) { + .skin-green-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-green-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-green-light .main-header .navbar .dropdown-menu li a:hover { + background: #008d4c; + } +} +.skin-green-light .main-header .logo { + background-color: #00a65a; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-green-light .main-header .logo:hover { + background-color: #00a157; +} +.skin-green-light .main-header li.user-header { + background-color: #00a65a; +} +.skin-green-light .content-header { + background: transparent; +} +.skin-green-light .wrapper, +.skin-green-light .main-sidebar, +.skin-green-light .left-side { + background-color: #f9fafc; +} +.skin-green-light .content-wrapper, +.skin-green-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-green-light .user-panel > .info, +.skin-green-light .user-panel > .info > a { + color: #444444; +} +.skin-green-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-green-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-green-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-green-light .sidebar-menu > li:hover > a, +.skin-green-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-green-light .sidebar-menu > li.active { + border-left-color: #00a65a; +} +.skin-green-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-green-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-green-light .sidebar a { + color: #444444; +} +.skin-green-light .sidebar a:hover { + text-decoration: none; +} +.skin-green-light .treeview-menu > li > a { + color: #777777; +} +.skin-green-light .treeview-menu > li.active > a, +.skin-green-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-green-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-green-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-green-light .sidebar-form input[type="text"], +.skin-green-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-green-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-green-light .sidebar-form input[type="text"]:focus, +.skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-green-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +/* + * Skin: Red + * --------- + */ +.skin-red .main-header .navbar { + background-color: #dd4b39; +} +.skin-red .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-red .main-header .navbar .nav > li > a:hover, +.skin-red .main-header .navbar .nav > li > a:active, +.skin-red .main-header .navbar .nav > li > a:focus, +.skin-red .main-header .navbar .nav .open > a, +.skin-red .main-header .navbar .nav .open > a:hover, +.skin-red .main-header .navbar .nav .open > a:focus, +.skin-red .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-red .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-red .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-red .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-red .main-header .navbar .sidebar-toggle:hover { + background-color: #d73925; +} +@media (max-width: 767px) { + .skin-red .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-red .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-red .main-header .navbar .dropdown-menu li a:hover { + background: #d73925; + } +} +.skin-red .main-header .logo { + background-color: #d73925; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-red .main-header .logo:hover { + background-color: #d33724; +} +.skin-red .main-header li.user-header { + background-color: #dd4b39; +} +.skin-red .content-header { + background: transparent; +} +.skin-red .wrapper, +.skin-red .main-sidebar, +.skin-red .left-side { + background-color: #222d32; +} +.skin-red .user-panel > .info, +.skin-red .user-panel > .info > a { + color: #fff; +} +.skin-red .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-red .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-red .sidebar-menu > li:hover > a, +.skin-red .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #dd4b39; +} +.skin-red .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-red .sidebar a { + color: #b8c7ce; +} +.skin-red .sidebar a:hover { + text-decoration: none; +} +.skin-red .treeview-menu > li > a { + color: #8aa4af; +} +.skin-red .treeview-menu > li.active > a, +.skin-red .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-red .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-red .sidebar-form input[type="text"], +.skin-red .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-red .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-red .sidebar-form input[type="text"]:focus, +.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-red .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +/* + * Skin: Red + * --------- + */ +.skin-red-light .main-header .navbar { + background-color: #dd4b39; +} +.skin-red-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-red-light .main-header .navbar .nav > li > a:hover, +.skin-red-light .main-header .navbar .nav > li > a:active, +.skin-red-light .main-header .navbar .nav > li > a:focus, +.skin-red-light .main-header .navbar .nav .open > a, +.skin-red-light .main-header .navbar .nav .open > a:hover, +.skin-red-light .main-header .navbar .nav .open > a:focus, +.skin-red-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-red-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-red-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-red-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-red-light .main-header .navbar .sidebar-toggle:hover { + background-color: #d73925; +} +@media (max-width: 767px) { + .skin-red-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-red-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-red-light .main-header .navbar .dropdown-menu li a:hover { + background: #d73925; + } +} +.skin-red-light .main-header .logo { + background-color: #dd4b39; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-red-light .main-header .logo:hover { + background-color: #dc4735; +} +.skin-red-light .main-header li.user-header { + background-color: #dd4b39; +} +.skin-red-light .content-header { + background: transparent; +} +.skin-red-light .wrapper, +.skin-red-light .main-sidebar, +.skin-red-light .left-side { + background-color: #f9fafc; +} +.skin-red-light .content-wrapper, +.skin-red-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-red-light .user-panel > .info, +.skin-red-light .user-panel > .info > a { + color: #444444; +} +.skin-red-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-red-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-red-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-red-light .sidebar-menu > li:hover > a, +.skin-red-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-red-light .sidebar-menu > li.active { + border-left-color: #dd4b39; +} +.skin-red-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-red-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-red-light .sidebar a { + color: #444444; +} +.skin-red-light .sidebar a:hover { + text-decoration: none; +} +.skin-red-light .treeview-menu > li > a { + color: #777777; +} +.skin-red-light .treeview-menu > li.active > a, +.skin-red-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-red-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-red-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-red-light .sidebar-form input[type="text"], +.skin-red-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-red-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-red-light .sidebar-form input[type="text"]:focus, +.skin-red-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-red-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-red-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +/* + * Skin: Yellow + * ------------ + */ +.skin-yellow .main-header .navbar { + background-color: #f39c12; +} +.skin-yellow .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-yellow .main-header .navbar .nav > li > a:hover, +.skin-yellow .main-header .navbar .nav > li > a:active, +.skin-yellow .main-header .navbar .nav > li > a:focus, +.skin-yellow .main-header .navbar .nav .open > a, +.skin-yellow .main-header .navbar .nav .open > a:hover, +.skin-yellow .main-header .navbar .nav .open > a:focus, +.skin-yellow .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-yellow .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-yellow .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-yellow .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-yellow .main-header .navbar .sidebar-toggle:hover { + background-color: #e08e0b; +} +@media (max-width: 767px) { + .skin-yellow .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-yellow .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-yellow .main-header .navbar .dropdown-menu li a:hover { + background: #e08e0b; + } +} +.skin-yellow .main-header .logo { + background-color: #e08e0b; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-yellow .main-header .logo:hover { + background-color: #db8b0b; +} +.skin-yellow .main-header li.user-header { + background-color: #f39c12; +} +.skin-yellow .content-header { + background: transparent; +} +.skin-yellow .wrapper, +.skin-yellow .main-sidebar, +.skin-yellow .left-side { + background-color: #222d32; +} +.skin-yellow .user-panel > .info, +.skin-yellow .user-panel > .info > a { + color: #fff; +} +.skin-yellow .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-yellow .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-yellow .sidebar-menu > li:hover > a, +.skin-yellow .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #f39c12; +} +.skin-yellow .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-yellow .sidebar a { + color: #b8c7ce; +} +.skin-yellow .sidebar a:hover { + text-decoration: none; +} +.skin-yellow .treeview-menu > li > a { + color: #8aa4af; +} +.skin-yellow .treeview-menu > li.active > a, +.skin-yellow .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-yellow .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-yellow .sidebar-form input[type="text"], +.skin-yellow .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-yellow .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-yellow .sidebar-form input[type="text"]:focus, +.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-yellow .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +/* + * Skin: Yellow + * ------------ + */ +.skin-yellow-light .main-header .navbar { + background-color: #f39c12; +} +.skin-yellow-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-yellow-light .main-header .navbar .nav > li > a:hover, +.skin-yellow-light .main-header .navbar .nav > li > a:active, +.skin-yellow-light .main-header .navbar .nav > li > a:focus, +.skin-yellow-light .main-header .navbar .nav .open > a, +.skin-yellow-light .main-header .navbar .nav .open > a:hover, +.skin-yellow-light .main-header .navbar .nav .open > a:focus, +.skin-yellow-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-yellow-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-yellow-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-yellow-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-yellow-light .main-header .navbar .sidebar-toggle:hover { + background-color: #e08e0b; +} +@media (max-width: 767px) { + .skin-yellow-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-yellow-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-yellow-light .main-header .navbar .dropdown-menu li a:hover { + background: #e08e0b; + } +} +.skin-yellow-light .main-header .logo { + background-color: #f39c12; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-yellow-light .main-header .logo:hover { + background-color: #f39a0d; +} +.skin-yellow-light .main-header li.user-header { + background-color: #f39c12; +} +.skin-yellow-light .content-header { + background: transparent; +} +.skin-yellow-light .wrapper, +.skin-yellow-light .main-sidebar, +.skin-yellow-light .left-side { + background-color: #f9fafc; +} +.skin-yellow-light .content-wrapper, +.skin-yellow-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-yellow-light .user-panel > .info, +.skin-yellow-light .user-panel > .info > a { + color: #444444; +} +.skin-yellow-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-yellow-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-yellow-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-yellow-light .sidebar-menu > li:hover > a, +.skin-yellow-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-yellow-light .sidebar-menu > li.active { + border-left-color: #f39c12; +} +.skin-yellow-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-yellow-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-yellow-light .sidebar a { + color: #444444; +} +.skin-yellow-light .sidebar a:hover { + text-decoration: none; +} +.skin-yellow-light .treeview-menu > li > a { + color: #777777; +} +.skin-yellow-light .treeview-menu > li.active > a, +.skin-yellow-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-yellow-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-yellow-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-yellow-light .sidebar-form input[type="text"], +.skin-yellow-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-yellow-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-yellow-light .sidebar-form input[type="text"]:focus, +.skin-yellow-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-yellow-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-yellow-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +/* + * Skin: Purple + * ------------ + */ +.skin-purple .main-header .navbar { + background-color: #605ca8; +} +.skin-purple .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-purple .main-header .navbar .nav > li > a:hover, +.skin-purple .main-header .navbar .nav > li > a:active, +.skin-purple .main-header .navbar .nav > li > a:focus, +.skin-purple .main-header .navbar .nav .open > a, +.skin-purple .main-header .navbar .nav .open > a:hover, +.skin-purple .main-header .navbar .nav .open > a:focus, +.skin-purple .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-purple .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-purple .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-purple .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-purple .main-header .navbar .sidebar-toggle:hover { + background-color: #555299; +} +@media (max-width: 767px) { + .skin-purple .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-purple .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-purple .main-header .navbar .dropdown-menu li a:hover { + background: #555299; + } +} +.skin-purple .main-header .logo { + background-color: #555299; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-purple .main-header .logo:hover { + background-color: #545096; +} +.skin-purple .main-header li.user-header { + background-color: #605ca8; +} +.skin-purple .content-header { + background: transparent; +} +.skin-purple .wrapper, +.skin-purple .main-sidebar, +.skin-purple .left-side { + background-color: #222d32; +} +.skin-purple .user-panel > .info, +.skin-purple .user-panel > .info > a { + color: #fff; +} +.skin-purple .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-purple .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-purple .sidebar-menu > li:hover > a, +.skin-purple .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #605ca8; +} +.skin-purple .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-purple .sidebar a { + color: #b8c7ce; +} +.skin-purple .sidebar a:hover { + text-decoration: none; +} +.skin-purple .treeview-menu > li > a { + color: #8aa4af; +} +.skin-purple .treeview-menu > li.active > a, +.skin-purple .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-purple .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-purple .sidebar-form input[type="text"], +.skin-purple .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-purple .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-purple .sidebar-form input[type="text"]:focus, +.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-purple .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +/* + * Skin: Purple + * ------------ + */ +.skin-purple-light .main-header .navbar { + background-color: #605ca8; +} +.skin-purple-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-purple-light .main-header .navbar .nav > li > a:hover, +.skin-purple-light .main-header .navbar .nav > li > a:active, +.skin-purple-light .main-header .navbar .nav > li > a:focus, +.skin-purple-light .main-header .navbar .nav .open > a, +.skin-purple-light .main-header .navbar .nav .open > a:hover, +.skin-purple-light .main-header .navbar .nav .open > a:focus, +.skin-purple-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-purple-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-purple-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-purple-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-purple-light .main-header .navbar .sidebar-toggle:hover { + background-color: #555299; +} +@media (max-width: 767px) { + .skin-purple-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-purple-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-purple-light .main-header .navbar .dropdown-menu li a:hover { + background: #555299; + } +} +.skin-purple-light .main-header .logo { + background-color: #605ca8; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-purple-light .main-header .logo:hover { + background-color: #5d59a6; +} +.skin-purple-light .main-header li.user-header { + background-color: #605ca8; +} +.skin-purple-light .content-header { + background: transparent; +} +.skin-purple-light .wrapper, +.skin-purple-light .main-sidebar, +.skin-purple-light .left-side { + background-color: #f9fafc; +} +.skin-purple-light .content-wrapper, +.skin-purple-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-purple-light .user-panel > .info, +.skin-purple-light .user-panel > .info > a { + color: #444444; +} +.skin-purple-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-purple-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-purple-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-purple-light .sidebar-menu > li:hover > a, +.skin-purple-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-purple-light .sidebar-menu > li.active { + border-left-color: #605ca8; +} +.skin-purple-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-purple-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-purple-light .sidebar a { + color: #444444; +} +.skin-purple-light .sidebar a:hover { + text-decoration: none; +} +.skin-purple-light .treeview-menu > li > a { + color: #777777; +} +.skin-purple-light .treeview-menu > li.active > a, +.skin-purple-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-purple-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-purple-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-purple-light .sidebar-form input[type="text"], +.skin-purple-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-purple-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-purple-light .sidebar-form input[type="text"]:focus, +.skin-purple-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-purple-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-purple-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} diff --git a/web/static/dist/css/skins/_all-skins.min.css b/web/static/dist/css/skins/_all-skins.min.css new file mode 100644 index 0000000..7b420a5 --- /dev/null +++ b/web/static/dist/css/skins/_all-skins.min.css @@ -0,0 +1 @@ +.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .content-wrapper,.skin-blue-light .main-footer{border-left:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .treeview-menu>li>a{color:#777}.skin-blue-light .treeview-menu>li.active>a,.skin-blue-light .treeview-menu>li>a:hover{color:#000}.skin-blue-light .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar{background-color:#fff}.skin-black .main-header>.navbar .nav>li>a{color:#333}.skin-black .main-header>.navbar .nav>li>a:hover,.skin-black .main-header>.navbar .nav>li>a:active,.skin-black .main-header>.navbar .nav>li>a:focus,.skin-black .main-header>.navbar .nav .open>a,.skin-black .main-header>.navbar .nav .open>a:hover,.skin-black .main-header>.navbar .nav .open>a:focus,.skin-black .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header>.navbar .sidebar-toggle{color:#333}.skin-black .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}.skin-black-light .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar{background-color:#fff}.skin-black-light .main-header>.navbar .nav>li>a{color:#333}.skin-black-light .main-header>.navbar .nav>li>a:hover,.skin-black-light .main-header>.navbar .nav>li>a:active,.skin-black-light .main-header>.navbar .nav>li>a:focus,.skin-black-light .main-header>.navbar .nav .open>a,.skin-black-light .main-header>.navbar .nav .open>a:hover,.skin-black-light .main-header>.navbar .nav .open>a:focus,.skin-black-light .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header>.navbar .sidebar-toggle{color:#333}.skin-black-light .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .content-wrapper,.skin-black-light .main-footer{border-left:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .treeview-menu>li>a{color:#777}.skin-black-light .treeview-menu>li.active>a,.skin-black-light .treeview-menu>li>a:hover{color:#000}.skin-black-light .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .content-wrapper,.skin-green-light .main-footer{border-left:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .treeview-menu>li>a{color:#777}.skin-green-light .treeview-menu>li.active>a,.skin-green-light .treeview-menu>li>a:hover{color:#000}.skin-green-light .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .treeview-menu>li>a{color:#8aa4af}.skin-red .treeview-menu>li.active>a,.skin-red .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .content-wrapper,.skin-red-light .main-footer{border-left:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .treeview-menu>li>a{color:#777}.skin-red-light .treeview-menu>li.active>a,.skin-red-light .treeview-menu>li>a:hover{color:#000}.skin-red-light .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .treeview-menu>li>a{color:#8aa4af}.skin-yellow .treeview-menu>li.active>a,.skin-yellow .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .content-wrapper,.skin-yellow-light .main-footer{border-left:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .treeview-menu>li>a{color:#777}.skin-yellow-light .treeview-menu>li.active>a,.skin-yellow-light .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .treeview-menu>li>a{color:#8aa4af}.skin-purple .treeview-menu>li.active>a,.skin-purple .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .content-wrapper,.skin-purple-light .main-footer{border-left:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .treeview-menu>li>a{color:#777}.skin-purple-light .treeview-menu>li.active>a,.skin-purple-light .treeview-menu>li>a:hover{color:#000}.skin-purple-light .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/web/static/dist/css/skins/skin-blue.css b/web/static/dist/css/skins/skin-blue.css new file mode 100644 index 0000000..1bc543f --- /dev/null +++ b/web/static/dist/css/skins/skin-blue.css @@ -0,0 +1,142 @@ +/* + * Skin: Blue + * ---------- + */ +.skin-blue .main-header .navbar { + background-color: #3c8dbc; +} +.skin-blue .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-blue .main-header .navbar .nav > li > a:hover, +.skin-blue .main-header .navbar .nav > li > a:active, +.skin-blue .main-header .navbar .nav > li > a:focus, +.skin-blue .main-header .navbar .nav .open > a, +.skin-blue .main-header .navbar .nav .open > a:hover, +.skin-blue .main-header .navbar .nav .open > a:focus, +.skin-blue .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-blue .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-blue .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-blue .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-blue .main-header .navbar .sidebar-toggle:hover { + background-color: #367fa9; +} +@media (max-width: 767px) { + .skin-blue .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-blue .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-blue .main-header .navbar .dropdown-menu li a:hover { + background: #367fa9; + } +} +.skin-blue .main-header .logo { + background-color: #367fa9; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue .main-header .logo:hover { + background-color: #357ca5; +} +.skin-blue .main-header li.user-header { + background-color: #3c8dbc; +} +.skin-blue .content-header { + background: transparent; +} +.skin-blue .wrapper, +.skin-blue .main-sidebar, +.skin-blue .left-side { + background-color: #222d32; +} +.skin-blue .user-panel > .info, +.skin-blue .user-panel > .info > a { + color: #fff; +} +.skin-blue .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-blue .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-blue .sidebar-menu > li:hover > a, +.skin-blue .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #3c8dbc; +} +.skin-blue .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-blue .sidebar a { + color: #b8c7ce; +} +.skin-blue .sidebar a:hover { + text-decoration: none; +} +.skin-blue .treeview-menu > li > a { + color: #8aa4af; +} +.skin-blue .treeview-menu > li.active > a, +.skin-blue .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-blue .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-blue .sidebar-form input[type="text"], +.skin-blue .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; + -webkit-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.skin-blue .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-blue .sidebar-form input[type="text"]:focus, +.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-blue .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +.skin-blue.layout-top-nav .main-header > .logo { + background-color: #3c8dbc; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue.layout-top-nav .main-header > .logo:hover { + background-color: #3b8ab8; +} diff --git a/web/static/dist/css/skins/skin-blue.min.css b/web/static/dist/css/skins/skin-blue.min.css new file mode 100644 index 0000000..123c04f --- /dev/null +++ b/web/static/dist/css/skins/skin-blue.min.css @@ -0,0 +1 @@ +.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8} \ No newline at end of file diff --git a/web/static/dist/js/app.js b/web/static/dist/js/app.js new file mode 100644 index 0000000..b016ffe --- /dev/null +++ b/web/static/dist/js/app.js @@ -0,0 +1,758 @@ +/*! AdminLTE app.js + * ================ + * Main JS application file for AdminLTE v2. This file + * should be included in all pages. It controls some layout + * options and implements exclusive AdminLTE plugins. + * + * @Author Almsaeed Studio + * @Support + * @Email + * @version 2.3.2 + * @license MIT + */ + +//Make sure jQuery has been loaded before app.js +if (typeof jQuery === "undefined") { + throw new Error("AdminLTE requires jQuery"); +} + +/* AdminLTE + * + * @type Object + * @description $.AdminLTE is the main object for the template's app. + * It's used for implementing functions and options related + * to the template. Keeping everything wrapped in an object + * prevents conflict with other plugins and is a better + * way to organize our code. + */ +$.AdminLTE = {}; + +/* -------------------- + * - AdminLTE Options - + * -------------------- + * Modify these options to suit your implementation + */ +$.AdminLTE.options = { + //Add slimscroll to navbar menus + //This requires you to load the slimscroll plugin + //in every page before app.js + navbarMenuSlimscroll: true, + navbarMenuSlimscrollWidth: "3px", //The width of the scroll bar + navbarMenuHeight: "200px", //The height of the inner menu + //General animation speed for JS animated elements such as box collapse/expand and + //sidebar treeview slide up/down. This options accepts an integer as milliseconds, + //'fast', 'normal', or 'slow' + animationSpeed: 500, + //Sidebar push menu toggle button selector + sidebarToggleSelector: "[data-toggle='offcanvas']", + //Activate sidebar push menu + sidebarPushMenu: true, + //Activate sidebar slimscroll if the fixed layout is set (requires SlimScroll Plugin) + sidebarSlimScroll: true, + //Enable sidebar expand on hover effect for sidebar mini + //This option is forced to true if both the fixed layout and sidebar mini + //are used together + sidebarExpandOnHover: false, + //BoxRefresh Plugin + enableBoxRefresh: true, + //Bootstrap.js tooltip + enableBSToppltip: true, + BSTooltipSelector: "[data-toggle='tooltip']", + //Enable Fast Click. Fastclick.js creates a more + //native touch experience with touch devices. If you + //choose to enable the plugin, make sure you load the script + //before AdminLTE's app.js + enableFastclick: true, + //Control Sidebar Options + enableControlSidebar: true, + controlSidebarOptions: { + //Which button should trigger the open/close event + toggleBtnSelector: "[data-toggle='control-sidebar']", + //The sidebar selector + selector: ".control-sidebar", + //Enable slide over content + slide: true + }, + //Box Widget Plugin. Enable this plugin + //to allow boxes to be collapsed and/or removed + enableBoxWidget: true, + //Box Widget plugin options + boxWidgetOptions: { + boxWidgetIcons: { + //Collapse icon + collapse: 'fa-minus', + //Open icon + open: 'fa-plus', + //Remove icon + remove: 'fa-times' + }, + boxWidgetSelectors: { + //Remove button selector + remove: '[data-widget="remove"]', + //Collapse button selector + collapse: '[data-widget="collapse"]' + } + }, + //Direct Chat plugin options + directChat: { + //Enable direct chat by default + enable: true, + //The button to open and close the chat contacts pane + contactToggleSelector: '[data-widget="chat-pane-toggle"]' + }, + //Define the set of colors to use globally around the website + colors: { + lightBlue: "#3c8dbc", + red: "#f56954", + green: "#00a65a", + aqua: "#00c0ef", + yellow: "#f39c12", + blue: "#0073b7", + navy: "#001F3F", + teal: "#39CCCC", + olive: "#3D9970", + lime: "#01FF70", + orange: "#FF851B", + fuchsia: "#F012BE", + purple: "#8E24AA", + maroon: "#D81B60", + black: "#222222", + gray: "#d2d6de" + }, + //The standard screen sizes that bootstrap uses. + //If you change these in the variables.less file, change + //them here too. + screenSizes: { + xs: 480, + sm: 768, + md: 992, + lg: 1200 + } +}; + +/* ------------------ + * - Implementation - + * ------------------ + * The next block of code implements AdminLTE's + * functions and plugins as specified by the + * options above. + */ +$(function () { + "use strict"; + + //Fix for IE page transitions + $("body").removeClass("hold-transition"); + + //Extend options if external options exist + if (typeof AdminLTEOptions !== "undefined") { + $.extend(true, + $.AdminLTE.options, + AdminLTEOptions); + } + + //Easy access to options + var o = $.AdminLTE.options; + + //Set up the object + _init(); + + //Activate the layout maker + $.AdminLTE.layout.activate(); + + //Enable sidebar tree view controls + $.AdminLTE.tree('.sidebar'); + + //Enable control sidebar + if (o.enableControlSidebar) { + $.AdminLTE.controlSidebar.activate(); + } + + //Add slimscroll to navbar dropdown + if (o.navbarMenuSlimscroll && typeof $.fn.slimscroll != 'undefined') { + $(".navbar .menu").slimscroll({ + height: o.navbarMenuHeight, + alwaysVisible: false, + size: o.navbarMenuSlimscrollWidth + }).css("width", "100%"); + } + + //Activate sidebar push menu + if (o.sidebarPushMenu) { + $.AdminLTE.pushMenu.activate(o.sidebarToggleSelector); + } + + //Activate Bootstrap tooltip + if (o.enableBSToppltip) { + $('body').tooltip({ + selector: o.BSTooltipSelector + }); + } + + //Activate box widget + if (o.enableBoxWidget) { + $.AdminLTE.boxWidget.activate(); + } + + //Activate fast click + if (o.enableFastclick && typeof FastClick != 'undefined') { + FastClick.attach(document.body); + } + + //Activate direct chat widget + if (o.directChat.enable) { + $(document).on('click', o.directChat.contactToggleSelector, function () { + var box = $(this).parents('.direct-chat').first(); + box.toggleClass('direct-chat-contacts-open'); + }); + } + + /* + * INITIALIZE BUTTON TOGGLE + * ------------------------ + */ + $('.btn-group[data-toggle="btn-toggle"]').each(function () { + var group = $(this); + $(this).find(".btn").on('click', function (e) { + group.find(".btn.active").removeClass("active"); + $(this).addClass("active"); + e.preventDefault(); + }); + + }); +}); + +/* ---------------------------------- + * - Initialize the AdminLTE Object - + * ---------------------------------- + * All AdminLTE functions are implemented below. + */ +function _init() { + 'use strict'; + /* Layout + * ====== + * Fixes the layout height in case min-height fails. + * + * @type Object + * @usage $.AdminLTE.layout.activate() + * $.AdminLTE.layout.fix() + * $.AdminLTE.layout.fixSidebar() + */ + $.AdminLTE.layout = { + activate: function () { + var _this = this; + _this.fix(); + _this.fixSidebar(); + $(window, ".wrapper").resize(function () { + _this.fix(); + _this.fixSidebar(); + }); + }, + fix: function () { + //Get window height and the wrapper height + var neg = $('.main-header').outerHeight() + $('.main-footer').outerHeight(); + var window_height = $(window).height(); + var sidebar_height = $(".sidebar").height(); + //Set the min-height of the content and sidebar based on the + //the height of the document. + if ($("body").hasClass("fixed")) { + $(".content-wrapper, .right-side").css('min-height', window_height - $('.main-footer').outerHeight()); + } else { + var postSetWidth; + if (window_height >= sidebar_height) { + $(".content-wrapper, .right-side").css('min-height', window_height - neg); + postSetWidth = window_height - neg; + } else { + $(".content-wrapper, .right-side").css('min-height', sidebar_height); + postSetWidth = sidebar_height; + } + + //Fix for the control sidebar height + var controlSidebar = $($.AdminLTE.options.controlSidebarOptions.selector); + if (typeof controlSidebar !== "undefined") { + if (controlSidebar.height() > postSetWidth) + $(".content-wrapper, .right-side").css('min-height', controlSidebar.height()); + } + + } + }, + fixSidebar: function () { + //Make sure the body tag has the .fixed class + if (!$("body").hasClass("fixed")) { + if (typeof $.fn.slimScroll != 'undefined') { + $(".sidebar").slimScroll({destroy: true}).height("auto"); + } + return; + } else if (typeof $.fn.slimScroll == 'undefined' && window.console) { + window.console.error("Error: the fixed layout requires the slimscroll plugin!"); + } + //Enable slimscroll for fixed layout + if ($.AdminLTE.options.sidebarSlimScroll) { + if (typeof $.fn.slimScroll != 'undefined') { + //Destroy if it exists + $(".sidebar").slimScroll({destroy: true}).height("auto"); + //Add slimscroll + $(".sidebar").slimscroll({ + height: ($(window).height() - $(".main-header").height()) + "px", + color: "rgba(0,0,0,0.2)", + size: "3px" + }); + } + } + } + }; + + /* PushMenu() + * ========== + * Adds the push menu functionality to the sidebar. + * + * @type Function + * @usage: $.AdminLTE.pushMenu("[data-toggle='offcanvas']") + */ + $.AdminLTE.pushMenu = { + activate: function (toggleBtn) { + //Get the screen sizes + var screenSizes = $.AdminLTE.options.screenSizes; + + //Enable sidebar toggle + $(document).on('click', toggleBtn, function (e) { + e.preventDefault(); + + //Enable sidebar push menu + if ($(window).width() > (screenSizes.sm - 1)) { + if ($("body").hasClass('sidebar-collapse')) { + $("body").removeClass('sidebar-collapse').trigger('expanded.pushMenu'); + } else { + $("body").addClass('sidebar-collapse').trigger('collapsed.pushMenu'); + } + } + //Handle sidebar push menu for small screens + else { + if ($("body").hasClass('sidebar-open')) { + $("body").removeClass('sidebar-open').removeClass('sidebar-collapse').trigger('collapsed.pushMenu'); + } else { + $("body").addClass('sidebar-open').trigger('expanded.pushMenu'); + } + } + }); + + $(".content-wrapper").click(function () { + //Enable hide menu when clicking on the content-wrapper on small screens + if ($(window).width() <= (screenSizes.sm - 1) && $("body").hasClass("sidebar-open")) { + $("body").removeClass('sidebar-open'); + } + }); + + //Enable expand on hover for sidebar mini + if ($.AdminLTE.options.sidebarExpandOnHover + || ($('body').hasClass('fixed') + && $('body').hasClass('sidebar-mini'))) { + this.expandOnHover(); + } + }, + expandOnHover: function () { + var _this = this; + var screenWidth = $.AdminLTE.options.screenSizes.sm - 1; + //Expand sidebar on hover + $('.main-sidebar').hover(function () { + if ($('body').hasClass('sidebar-mini') + && $("body").hasClass('sidebar-collapse') + && $(window).width() > screenWidth) { + _this.expand(); + } + }, function () { + if ($('body').hasClass('sidebar-mini') + && $('body').hasClass('sidebar-expanded-on-hover') + && $(window).width() > screenWidth) { + _this.collapse(); + } + }); + }, + expand: function () { + $("body").removeClass('sidebar-collapse').addClass('sidebar-expanded-on-hover'); + }, + collapse: function () { + if ($('body').hasClass('sidebar-expanded-on-hover')) { + $('body').removeClass('sidebar-expanded-on-hover').addClass('sidebar-collapse'); + } + } + }; + + /* Tree() + * ====== + * Converts the sidebar into a multilevel + * tree view menu. + * + * @type Function + * @Usage: $.AdminLTE.tree('.sidebar') + */ + $.AdminLTE.tree = function (menu) { + var _this = this; + var animationSpeed = $.AdminLTE.options.animationSpeed; + $(document).on('click', menu + ' li a', function (e) { + //Get the clicked link and the next element + var $this = $(this); + var checkElement = $this.next(); + + //Check if the next element is a menu and is visible + if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible')) && (!$('body').hasClass('sidebar-collapse'))) { + //Close the menu + checkElement.slideUp(animationSpeed, function () { + checkElement.removeClass('menu-open'); + //Fix the layout in case the sidebar stretches over the height of the window + //_this.layout.fix(); + }); + checkElement.parent("li").removeClass("active"); + } + //If the menu is not visible + else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) { + //Get the parent menu + var parent = $this.parents('ul').first(); + //Close all open menus within the parent + var ul = parent.find('ul:visible').slideUp(animationSpeed); + //Remove the menu-open class from the parent + ul.removeClass('menu-open'); + //Get the parent li + var parent_li = $this.parent("li"); + + //Open the target menu and add the menu-open class + checkElement.slideDown(animationSpeed, function () { + //Add the class active to the parent li + checkElement.addClass('menu-open'); + parent.find('li.active').removeClass('active'); + parent_li.addClass('active'); + //Fix the layout in case the sidebar stretches over the height of the window + _this.layout.fix(); + }); + } + //if this isn't a link, prevent the page from being redirected + if (checkElement.is('.treeview-menu')) { + e.preventDefault(); + } + }); + }; + + /* ControlSidebar + * ============== + * Adds functionality to the right sidebar + * + * @type Object + * @usage $.AdminLTE.controlSidebar.activate(options) + */ + $.AdminLTE.controlSidebar = { + //instantiate the object + activate: function () { + //Get the object + var _this = this; + //Update options + var o = $.AdminLTE.options.controlSidebarOptions; + //Get the sidebar + var sidebar = $(o.selector); + //The toggle button + var btn = $(o.toggleBtnSelector); + + //Listen to the click event + btn.on('click', function (e) { + e.preventDefault(); + //If the sidebar is not open + if (!sidebar.hasClass('control-sidebar-open') + && !$('body').hasClass('control-sidebar-open')) { + //Open the sidebar + _this.open(sidebar, o.slide); + } else { + _this.close(sidebar, o.slide); + } + }); + + //If the body has a boxed layout, fix the sidebar bg position + var bg = $(".control-sidebar-bg"); + _this._fix(bg); + + //If the body has a fixed layout, make the control sidebar fixed + if ($('body').hasClass('fixed')) { + _this._fixForFixed(sidebar); + } else { + //If the content height is less than the sidebar's height, force max height + if ($('.content-wrapper, .right-side').height() < sidebar.height()) { + _this._fixForContent(sidebar); + } + } + }, + //Open the control sidebar + open: function (sidebar, slide) { + //Slide over content + if (slide) { + sidebar.addClass('control-sidebar-open'); + } else { + //Push the content by adding the open class to the body instead + //of the sidebar itself + $('body').addClass('control-sidebar-open'); + } + }, + //Close the control sidebar + close: function (sidebar, slide) { + if (slide) { + sidebar.removeClass('control-sidebar-open'); + } else { + $('body').removeClass('control-sidebar-open'); + } + }, + _fix: function (sidebar) { + var _this = this; + if ($("body").hasClass('layout-boxed')) { + sidebar.css('position', 'absolute'); + sidebar.height($(".wrapper").height()); + $(window).resize(function () { + _this._fix(sidebar); + }); + } else { + sidebar.css({ + 'position': 'fixed', + 'height': 'auto' + }); + } + }, + _fixForFixed: function (sidebar) { + sidebar.css({ + 'position': 'fixed', + 'max-height': '100%', + 'overflow': 'auto', + 'padding-bottom': '50px' + }); + }, + _fixForContent: function (sidebar) { + $(".content-wrapper, .right-side").css('min-height', sidebar.height()); + } + }; + + /* BoxWidget + * ========= + * BoxWidget is a plugin to handle collapsing and + * removing boxes from the screen. + * + * @type Object + * @usage $.AdminLTE.boxWidget.activate() + * Set all your options in the main $.AdminLTE.options object + */ + $.AdminLTE.boxWidget = { + selectors: $.AdminLTE.options.boxWidgetOptions.boxWidgetSelectors, + icons: $.AdminLTE.options.boxWidgetOptions.boxWidgetIcons, + animationSpeed: $.AdminLTE.options.animationSpeed, + activate: function (_box) { + var _this = this; + if (!_box) { + _box = document; // activate all boxes per default + } + //Listen for collapse event triggers + $(_box).on('click', _this.selectors.collapse, function (e) { + e.preventDefault(); + _this.collapse($(this)); + }); + + //Listen for remove event triggers + $(_box).on('click', _this.selectors.remove, function (e) { + e.preventDefault(); + _this.remove($(this)); + }); + }, + collapse: function (element) { + var _this = this; + //Find the box parent + var box = element.parents(".box").first(); + //Find the body and the footer + var box_content = box.find("> .box-body, > .box-footer, > form >.box-body, > form > .box-footer"); + if (!box.hasClass("collapsed-box")) { + //Convert minus into plus + element.children(":first") + .removeClass(_this.icons.collapse) + .addClass(_this.icons.open); + //Hide the content + box_content.slideUp(_this.animationSpeed, function () { + box.addClass("collapsed-box"); + }); + } else { + //Convert plus into minus + element.children(":first") + .removeClass(_this.icons.open) + .addClass(_this.icons.collapse); + //Show the content + box_content.slideDown(_this.animationSpeed, function () { + box.removeClass("collapsed-box"); + }); + } + }, + remove: function (element) { + //Find the box parent + var box = element.parents(".box").first(); + box.slideUp(this.animationSpeed); + } + }; +} + +/* ------------------ + * - Custom Plugins - + * ------------------ + * All custom plugins are defined below. + */ + +/* + * BOX REFRESH BUTTON + * ------------------ + * This is a custom plugin to use with the component BOX. It allows you to add + * a refresh button to the box. It converts the box's state to a loading state. + * + * @type plugin + * @usage $("#box-widget").boxRefresh( options ); + */ +(function ($) { + + "use strict"; + + $.fn.boxRefresh = function (options) { + + // Render options + var settings = $.extend({ + //Refresh button selector + trigger: ".refresh-btn", + //File source to be loaded (e.g: ajax/src.php) + source: "", + //Callbacks + onLoadStart: function (box) { + return box; + }, //Right after the button has been clicked + onLoadDone: function (box) { + return box; + } //When the source has been loaded + + }, options); + + //The overlay + var overlay = $('

'); + + return this.each(function () { + //if a source is specified + if (settings.source === "") { + if (window.console) { + window.console.log("Please specify a source first - boxRefresh()"); + } + return; + } + //the box + var box = $(this); + //the button + var rBtn = box.find(settings.trigger).first(); + + //On trigger click + rBtn.on('click', function (e) { + e.preventDefault(); + //Add loading overlay + start(box); + + //Perform ajax call + box.find(".box-body").load(settings.source, function () { + done(box); + }); + }); + }); + + function start(box) { + //Add overlay and loading img + box.append(overlay); + + settings.onLoadStart.call(box); + } + + function done(box) { + //Remove overlay and loading img + box.find(overlay).remove(); + + settings.onLoadDone.call(box); + } + + }; + +})(jQuery); + + /* + * EXPLICIT BOX CONTROLS + * ----------------------- + * This is a custom plugin to use with the component BOX. It allows you to activate + * a box inserted in the DOM after the app.js was loaded, toggle and remove box. + * + * @type plugin + * @usage $("#box-widget").activateBox(); + * @usage $("#box-widget").toggleBox(); + * @usage $("#box-widget").removeBox(); + */ +(function ($) { + + 'use strict'; + + $.fn.activateBox = function () { + $.AdminLTE.boxWidget.activate(this); + }; + + $.fn.toggleBox = function(){ + var button = $($.AdminLTE.boxWidget.selectors.collapse, this); + $.AdminLTE.boxWidget.collapse(button); + }; + + $.fn.removeBox = function(){ + var button = $($.AdminLTE.boxWidget.selectors.remove, this); + $.AdminLTE.boxWidget.remove(button); + }; + +})(jQuery); + +/* + * TODO LIST CUSTOM PLUGIN + * ----------------------- + * This plugin depends on iCheck plugin for checkbox and radio inputs + * + * @type plugin + * @usage $("#todo-widget").todolist( options ); + */ +(function ($) { + + 'use strict'; + + $.fn.todolist = function (options) { + // Render options + var settings = $.extend({ + //When the user checks the input + onCheck: function (ele) { + return ele; + }, + //When the user unchecks the input + onUncheck: function (ele) { + return ele; + } + }, options); + + return this.each(function () { + + if (typeof $.fn.iCheck != 'undefined') { + $('input', this).on('ifChecked', function () { + var ele = $(this).parents("li").first(); + ele.toggleClass("done"); + settings.onCheck.call(ele); + }); + + $('input', this).on('ifUnchecked', function () { + var ele = $(this).parents("li").first(); + ele.toggleClass("done"); + settings.onUncheck.call(ele); + }); + } else { + $('input', this).on('change', function () { + var ele = $(this).parents("li").first(); + ele.toggleClass("done"); + if ($('input', ele).is(":checked")) { + settings.onCheck.call(ele); + } else { + settings.onUncheck.call(ele); + } + }); + } + }); + }; +}(jQuery)); diff --git a/web/static/dist/js/app.min.js b/web/static/dist/js/app.min.js new file mode 100644 index 0000000..8ec5fe1 --- /dev/null +++ b/web/static/dist/js/app.min.js @@ -0,0 +1,13 @@ +/*! AdminLTE app.js + * ================ + * Main JS application file for AdminLTE v2. This file + * should be included in all pages. It controls some layout + * options and implements exclusive AdminLTE plugins. + * + * @Author Almsaeed Studio + * @Support + * @Email + * @version 2.3.2 + * @license MIT + */ +function _init(){"use strict";$.AdminLTE.layout={activate:function(){var a=this;a.fix(),a.fixSidebar(),$(window,".wrapper").resize(function(){a.fix(),a.fixSidebar()})},fix:function(){var a=$(".main-header").outerHeight()+$(".main-footer").outerHeight(),b=$(window).height(),c=$(".sidebar").height();if($("body").hasClass("fixed"))$(".content-wrapper, .right-side").css("min-height",b-$(".main-footer").outerHeight());else{var d;b>=c?($(".content-wrapper, .right-side").css("min-height",b-a),d=b-a):($(".content-wrapper, .right-side").css("min-height",c),d=c);var e=$($.AdminLTE.options.controlSidebarOptions.selector);"undefined"!=typeof e&&e.height()>d&&$(".content-wrapper, .right-side").css("min-height",e.height())}},fixSidebar:function(){return $("body").hasClass("fixed")?("undefined"==typeof $.fn.slimScroll&&window.console&&window.console.error("Error: the fixed layout requires the slimscroll plugin!"),void($.AdminLTE.options.sidebarSlimScroll&&"undefined"!=typeof $.fn.slimScroll&&($(".sidebar").slimScroll({destroy:!0}).height("auto"),$(".sidebar").slimscroll({height:$(window).height()-$(".main-header").height()+"px",color:"rgba(0,0,0,0.2)",size:"3px"})))):void("undefined"!=typeof $.fn.slimScroll&&$(".sidebar").slimScroll({destroy:!0}).height("auto"))}},$.AdminLTE.pushMenu={activate:function(a){var b=$.AdminLTE.options.screenSizes;$(document).on("click",a,function(a){a.preventDefault(),$(window).width()>b.sm-1?$("body").hasClass("sidebar-collapse")?$("body").removeClass("sidebar-collapse").trigger("expanded.pushMenu"):$("body").addClass("sidebar-collapse").trigger("collapsed.pushMenu"):$("body").hasClass("sidebar-open")?$("body").removeClass("sidebar-open").removeClass("sidebar-collapse").trigger("collapsed.pushMenu"):$("body").addClass("sidebar-open").trigger("expanded.pushMenu")}),$(".content-wrapper").click(function(){$(window).width()<=b.sm-1&&$("body").hasClass("sidebar-open")&&$("body").removeClass("sidebar-open")}),($.AdminLTE.options.sidebarExpandOnHover||$("body").hasClass("fixed")&&$("body").hasClass("sidebar-mini"))&&this.expandOnHover()},expandOnHover:function(){var a=this,b=$.AdminLTE.options.screenSizes.sm-1;$(".main-sidebar").hover(function(){$("body").hasClass("sidebar-mini")&&$("body").hasClass("sidebar-collapse")&&$(window).width()>b&&a.expand()},function(){$("body").hasClass("sidebar-mini")&&$("body").hasClass("sidebar-expanded-on-hover")&&$(window).width()>b&&a.collapse()})},expand:function(){$("body").removeClass("sidebar-collapse").addClass("sidebar-expanded-on-hover")},collapse:function(){$("body").hasClass("sidebar-expanded-on-hover")&&$("body").removeClass("sidebar-expanded-on-hover").addClass("sidebar-collapse")}},$.AdminLTE.tree=function(a){var b=this,c=$.AdminLTE.options.animationSpeed;$(a).on("click","li a",function(a){var d=$(this),e=d.next();if(e.is(".treeview-menu")&&e.is(":visible")&&!$("body").hasClass("sidebar-collapse"))e.slideUp(c,function(){e.removeClass("menu-open")}),e.parent("li").removeClass("active");else if(e.is(".treeview-menu")&&!e.is(":visible")){var f=d.parents("ul").first(),g=f.find("ul:visible").slideUp(c);g.removeClass("menu-open");var h=d.parent("li");e.slideDown(c,function(){e.addClass("menu-open"),f.find("li.active").removeClass("active"),h.addClass("active"),b.layout.fix()})}e.is(".treeview-menu")&&a.preventDefault()})},$.AdminLTE.controlSidebar={activate:function(){var a=this,b=$.AdminLTE.options.controlSidebarOptions,c=$(b.selector),d=$(b.toggleBtnSelector);d.on("click",function(d){d.preventDefault(),c.hasClass("control-sidebar-open")||$("body").hasClass("control-sidebar-open")?a.close(c,b.slide):a.open(c,b.slide)});var e=$(".control-sidebar-bg");a._fix(e),$("body").hasClass("fixed")?a._fixForFixed(c):$(".content-wrapper, .right-side").height() .box-body, > .box-footer, > form >.box-body, > form > .box-footer");c.hasClass("collapsed-box")?(a.children(":first").removeClass(b.icons.open).addClass(b.icons.collapse),d.slideDown(b.animationSpeed,function(){c.removeClass("collapsed-box")})):(a.children(":first").removeClass(b.icons.collapse).addClass(b.icons.open),d.slideUp(b.animationSpeed,function(){c.addClass("collapsed-box")}))},remove:function(a){var b=a.parents(".box").first();b.slideUp(this.animationSpeed)}}}if("undefined"==typeof jQuery)throw new Error("AdminLTE requires jQuery");$.AdminLTE={},$.AdminLTE.options={navbarMenuSlimscroll:!0,navbarMenuSlimscrollWidth:"3px",navbarMenuHeight:"200px",animationSpeed:500,sidebarToggleSelector:"[data-toggle='offcanvas']",sidebarPushMenu:!0,sidebarSlimScroll:!0,sidebarExpandOnHover:!1,enableBoxRefresh:!0,enableBSToppltip:!0,BSTooltipSelector:"[data-toggle='tooltip']",enableFastclick:!0,enableControlSidebar:!0,controlSidebarOptions:{toggleBtnSelector:"[data-toggle='control-sidebar']",selector:".control-sidebar",slide:!0},enableBoxWidget:!0,boxWidgetOptions:{boxWidgetIcons:{collapse:"fa-minus",open:"fa-plus",remove:"fa-times"},boxWidgetSelectors:{remove:'[data-widget="remove"]',collapse:'[data-widget="collapse"]'}},directChat:{enable:!0,contactToggleSelector:'[data-widget="chat-pane-toggle"]'},colors:{lightBlue:"#3c8dbc",red:"#f56954",green:"#00a65a",aqua:"#00c0ef",yellow:"#f39c12",blue:"#0073b7",navy:"#001F3F",teal:"#39CCCC",olive:"#3D9970",lime:"#01FF70",orange:"#FF851B",fuchsia:"#F012BE",purple:"#8E24AA",maroon:"#D81B60",black:"#222222",gray:"#d2d6de"},screenSizes:{xs:480,sm:768,md:992,lg:1200}},$(function(){"use strict";$("body").removeClass("hold-transition"),"undefined"!=typeof AdminLTEOptions&&$.extend(!0,$.AdminLTE.options,AdminLTEOptions);var a=$.AdminLTE.options;_init(),$.AdminLTE.layout.activate(),$.AdminLTE.tree(".sidebar"),a.enableControlSidebar&&$.AdminLTE.controlSidebar.activate(),a.navbarMenuSlimscroll&&"undefined"!=typeof $.fn.slimscroll&&$(".navbar .menu").slimscroll({height:a.navbarMenuHeight,alwaysVisible:!1,size:a.navbarMenuSlimscrollWidth}).css("width","100%"),a.sidebarPushMenu&&$.AdminLTE.pushMenu.activate(a.sidebarToggleSelector),a.enableBSToppltip&&$("body").tooltip({selector:a.BSTooltipSelector}),a.enableBoxWidget&&$.AdminLTE.boxWidget.activate(),a.enableFastclick&&"undefined"!=typeof FastClick&&FastClick.attach(document.body),a.directChat.enable&&$(document).on("click",a.directChat.contactToggleSelector,function(){var a=$(this).parents(".direct-chat").first();a.toggleClass("direct-chat-contacts-open")}),$('.btn-group[data-toggle="btn-toggle"]').each(function(){var a=$(this);$(this).find(".btn").on("click",function(b){a.find(".btn.active").removeClass("active"),$(this).addClass("active"),b.preventDefault()})})}),function(a){"use strict";a.fn.boxRefresh=function(b){function c(a){a.append(f),e.onLoadStart.call(a)}function d(a){a.find(f).remove(),e.onLoadDone.call(a)}var e=a.extend({trigger:".refresh-btn",source:"",onLoadStart:function(a){return a},onLoadDone:function(a){return a}},b),f=a('
');return this.each(function(){if(""===e.source)return void(window.console&&window.console.log("Please specify a source first - boxRefresh()"));var b=a(this),f=b.find(e.trigger).first();f.on("click",function(a){a.preventDefault(),c(b),b.find(".box-body").load(e.source,function(){d(b)})})})}}(jQuery),function(a){"use strict";a.fn.activateBox=function(){a.AdminLTE.boxWidget.activate(this)},a.fn.toggleBox=function(){var b=a(a.AdminLTE.boxWidget.selectors.collapse,this);a.AdminLTE.boxWidget.collapse(b)},a.fn.removeBox=function(){var b=a(a.AdminLTE.boxWidget.selectors.remove,this);a.AdminLTE.boxWidget.remove(b)}}(jQuery),function(a){"use strict";a.fn.todolist=function(b){var c=a.extend({onCheck:function(a){return a},onUncheck:function(a){return a}},b);return this.each(function(){"undefined"!=typeof a.fn.iCheck?(a("input",this).on("ifChecked",function(){var b=a(this).parents("li").first();b.toggleClass("done"),c.onCheck.call(b)}),a("input",this).on("ifUnchecked",function(){var b=a(this).parents("li").first();b.toggleClass("done"),c.onUncheck.call(b)})):a("input",this).on("change",function(){var b=a(this).parents("li").first();b.toggleClass("done"),a("input",b).is(":checked")?c.onCheck.call(b):c.onUncheck.call(b)})})}}(jQuery); \ No newline at end of file diff --git a/web/static/img/app.png b/web/static/img/app.png new file mode 100644 index 0000000000000000000000000000000000000000..4dbcbc200c557fbbce955acfc46879708b46b487 GIT binary patch literal 32937 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
;T_K5fA&&bf3w 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 MOA{~p2TRfWKbzwEi~s-t literal 0 HcmV?d00001 diff --git a/web/static/img/home.png b/web/static/img/home.png new file mode 100644 index 0000000000000000000000000000000000000000..385c04e548685dd414d4d50e8f0bdb47b1af9ce8 GIT binary patch literal 491488 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 z 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�ZP;bb*<^WCm#$=e)snzc?1EWq zFR`D1!EkP9ayZ* z2Ze-JC-^9cFmlv#FzwXmos?09aH#hz%_IH^Aw_)kp~uhx)JouIfkFQ!ubx3epsuC* z^JtgFLk3JWPk-N&_j{qAS~eqF%=tleoKe*qUkoKeezqju5OCJ^z8|DjgDKN%zj33Y zbe4@thD+MdXh=z221zYlWO-Wua37M~D-|4VuZoRplE^LlGW@Q7Q_;(g3;-8lG-P4= zOAefHHbxh$Rr0MWLho5L@YjI}c2pee2DWe;Gl`)F*6^5tyY0-qt`=a)@XqB&M`A47 zZG_L&cAui#0a?TJrf9!+ikP(E^oiSHMaY8Lg6&Am`|%xTYCEhYQXqRon^fZ!V zZ9l^k^YQ-Cmzy=g+MZp!p@sDy!$x{=gC~slHv&WAAiU#wtHrrwFah9CCwhoB7uuV)X78Nh8=A`&F&dkEu9xXk-H@BICn zyB6e;M(L4?8hdwQssGVBjoaPLtj?MDW@IzvEICmt^^(c~e-yBZe?vZDUhfi&7culU z17hQIJ+>Y%qoyN&L~FliqF>u;U@geLZ48yY+6hakTTaKu&HQr`#W;PZAyE~;IPSTh zb*t;Rm+nxAFKgA6@E{95HFZF-nLj(wjQ4Jc{ENcK|BrhK=H~UL<9L$;53@4E4rQ`8 zSy0px%Lr@9#-Be(%tmW|o%s4r$(`XyLC6vW4814|-62at{3IHDop4|3vslr#{rKyW zpjxJtsfqmC^uY&+)^~lM?~&{Bl$1R5zd1!5r&iQ8<%;-ZIZ2(>EpfgV4vqrwodC!qPASUy)6v zNXq@|VX!6Ra3n4&uovBBfz+eDwa~I|i5sXwVrB5OBVKAaGVvx7_Q-fiyU0!e+d%#m zL&C#ePXFRiAQ6o4B|A}Fi5_i2G<6038?OciIoDJnd`;@ILAp0DGooGmK zAVi2HDA<=-NUutEs}muw|9>&4#O188C`LAp>uUk=B7^?;&N@5Ktp#|Ff4C$PEE3si9e9Vgl^e{_;O5zL$jQ!X{Am z#2o9MVIw?`?~e{K!4GYe{}Bv2__AO}m+lW0oDr8q(Ve`YBZ@y=sxJN~g>fshR4 z#y3bXZi#{ruHcqb7){HgFV^Mn(4fw%oY2js_NhUkLAKl93PCgAteqRbUUp$e(@NMtclm4{#` zdi2SP;;76SP%NOHrGW9U;5$=r!UFzTUc9ttc1ll|6ye6+Nnz+&Da=L{)Q4G8$OxFx zt+({6i`iN6zYRHOGVq|{0uQv?Ctn<|DnOZQpkzdN5vTwpk(9aY*MnQ;gcrD@{YTd9 zC{l7onMLlR%Q)AW4IEyP;wbi7S0Dg>Mm~qv8^aJrNj=4BBSt}_1j1v&2jQ)Xhbyyy zf~+46^f-~=;^7q`u;G(r{ScF1BEdmZWUq7yi6pZSIBY6hAv+%;#iI?)(FQa;7pmZ)4vFF*0 zoSUp0cFI61s&Y$NnA#&dEHlSX9PDl(&rd6B^ExOxMx$o=zMcj%k!GA&r4lt@67_7L zSA&w0@+;s`i(#P&_svk+f^EBB;1kFI7oXbmyeq;c0^=Bf%pTGhY5w8m(UIA!` zCGYjdvd`GP5iZADat4h8 z*Qpfnk%7wj9`nriTy{NKYwYy+;N8+ISL4#8!7p;nUwN{xQ9C zDU6CcMYa8MW|65?bN+^4j$t2T(EAmes{Bw}{`NKU|KDHSjYSfIfVk5uc-a#KgfGni zT@EnM1W<~!hDhSe$OcxgI|K~$8ot`)tfJlH?N6M5N68k2M=c)rPUztPL0$@W|K96~ z!)NIVYy_ne&)2*%C&XJ(E~Yz6aaZnlZu&?eN_QC>l*6&fBVC4Bdfm7GWcoY6kQfy> z1h9{rnM3IQCI^LLkO|1=Rp@UIQwpXo+1zk2*vWF2M=UfMOMoV-`9J)S^X^#+5D5Rf z%AMlZ&d)!F(#}yyku(G%N(X>mLRMevo!b!R;PE;*0>Pd4Yu&`x3~O8h_@jQ^I9oZe z8)7B>7qFjouliq1Zvz2+tx|x3IJ#UEK!hWCpFo)~P*f&q~7JK>n#wklu_&QzZH;u?Vuia+joy&`sAaS3=BFy`c z`@R$8-8%xnI~qR{*lS;EEO!741q-Dw7nBl|^5wmX%HEQU6?q)X z2}hSE+=j`PA=~%$ONWP(*$)+h8!f}XxyK$VvFiXu6pTkdbD`65z?-qs7UpuaM`QB+ zM-B;1*tjSi5e2c#914NKU@4@m%_YyXMy<~Ivd$s{FwMj{#9G2=A#jQu`4aNqA;V$4 z6iBVpu*$O6`%$4gO_xtbEf@%JTlIefsqbaAjCnRooDab1QhUE_lA3Q`xe?JM?@X=%E_WJQ5?Mp;ft)RMglHPw{1YlHp@3xCLl#)sZ1)fXFv0 z2pR<5Mrw}O40pvHT{zvorp@Enn` z>}x*QSaql?WEw?)rj@c;_YHsoHJH&C89k2^dwFFDdq-J7VG58pGd=8lP*&rnq)wG2 znrT7uc2I*t7u>{z3>C*+YOBDcd>nRRLU%iy*xpLiLB{+00Q0DtiD;b9{Uu&RxMUT~JsZeUBqi9;(RVfh) zw@(xiPC9;wBWPw^IA57QceFAUMgLRiDe5a{xYYA+XdvV*!V!pWlm@PnvwN-%Dj*-> z=^@tWsD+Z|pWstI>ehTx!O<@e>*&M@uIc1`)FBF>5Cv3qGO{FVgtbOWOY}w%b(_Eqz;uC3DU6&xI^W>s28r`tT zt72&-8Um(qD|Jh};6P!jjC0iN%JBFMZX&&i3c#gQc?~%*>poUs#0P0UBM89e5Mtas z3#Oz*a90KAR6$HpNoas#Bi^>Pk?vEofbk@mm-Z7e#ejyAdAKEly?(~9WZ?AI9Y4@U z=UCCgqoSfb{;%NYNRzMhTefCoLUMZFI+TZ6nl(|Wr0 zBfFCYtfV9^9X* zE5Qx)s8Xp+QaILwqYr(+56ksf2T95r=3_+n)L&H*Z@O0KILVzY3YJaIlfq7}N2hmvb&xm-3`sO1orOEF`8vkGk7eNihhxx)tA1jr7P^Nre9@YJgi>klZUYE=e zxLT}b`ugKlJXm?nxZPic}f|lv8F;p$-dH>@5;N`iuJ^l42WTCU2yHAFAnOI z=lKxpki|Gi9%AM+>4v7O{0EBMr&55H5uK?Cu#$9#z>uIW<4Xk0i z$;qPjn;FBIlcctL(Z=_ioD@XA{+cBs{K9>30jdIoO>Dl{y%uhA>{4{Gl;}?T_rCE9 ztJ&mj{H*vbi<}suR9&^e9%8cLR>S98{l>%qn82iAR^jh1-Ho<&28u8_?OyAQ>c1qh zCZ4_!W};q`3L!ni75?EewJzNpMl4d$4PMe+BLRpTJ+K;G?4E|b+Fv=T4jLb+gi};~ zC1Bqp0Ht1*1HG3;_l^apuA6nj?X{k}e*S(t9?qNXasEF^3Y+NP#XsWKL=ufehOeni zFteK$0!G1axT{$4RqemOzuNVc5Wxaa!L=&U?yRi|rjN9-$wRSX6>G%tz#Ckhtc}Iz zK#~3z&>Tw_50+#j<83+Wf0=pq(t?v^bq=#(QMp?^VNQz`!>8SyR>cMLbk2{T6N>G2 zyq`XZskv!O)jE?S0Cb(@P0?OPi3}T;tL4aeTzt7w(9+_Kho{l%vt?$pLa;BL=lfIs zNRBNNvat0eU?1UT#2?;X;>7ADx`@p~H?x9M zFAwRQf89GcFJT;<4;Mu|ZoMs|m*{=*O+XEinr*ltXN-#P6|y zF8Oi?IB{Sw(0;tGoA|%qZE5^-N5i%3{FEe4a}vW!dfc8s+$Bnl%oKZt6L044fhteR z>YRAt3#~gl&a3a4*5A$9b8W0FGz>FBzPrFOv}Y;zK5o%A^=uBjavOpkqtmE*(ulo+{F~<$3o^>wd~{8T5*hsAH%_ zXVO=F{up#mEVgf^#t_@_LG$7DNREU5X!c+PgBnqB!QoMN! zz5hx)O?wt#{mM`UNOyPZ^A95UY&R~g`&5*auSgUIr(EVZ{#m8FSXE>tV5#)zYY`ez#!DNL!AKE6+Go{v`&zn$;pS?& zwua_fgkfa&bzjM~vA*d5kP~NS-j=klZJ}4_Td;L=a8I|+p@X!mY8Sqz;#;MA6fYFC z*cWKV5zkXnc$=5e^VSn9x3t7G@PebSTjq|NqIO#;D?=u?48o z+NasPSa)q8nZ5A${^SRtk6Dr;_kUIVi>>+Ku#(>#Dd;4<_nHcPOv%t8-*9KF5=XX* z*b$1|pL03?_MxUS&rrZi?_h5}6}!i1Hhs(7Xp@YQ%c4^#?a|S@`;94v782awrx1~c z)Gjb@Fy9B02=*tL11+zK1V=uP2;_`BzS)&ecYzbdX}}%7-4OhDs$+qqd*o8&e_Dh? zv~7rOUTEf4rBW-dO;`k(P{J#c(u1D{P}1zWIfPuzf}L>9<(Goc zhg2S9_J(-{6%z;lW9_X1+G@J6Q6#tpcb5itC?1>wZGi#}?hZwYdvJFvu7%?6?pC0b z;_mLQf8Osu7w6(!o_)PDd)AuCGi#n@?X9zB+OCE#x^V%7T96MBu}bJ~6hr-OU(N-< zQSg#CsVi|mVD}y=4S4io{lE6uqIR+*biYIUf7T4a*K*;9w!@*PaIN0Kn<3)>zVp#$ zs#O4t+a0UbM?Ss+KliT80fBkkZUA<;lF z#?-VaL+;{MN_)74#x_iKAN9wt=l`h@5&a}(mY!D$FLbF$T^}Wwu^%2fEi+DyW~vS^ z>9LtbcrG3{4hsiqBXT!0dA|I6ro-%6rwk$b=uy0yms!VVv06~RAIp4n>C6)5o{COq zP#l0?rS=-03VOT8kQrK1J6&jEyF=WN&c~V}LS5^@caK3bT~}bP0HPvO^_oaNa4rI$ zBs1t}-^}ZV8orH)-+cM~;ciLSc{9Y2T-|3wZ)f)|_J8}3)tR$U>#c7R!;$aEZ}&ZC zpcK9=TD$`x+c#QlcS;pwm24GL8l3*OvVUaRwTI5(+btD_a(WS_lbhRq%n}Ge7w9|G zcJd3UzPasDcFJ^>GNC$Zw-}ClVEdPKfxIcUgR9B5dsua=mET zS4`Z_{kFM)lk#DJQ4Dk?DGe1{6{qv}z}g-i z@t*qfsx=4j|{K*fXFi_GjFS1?bh=U;JPAzcX464h|aZi++YX`iNy7 zk8g-s)ml@UC6GQi<)FN&l=DsS@VO#*VqTD?!hsXKfBDTlj%d)Y z@gbLwfKdFLFSj|jd%PchfU)1mml`RoK$~!(-evEEX|jTW-1D!iK=6^g%rs$jQMEgwBhyX=8?Xr6U;;hAER{Z^HEq_e1CPMX^EE)?bak zq*6be;FL|uX)}9!@tBW%&?Y334*f)xS0VrD;7b<7&Vtq6Pt-w_TCLZEC!Q8ngJp6Q zzqQZRQV@uS3TKCggZu=aw=SN`Kz0&+PO?ZPiym9OE_QXU?LggsqzcG~U7St)5d!D} zWHASj@SsSTMZuHioBlgdc4aGD)rc>m?Y_$g7k!79ABXg*Hcb3Q8Hj2BhIM}dw*O3DX*-m$+^?ykqEao{0Fq^`txkCU&GFDKth8ckWwK;z{iz=d&wi-7^_;mOqhhL` zJ43*OaM)oZOQh*!l^jX^1}JEXcLVz(%OFex@o+x_wgV)6P_6RVh`J;RN!yWwvbiFj z2Hd=2NW?sL4iH$Ufj?@6kyk^bUcmS0CPt>1gEvf*u%jPFvPWdDdlr`u_bTe!Y2j?p zN6E(jIU@-Q4eDa3X3Rv21z)~b1H#$EZ}F>WAy)x5V5L-sATh*pZ{7@lti>zNhMvA{ z+$4ymGS4`A0}~(S1qqg48j6wc52&*L_Oh#Z`B?hz+IVZg>Iex;ncLJ>Hzl5N1# z1O-uqw)+9}L$$&)!U5=1G65?1?RY^=TyQvmAZ`kUW|JufIk%>#-tPkuRyLeOxTu_n zR$+J0_;nIu`YU}}58uAvs@BPA-DO0+0FuZ|JeLi!Qhez^buZ=_9tdu5@)T1Rj1cC6 z*)b%)%72MgQ_$(7C5eloL_H7A6S*^zWX|~)fev1Wc`Jltb@1W`a~zf9P{IHVfhXHo z{w^#Ys}kyMYb&3R_=Z2@;4Tit!LiRSBv;Aj?pC1oJD!W3l`SgeY0~<_B%c=@PK8^bh$e zH}^i|-iCWxFiI93oj>xKi&)~nefHKc1M>}nX?ER=!rrN@iU$2q28+`ms@v1DAyonT zgV6A}Q3%`d#wCKcMV#KDX3!F7rq68=7$PVT6|KVvhV?3>78I-K&|s3WV^C!NTF~M4 zQ4*IPV*5P0QEt~Q!Q$w>_CeftzRp>YXdn6{k`bFpe1O#NtxcX2&XLX=3wjwdSqi%L zUr~K=u&lH%{lsMY)l8$??z|9y8Ti2^7s09k)$d-E11F~^0 zgL8D4SAVnXnW-Mx5QU|^?zz@>FT)^-kKai;pS;FH@!=4n= za{c?hD&Laa`gP{`g# z$-G%GD!|mgRz+QiRt715O5W%5YyK+9D<_)sHUn3d&`&mIR;WI1+K5a$p1TlGRFsCK zylmV=lUxRu3wN6=Qqh0zB>p5yR@UKa?y_c?9V}wR<|K@H@i*phj=1DEFOdeSKD@TH z*NJn-`ge+|rn;^aBiQHF|GBV$bUA_O0mg$6te_}hdP4lxZqwDsSQ4!BSF*}{BTF$Z zH$K{gs!WOqr3@M-E2AVfjZn-<2(qQ)U_PCKuc=J#X|xa{!*%~GU;EfmKs|H3iBGRj z%D1qja9kaXyD^#Q=^L_vT&%^eZQ*EH!og~|6ZoZkEE5e}aJoZIbgxDM1}T@s3NF(D^%3F4kb50iLllFc%okf-o9?DIdNxFB`9{%QGBctx~u z$EZ5+D!hr93NB-~E$X*+b*T+Ol|v0ITC8FQY(sbVjlM%myrhcn?g5O3XL(Hn_jZd_ zA@&@VpzH4-M!+U%DP^CuxpxHtrhb)J_w2K&o1dNM8&>O(_ODsK(tp=4!G}o1MN-3a z_u4EJLh^zVCw4erdJuy~Bvv7IXdrv>ScEMbZg;y`bW@3PQw!2aBNgv(Gqd35``6vW zuDdx_MkT{$)dzFd!9%)XC#K14n9jJYGI`&KdiRn|<(yCp8i^%- zzB7od8Rc+qv-sVG%dI)bj(Pr1o9m0O3KeO+>Qj)PXNMwT7cm~x1-S}A24M{0gVWX0 zL);x)i(zH}CQZLRp&~r%4-Hw$`><7W!Vr2K_^Pun&Y~%Fj5c9nHhQx-m;b)&rWi6h zAmh|s{NtF9=oq?f1~Mgnyf@HlLDJO!F`tvs(nJ0P#--wjSjub8+ul%>l8((*K}&{d0licslg`o zg8$qPQOCR#*|I_N?ofWx&{~2k?_M?&xh=$lNUol36!04dt2ajlHwl^B`sx{)HGf<) z03Xbj%jX(p)g=iGBCq>I54x7`eR+7hs2UvRy(shn3{;oaY@~fz;X$HtRe)l38dpBa=!a09qxZSkOBs563 z{C(xi)>~PW>;RXjf|tzg$*E7pj9&YImX|Z-*Cq!_KmZq>C<@3K(ll2v6RZH1p_2kh zu^9SzbDYh`lH*;%fum#zky#@h=W%q@i=$;3X@-o8qNPId;%*xCQO};Z*+MUQh?3zX zs=wBJv@+rlZzA3%K@7O&vcLuQCb$Ip+yq1&Asg&T*M2sMXEe>AyZD1euarb|DAhJ9 z4x3fC9UsL}ZaEC3Kr90{e}zdSBPML(V#UX#aPLK!X#R0~D{TnSIGDs^3lK#tl2P@v zjVXmBw!Hlw@)WP4L((NO%^CbEb{ulnUWHf4xx`cB%uPfXSkIV9k4#4#`0QF8E8bZK zNIQ4_yx91erzX1B>C~nV_FbAuigrVjc!A+&`#GJ5uQrY_O?bdKz5okRkfzCenY@AJ6;_#rh4D6E4DTe{Lw zvW$l1p^OKxwSr$T?_S*8rj5H9oKuw4dfL8KoNKz6%Qm)|o1A}5s%a%zmTq{2;Mo6$ z4K`?RRq`=y7;|CpUK^lUJCGv%V?)F%;@cpd(y$nB=b^tF^N{0Jon~P-YM}T1tFH|k z3x2JEH&t&TbW-|72@j5D2^(W}$c7NH$t|RFB0w4bq2i(eVA}B%lVEB;8M*D{gV054 zt&L-nS8gICRtZZa*q7TOaKcZ!Xq=tEC0zQ6D_PlSmE_i9*BAM9QQ+98@pt0e-fAgf z`wwB1#@e>g4jv*sVmY#8$-tBTC`zFeb>bRB<j*%EQ zpr%(xC@=SmU(;dEJc4Is?hs9SBd**1F|&NV13yp!d3{Ao=_}wRI#@SbBYRq~Wn)1u z4Q@3DK3w>2Sbj9wUdpTj@;|3wnXopC86tAZF?1w_Eu-w6 zug6FYL+!-9HQK@;yGo8#E~@lP!vJIg=Ue#n7c~C$x@Ua@Bbdjxu&Y5TaqU9-h4@+C zcn+dr6=y#m~=SW`*kWA;#+uEq76yMh!crWv;ox4Vj58gO^rj+DF5@eB)&<}Ds zyGX{c4NN5w0`{Frv~2jIqtv+N3&A@{+sQW%{%EAbR}7>2U}huLTEDd+sE35XNNcN z$>)1rLY%5hawid>H^;|?u@><8%JTyHDOB6fC#T4rrWQxDIz_{}mI@{WemkenI^!4u z?0gZAb&-9#`Wp~6fZeyM!`|{Xpv6vn{zAcY)UpQA%wKrw2wI=7bI(b3m+)?Em7o4P zmYzL0YZ$-9^JmfLAMepZ{G)*6;^bg{E41|!%~y8Rd^VxIN6gLCG(QafOOiSN7^ssO zX+NaQh^oSdtrlZ-*B(#*K1PB(GE(x^tkRx%Shx%wq-DYRZDO=WXf{Kd%oyoXTARQa z6wy<~n%!?<{jn2idD?EQ$%1Xb%wl9K08k6fS<@l>qXCFJl%jjC6bG&X9jAFvbq@bF)(q&z4zV!(n*rgvsPT^c#ZKkH&g(o_#r*U4AV}31WY;h zZ!d!VJgOQ&bnv>=sD-twl4|Vx7D-J+A2y`*4LK5nAkn&wvVU#`z7wGJ=Qk3b>iigF za_zw}m(N&BI!DiaA2GXx>C4NC6^~n{G(j>xRu!yIb3~CrIft8e_n&>R>9hVEE$eC| zfNC3@Otm_%#S+nY_otOSay009kO~Ty&@34F4Lr}r%Czry%9ul|W&g^imOWMQ;C3s@ zaV2nU^jnbVh^vZ~_Vu>!vpLSF=DZDy>aLyzms3V#5PN$$-9o+@4$hpDV&cWq4f&TN zv~A<7;#XrBQjhd?z4HH*2O{(+cUPwXd!5J-a2-%4>Q1IYOi446(9ps!a#rTKSY2_B zVMYe#MIDu$kJvhj569V()237-y2v@VAdM*OE~*(;B-)%b{e{)A)p@Hx+OX=dIio9^ zderHPeH=#!feF4tc;x;N*dHL+xrn5*2hy6@ykcn;^ltZl)(`3`P9>b}s~I06CsDa& z8=6C8T6GrRgIQz7>%PeLnxbVCr(THB8btw5@aCKoy*F29JP#79KehMZi~LzI7!>~G zIc@=;hB74`UcdyJ0d7fKdXx>CJ%bJ3=2u_~i1*5@pA%^_bYql>A-6OJ{!mN@3_gU{ zDQ1t3Mc)BJ>hT&lDgDelyTmk5lD`Hm;zGRaGK4@G$T=3ysGKp50+q> z617r(vr5=Or)w??Ec)QRG`Qa{m3>Jh)30wv_MrXU2OZr7-nQbMKY01Mz7NJpybA!L z8u!BTp%z1k19&tc8kbV+%s=8i_@T^$W|z)z<;gIGJ1E70dWP9;zr)`e0fteC zXs2fFdon#9Gza44DZzkzV2pBq*pz=znm6tZAcvv7~6MbymHZMV2>`C%-5R7G@2 z1{zd%hI2k(B|=TEJ6r$){1wQ#m~}%#rR1brd7K8v%S3=6liWPOL0vKM->n8aO`Oi@ zRQ(!nnnD!&F%Bq<6fI1E z(ZDTS!&PzMS*jCbww8(G?b1`Q=Ab-AhsmC*bLlGwK<&%$FKXw`fi>3{@XnU+(jWi*3JG`4F-R-;Pg~jjrex zFDl=O@(`LgPrOk4)Q`mz{v=X<~u$7ZTGny_utS2ECH=b zG#Ti{{jTbAcARv;B*Z>z`BgBr2<{NTScgX^OD#$zO__uD2iREq06>>)L4)Z%SQrk% z>u%}0g7cWa5r_L<%oib)4k#^0goi36j*3Y890(1sKGm~M2Op1&?0&A;zLL&HJaZWu zJKKP!DY+^!V#8jCx%?x*xM8#fuKR!hs9TAH6doBO_6_qVm_!s-Mcp>qw*ns1v6DFT zr`)wvXfE4Q>ypXoSJlD)ub-lSr%Ce%ZZWH%F9jiG4_Dc+LT#O^!L{-D?)W=FuOs(^!;|@$AKl0e z2)^;n=pmrBRRW3hy&?t4jlKV;8pLyP^yyC|YXsk%XS5J57Il%K0HRb?kx0frk~Aa+ zP?mB7gKrC#GPXy9>P4HQ#*%nN;s4>IjO3_f@|g-KMEC=Z%;HCP>G?gj`!@*wN#)wg zFR`aG3G1r2-MdAUuGg&F_zKILdcmvMm4uwOzl?(R#Y)(3lOt<833}B-jI8!v9qr5K z8NXNw8_n=xZs>Qg?N*BKAulYfOylwHN%gey=WzuEZ%UHPYE44j{4V90Y>WK2 zZdj>n)w8TMo-Guq`V^}vpeI)MRxe(`q@p@3zPo| zI9NND917;jA^dr7If}p-DH))Uur$hA|99q~Ol#Wr5m8obF78unszw$LLQpOFwD0q8aEnXYplgR}Yl)xW_Tq7{Ny<=bb%8oUd@pDv z&rj2VW5xvmikEyBAzkxIje)lXnruiGu}%OR@4dvNNZbM|Ja%c(EzeO;jPSy(A29VC zG++u7@%K$9{xf&4Ngpr)zdU zAK26OD-{wzK{E{KwH${pNlss)7@4+p|IO_fXj!p=u*=6*?(#39K@zTZ8?`5&Q_huP zjrm~GEk;kUT8fEgQ6wW%EtBOnhW8%g1BcU|&hn_KIzxSp5zuV!xhRbgdRT1M37{mfoh8{L?(~e2gXJ~#RKrY>T(=|cqqW-kHHvXA zj=JrqgO^6>(e;1O@*ns;fg-`^m5)jLf0LZ%Av$=FoTf9Rt&D)W|KQ|5SU;wJ>qY3u zVF9K6hhhH%X!M;x7(&CQ1bdQjBEXpcbN1${h=UNgW&T6Q0I7%n;PL1AYt5 zEYq*tYYN7FH{>jO<%+rFG~h{@@fDR|3B1jk;O%4v5&SpxhHx+}yB5F=r7%P2AxEp? zg7$M8%`4h5#o5Jsc(yfOmNs8f*U`4^zY>s)Wm48uVnvX`qviM*m;WN;BTxTSx$K(} z^Huj@Ow8TRJEW%Y)Z}>3_V7uG2unL#7BSWAj|B$LK>_KH>&<;<>ruN$3UYp+_bDH5 zB6ikqL0>H&cQajN_Jw#8?=n&duEJ8hP;jf8sVAaI{8i5b>h>JpW2cwpW#1jq^Y#4; z5)_Nt7{Mc5EDqT@_ya?w%LlY?=j*PWGuj_$bm-900GrzIctTzcx%+oiWpzS8}9cJYJv z+{KW!&AKDNg7fbR-Y|?4Dy7S!6~_=;ApLyJmdsB8y<`zAUtp? zRiGPv#2ROw9gLxijTU?|2XdLzFFY)#sdDO9Y*z z%QkYX3ehS(uci0{0(XYg=~{Hq++h6J1Ye-poJL_OYKSPk|fnQ^z_O_R!WMLYjk1LQMyaLPB zc~2soA#9(2W4^>5J7TM3!>L=I*z8p+OW2>D2%}9!Uce?Y)RQvL{Yx%b&|cb(Pg;|gnJsb$A5+%s8LQ5c{>P42FNb;p zPHTB}Dg$|JMho3FM@5_BX_f4?BJT^6hxsLjBuoxc~ofL z@TR9qFCr{uH0q_1I>WQLW>`p76=4LcRNg~Yt*a35H6W;2H_?!Ibnoqt#GJ%r@e8|> z0a4u07~5p^^5i8aQCwif^IxF%E9)3F4voy-1YAfyM7LSMFxE z7fu}t z8=DBdG@lYqf`>q3QWB|#Z&V))!kg8-GyXb0%nUkX19JlB416^8bM-FTYFXCCCj%A8 zBQp(#YedtDQ@$`XcGV@pcMxjw;bar-9WFeLvT9`W3K> zyZud$cKfq~<(D^h^w#erqNnYKqL=VC$Jq4cIQ@~dW|iYdjg1};WEx*!=CfFBu5W+N z>#v)qBgDlfKR@*&PXqjuh7fz}X#GdIr%Cd_`lnT=xzmPZx2}I5w!X4;nYTnE!HPA? zx2Wg=5YkL84i*HcAriFAx!nR@Tbz14SY_SJNq-HzwSJ!Ky~ ztJ&M}bty)xs>e^a_P0zpSskvgQe1Hnnz44`s?8EfhbhF<5*DHJ_VSQdr1F(DfbTYQ}b^#Z>VWh)~F?-j|Ut}I! z8&fCob1J{GG(m$FJ4@7>gtC~J#R*mF^QA|Aj>#6f>C?Y9rEi>s$}|`{e6FnZ{%?1I zK4o7OhG+ZWCaP0uhXkZkDi*%~zOmX)`E-`-lsV1Si;BNMHH1r3AGB7nVsjGGAo%$F zUBKtP_>Fc?I4QGo(o2eI!dyDrqr3TrPoQ8l0--!@q4m=;+p6d9f?ufRsD;17#>r#B zGP+`4N`jXdJ#RDmuARRccwPq%T%U_bO!wLU{u#QOt_89uP7NKS#p&RtkNs>fFeXX_ z41cGzR%|dW=NV$PO|{;Pc{@jRX&-+E{zupz>$D>d`1g?p6k2b0hk%kD%;rmF=H(T4 z6E842ltHMZ)s-AtUM}M&YseHEFuobVZ?ZCKbEG5w(Xpx_ulcPppOrnEjY4F)HLvq@ zv@VvUtArx014$uufswG2P)2f*9)6t4|3-7mZyTZ#q1l{dSs{beiGp!P&t?a;?K-RX znXGMhx0Bisw?IzyJC4fy+%C)aFVmz}%Ie4;=O>}(qWvf5Op>hh?Kw9+~L>Wv#|EFeK=CcCz?WLQGk1vD4&M6U|WExW%?Oy6#bgN zu~K)KU&q5)a~=|s`mVa^qgEFZw_%4E=lRk=@aVZT%!|jmg?=~Zr}aSSV-x zPid0_XT&ffjJB4(F+znrn@qHtxb{~2yGGn|kdKC#mQ_b#zbQOCZVZtZ+U!{*YiMvH z$4Enbv|REYTBtUb_w}F!o_l6HBXDNF&Tgi9jwywUDQW5`#lkaW=kkEomOm3I5J|Q4 zX-$*bMr=%p#wXRv=DsPGEWlI*8JCV)Ew*Tu@y~BCVRU^9{qO{{&I4R6mhq)|Sc4r7 zs>}P@w@aEik|+2PF;4{prZuHN`XzOu?R1H^5$-cYA$Z#^Q?CQ`@ly6CvcF61{IH-L zwyr*~5bN;zU`{W_S(UB9LY#HOrKZ!!gZIn#k>_YwxuCk>ZSbo|Ze}{*J1z8knDmtc1{#7$D#Y3#c?-9i2-uU>R#3Ryg$^aWL zd?&r?H3DDZ(M;@3QvH<6vqCx;X3ixm zR`w9eS`ADaL%gwbR)^SVVsRi`gIk@Se_Ecv4iqtStBi-H zvtVZv#U~EtRCfVN#Op-OCiIL z*t;fjDZJ|MxbPLSdR=hCIF@PC6l8Q+KWJlrMuLJ5Ov+K@5(F(CESi33AHi_`j&xD; z_2eBJrIz)MI@2x9zpo`qZU83(#l9oC%`3)?2dIjE#ExcOpvx0_IA&c%#APWaD(?2s z0GU#R^sIr;m4^wM>hsXq{#XLCj|tl^ZT|?zju`!`yFt_&xnrax)(=`*!mT8COmF-U4&X zB|O3}0Fc)e&VktAP|C5Q*{*5SApT-tklywlvEBEgoi9mlueKX^))YU!W!F#RwhR4I zfhNn*@c0oRk1X`A)|f8$_oR7i_l)A_tbEnd+1S0n|G3P$p|92b$MwO~)yNC1sN{`! zd;87^)_2`(A3t>S3L=89A3vS$^VfuiJ zOe+wT;0;TOW}50Xl!Ba@ZAo5B**3MWE$&8AUP;^jN{}$+Q#$oe9}7jM3r1y4QlL|J z5~HgT9d2l2mFf73y5)(^z;OkagU5k}6v%JT(<@J^yw1)bD!9A$a}=Jj2bOofbvT21Hyr6+&y>NdOm_87iQqb z2U@N+5G_tm8UYj%nE1kS%k_iSMDUn#3>tJwsR%2_beM6%>^0}=lQHfeoix8iuju-u z`KJE^7};2!8A8Lnl}=ZW=)@ za^k1BgdRD`!$guz*O_?Jxt0T8l`#e_tP%(Br_ooJqRnF!z$OJiE&ETstle@a4~ZZ+nG;|8J7wu@7^nX!=x|`UJScsHEj-HJ`t- zOvJdFprc<$mYVef0(e&O0GEvTVZ`{uQ(zQEg@SC}%pCA&;QPPoICMKTnf-m$UpEkk zeTR~_29%0=A~0ntJMU_1lF=SKlCEEf36^fjMhF=C$yr&6@p$4LLJGKaCh4S4w%KfP z?I45mp&e+%^5u1(w@KClcVdVP)B#Sm@mZ>bV>t6tOr8{@*^y%C)`I!YvEAPKakag% zJQbMwo@O{|fOSjIUrbtHZnB8cJ$S|csJi|;yI4X2ExTytAfH>C_eM((F(*H{_l9Df zBylAlrL%bBqS^Vwym{cH!R}vaLd_b6$2pAp!Ee6W^bwq5*-MZT+x zJ7?_;tZS9C#*rf|?2Ugdf5-YoT5}ZB$Bk!R>NrkdM!kWPHH=g5ZkFZkB&E`?RzkN~ zvJ?EqA8l7!*Ia9@o!DH^%n^P`g9PG`@G(~hrqg!#Q|`2KyKPjyoesWTF!eNPIU^YL z@EyZVQ1Tv&55oxOqRw*&+igMYyI&1e^|0{flBJRYfEqyg07}fZGB%xng#JWN1kweq zrQ=ahn+Sp}qaml}@K(e9VKnej2i+o)VE3Xd&RL@jVy$yE=JCj)|1r^{j`YA`d#&?c zM$qA&R&M=TiBV4m@&@<1U7*UNyBG0pY|n!+fskCHL_flGADpDEeFHV>EYy;V=0bwa z&y@KtC<2!6h>ku0Jtvfst{y!zf!2N-M&SANp+^WdMj8Ouo}m9(UPrkZqHA(97Z+$$2OhF?7#L)d=tz1&@+S|!LThu7o4R`yCz*j zl7gMPI;W}9#0twsSTD4^)muK(##W+O7-fyt?NEc+8#2}+DJ4)Z^i?7Y--#1gw(0+U zOi)G1?jC=Z%otCERsbj?iz|xjhAr+|&QduIV&DTwdSZGKNW#K?sn}BDA-xOy+ML2| z-6oe!tL@*GGdm6`SCRi?J@c;%Rx4uCikBr8Rs-u0J2bhTGD|*MB zCFLVn?CF0BMMsaJy@yPbnF^O@#!Q=jcP6V?b2FkkLx@4$jqcBky2tF3!NfC5dXFY5 zRqtNr7P_HlLM5sFoEyD3)%p5p%imnQ>7c!0;ZkM8tc|1ORl74)<_jy7HTfj_!I_POw;~X{ch)n=>a53URMnN%A?7>?@t$mi;(rF-hi7j zDXS#v6>rsP$A8-AHH?dGL^*UCc8L`e%vE4{j}R-zm#Smcyq?^AU{Eo8Q`nl-Uy%uq#mg}h6Kw9ctQhal&4xqfxe$vdt@qGyc@ zFqcVdtg>HfxDfQ_b{DY9^PcwHmES8c;BWVD1M=YEe8QfLfiUoHb=~G)$Gpm8$!p`~ z58ETQ+b}MY_T2q=e=3YYX)mvqk&ovG0=7Xo<3m`RDuBrp+%;1s!9phGAyFEudf2FEuV)^ zVKRXL6H*oZ5|w2uj;YYCi(sO3UrIe^bWh!Uoxxtr`=uf?fGpnR;_{k92gQY z6C2rMETFBvR&ELlmKVlcv#k&*Rmv@Bm#Tk;lGp!2+_m=G_^T#dN?|F)chH_}qSBF& zG+sQNQp7)2$F>=?{M!j7(n*ToP#mOQmP5IpV6p>IPucF1To{j0gf)*W&xt=U@N-P~ z3@bp@ZvPbONQO|?tB#Wyp!Z+IIV`+_U-IkETm}S}MQQJPdNFg$&zE_U*LWU{{I}{k z71F5h$>s!})k7NSRWM}y<`mQwdupc&)-Dd{SP?8_kZa1u6&MlWajM8%#mi-!lQLpm z56g-czk8Q9pCvGIi!dsFCbbk|<6d3lE)loda7FrrT1(>~m0sJ8){=v?196ZtRStU) z(o`uC8AfYv!Jz=K4&@0mre@(U4o-{`r9QV$>Gbjh*gGn%s&r`;#)_L|kt&9-u9LJ# zw)t#p+VE7ekdhTb*??Aqkwve=bc5L^*S|{bXW;=9;W^|^`JRJb>M6F-Bl$O86Uxm^ zl88~H(2M-cc*WjzxD%tQkF%|L0*Yrj^>YvPJz4uGJbej=D8W-zZU3qZA*@5W!bQPL zMedpC7@5E%6Qj7+77C0zoV!m#wCFB4Ewmh3n%I&R31IrjS`E%Smf;okH}A%-v2=o* z#|}KfW>GWU2+>UQ9hQ6*`E{z&m0eupkF6R^P%?AQp86lLwW7lTS`n`kbbmns`zNGc z=$`;i#Tk8{m~v`(&a*x=W4TwGU{l}%rOMr z1z+p6soh!3M8Z0dAgFcfA3sOdz0V#-ihKnHHJZ5E;k_012{zlw3+G|=%qJ3JRL zyxoBSIt_(nK~wk-qWuW@D5`0cxYv^Z_A)VjL$}`G`&LGC-OPL1m6y4i0}Q@;mLm(*lu@Lgj5*$lb2%xUAC zBa9~%RI_L|il^R9FfyAFNi;=nE?oAi6934kXaZ#K?n9Rb%CH9VYN#)cKuPC9kZo`^ z3w1OCtOVXJ3SY6~n;@%(9?3h5MDOX@Azabp5N9VK;p#Tnfi}|(#}$^7I^}n>-9AmG1Ih+ zAYmzIyH&xyZMtW^G`5*mnhN|2)WK^55uLk1Vo>JdP1fxeneBn*K_!dVW*MW$p7Qzbs^mxOH$T z@ZQsxKxI9mWPaMKn;q4Y;FW)@oB6E4Fzns_m@E*DgS96O=*JEqMghEF|9zKV^#cW~ zHw-^O#j}Q}?_KTsZ0;5sspjAV7W2^Nm4*F$K+o7zvS2;$=5DcF(==9t>auseuDBWC z!*~zgKFfPrJT`cVUU*5N6o8ULPL@c%?+dJQ_2UgoE)f-)$LuGmo$xXX9)4eyEwdc*(qzV?Hz=Z=0`mGY=}_R18ZSnUyO#q|c& z4g^My4|i!XcpB>DRH=+X6}EwX6+_jAC;6|t8{G-Qzj(|*)CGSn?XalHf()5L-L$~i zAV)5IVY&#CIF2A}Cx3BupK_wUy{VmdjXA$-1p1Q=fnKkZ@FC^1#z>D`nE>?Yye21k4yb_V(603p{ zO=ZsCoC;mb}KC zPUAQnRNt0R=5(chQ2_UlPKi%5W^F26Ighe|OlzX!Q2Vk(7Pj^({kjG_Z`5mMojt@q zGIdw9MPGNFkVo*!UNs_do#}d3M)x(1**A)(N4)M1MzF~0rLPG;30#9PX?Q0wxO1Ko`gODVxrsVKX{>jI;q(Svexz*$7tm4Pyf0L=WX&89^G>&xr#AULlgPx*bjS*~M3Y|~{i7INO_31&r(oLGMGF!P z8yFH~tlJ&mi5A>!{%z#9?g><5im-f44#sD*vILDiy3Oq~-z3dt!&l+;_PmTq!6KBxau-zz#Wi<&upcLCb~w zz}tUrtPL-HO$5lY<<5y(5JA25wI96H_n7g%jQlM$A@UHFMT;ZvnQuJJ&<%X8^QWnj z{{sa<`o82GE2A2+|7;2c9*w8nXPoQhgEc95@nOK>E1SL_IRnoEoDm3~O^MDrjYHxV zq_wY%67}j3&oGUeyrK2y(-vJNhOIas$b4XoS~C`mQN!dc=JFlqFkY)4(ofMgw?6j% z+Phr6Qu1vbj@HA|^BVQp>Ho+7v_}O7+8S+-dtfWDOR!GHcF4p4a5zvd4tp5Y8gMwk zT@6^^EW+tP$rZBe$XLN?1kXt6m6>a5@BJGVtX;6`z%?zX<#r3u(gv>8#`0;R0imp< zzSPPoQK$q^=pX)A5ayC+Wz;*31iH|U+4TeYa?DW$^Wb19ze37cWk2c;aL;h>pdX+s z5P3x%Gn@c8nNZkp3@|PO*)KSuAYmx^_J8=R_I9Un+5+ev+bHMYjrv>8K^D@Vq)$oa z17rcm2F{0hToL*e&O`O9T8x0Bm;M)aGPRiTyz6ul9lmgF+TFlo2^1EQKte5erD65hQbL2fOa5%6}WT@oDk>E6x$sx#QevZUG zmUFDV_iu=wcFd{+*G55vk`04={=DsrIr?y9=-SD*-IRW*4a`qPw(jFIT{-~aM zHY;Cqlp4_lL=x~&+s^i(6t8mw_YLM)cKmic8I=&=ZBrPV@Je^B3vxu@e-1`V5_jKEvNH(XrF#De__xZHY=Qz7HjK zB{U+LHl0klJYn8?=wdvhFnsYJB0AX2>9qxNK6sw%J^POKt8bQQo!OR(^EkHux?SF9k7Y_!yP~_5^_wePIqt#HplKrr)c@;xZ zWk2c;( z;6J`2dxC9joe!%)oC>uJA(2UORtB3PnYqqTQzx*%?XHvn5vhQ&L>u{Dnm%r7iT^*NJb5I3rTSZZE)C zQxLs^bHe%IT=A?!kKA|5E!rauU)A3FYM~Z7Vym_7QdI)yqw6Him(K&7XX|``|Dd;^ zuMlW~j_^=N?xiSe=mOkh zD01ir5C)VxlsuF@bO^`;B!JR9WJyr6WzLcyQUwBmNYn}>g6*tkkWqcA79#j${G(x! zDV7GYSq`1LOhE_E)B3eDDd$8NO5Oh+9o;gP4jzf1lvy8AaYDh2UAwnrz^rpQFg{VORco1)TavH#v4e4C(`#Tmh~R2!TT(I;Yb zO5__hh!~wHo5B005ZP{D?-uQq_lIfI*k;MAs4v#k<14o?-DGL z>_0NW;6DUp%=S`Ew5zkiwm(4cqdn2CuuZ`u$TEQ+PZU_;})O|tgW?+j*6SVmd}@hC^n*wAb&(2;X&etO1cV40m@5^0P_u0umK&> zZpq*5l4NDnJCj^l<8p>C2jy1g?1ydY83v`ynT>}Y4?G@p^8>C>w;=Zwg8M9_0o{Om zFHQ;i0!RS*1EgTilEA?LnSelGXy8A-gJeJ?sLRFgl=D%G5qu=}>&>UqEsbBZghwXP z;m9)-eLjv3olU05n9Fqdz!nN$^$BfX^D#~Pt}`w7nMglv=uW}mD`@Y&qjWhojv~${ z=%rb3K6af-rehaUDLOWd&ctQVnX8$!Eh>S6j#(d5NpabBHiuSiiS%sWu_K;KI3%Sx zBh>-34#D${bAg>9P6+gX1TGN$hK&NwLEsCeIC`Cb)3>xQ`!3Utd4_5E*BcDR@4s82 zf%m|3X6HjnkKueEgDVqcKzGUPd^m5(HlaPMvn}fiq(7kj&@a&^#4$x_8|+a8rXc7e z_-++2mwsJ$91b(w{k4wHGK+&f!MjTC_&+_O4TDl@=17D4 zO^^XY80U&MRL;ls!?sTde?ZVTz#}5E9PMs)Hma-tRzC*$Y0WS-n^gyP7V!+#=;7x2 z;9{9l6&^nxFw|m8bX&@6@Q}ekfMFmWzWF9An2;Y*KhDaicP2^NP#-fDq1II#5Oeke z(I=U5P_iE|97O@EexU#e0f?>uIe;Y4N2~}1pCMRo>v*XCR7Mk+BqV;1K<=dlKzAd6D+{FQ@G*=hB&rv2-CZgZAz}KwA!;q^-LTu+x!9 zlQ-<9+uj&JuMC+-Z3fMzZ{`QGBNDIgcS~dfC8n`6l3zgEqLTG&iS4nK*q6=GX|!(F z=@ooyB{O1nMyl%>l>LjIz_Fnxpcf>QilBu=z@;QdG9(y>2zv$992l2@*%|c-Fj(5Q z@2(B*w?aE(H7lQpo3EC^+hS~oI3D7Bm;-ON6J(gnM8yb}_ENY$nEQnE3oDWJvVGlc zdv{;$-*_XYRR?w!LFT4q2W<#nju@AC$ixwW_m2k+b=mOp@o<;sfGC)d9dL73XU~2V zgu2kwFY95-W<-I^*$+%RXd3~N><0(}q@@(Ff;|X1NdLfpGl9r=^EMELT7rN z%CIzK9g%HONfa9!N5^C0Xz!6Iia33aVlE}pf&KgF!tgeG1i~qS?2U6qgWg%cUVlSM#k!APELFG7X66%Pc|Sj8s=vMD{Po5+hTh z;0RE_A(0FT&J(r?f?(hxTnEZIF&J60Br*X8vLvu=T0huK>(Fh6wqdBhmgyCyPsEeQ z%i&~z@60xlI3Ebi!uddTh&UfOCe8up1Di;6Syi^rjSA@(R&rzDyDi%9yf#}K_0A%Q z0KERK_5)vzq!{Ia!-Iy1Hy$)RsE8!kM!4lcQ%0s8p>LQYK(&5vwbo68loxdDUk!LUI zS(43c6d$>eMsX<_^yl}7(APiuP;5#b9XXdm0qkI`+Z{!Byzfr?PRG;M=oH!-l}vr- zZlrfdFQIMxy>S1S>Nkr{Tu#%SkL1i;+8LdwvLhx5Igvfn1+JRq_U&W8an z1~!6A2t0!OYbwBGHa2l=82UI5@D0w%DocXF$hHHQ%~=uzSS3q>0p$p+A^3_Q8@LXF z&)__ic8T)=$3|v+H1nQvJ`}1BMA}UrPCn)XsmG3^w55DGa6TluEe58P*O;f4L%k&; zB6y&sz8{eYdC=6uWD?c1rLc-{G7glY-0#evAD`K(^AIvY6%#@6CCkDaE#FL+@LS4d;04>AHsCO2D^U-aF7Q&YTqtcxHuyQ^y^_@5$ z7zAczV5&}D3JQF*TO*eJ>i;gSbm^SpQ}36o0GCAC;X<{&JS#Im&wjw+kp6)*H2R0k zdk$qR*$-Pq3?isd-zbRa_DbIIPrslG-9d5+3JSFVp-1SqTdt$zs zHtTuV0TP6)je#cN9f;W}fkOfTugC-#;4B1Hk>N4V$R}A6*gwdWV3HMidp7JLlz71z zL*@gVS0$N`t8E%By~5519FVdkzHMW6QX0ca$>!fBTxs3V`>boj&m!79iF+o%`I+rD zvnbSdumK-sYtTEB=<{0ttR3J>fub=xAGXFN(vo=K5FL>BI>7lrMB&EHd=TB_?(Tl` zvTbM47Nr4ggLZ=QgHaAeg$N9sIVdqiTo7$(bLStlH(ETYbzV2(rk|2Gx+KB@$PH$( zaSEzS;2f2>)N=zpMfl7|M+k2iy{h@1V2B&JGO1xb~!IEFFPwMD?2kYGe0dYE$8CJi;>5V zAK$~+y=BXmgQ20J=flFnQu+VY;Naj(EHObrL4N#yVn|3xcV5@R*Vp%MBDxvEyH@wf zNf2;6=|d|6wkBnN3_A+!j2t|hOuJ4c(dgCTbTKiV_C{TxyE_b{Up611JuzwIy*q|p za9=kwbe< z*S$Bfs^MgR|n6o6f1~^i1 zO5ju>yCYc=Dcyqo1BV0uasA*rY$NuNWP&PHr(JH-Wz;*9e78b7$Cm;}LzIpfm$vg-o2ON^9dusd z=ypv4KhIqlt0RxaG!8r z^n3H$Uukd8{`RKH#~0SymAKyJYW^0NJd{c4jtYyFBT-Sw3aX#=r{8NG__)$XBr=9R zVs=pBNa1=A6*H5Pv_rX25ZPl}3Fo6UiDbFZhw_epdNljcryY-N>c9rBJB|&Q?}dm$ zIk9Qerh87DIB|iWpK3utK|xk}dU{MkLc(Eoat=gAMMWPydNhNDcI?=Zvvup%EIy}9 zc5I^A!P(Bv%_{ysf&YKWPR?8Y{{C%ze0-kf_5XtN#Gh})GtaxO#{%a^^@DOC=xE%w zU^dXL4B46#I1$Kn#HVD^j_4%X6^tIe8lAkHM4KXupMx_> z_^EWd@1e)L@~yRUJ`iLA_q@!4@gOqB4_N^i;N~g_81P~XI1|i#ARG;mvMq2JY#s15 zoDy6w>>vDxfah@i*jC!0LVQ;mV%s#HZgw83Q&QSDq15(G3SwI~Sa-hlGygl=>goHb zRjc}R?HbK(SgF^oU;#Hjt+i*Emf+0q`xvxNOW;d^axp6%bIMiT>0qAm${g9o17|ks zY6SB`LvNeAZ1Z21c!&ObrQhz>-o88ft@7WobXCCa{j2OabaXqpj>|pj2?b}Pqkq8tM{zEZA%#jvES_w>6!->C4|Z;Vl-%6h_{_}AIKHlwq@<+$xVX67 z)2C0zv6FLd-@bhp*vUB`9v+^^aw#-4^cXug+u6z4z-=*uoth#1zjI((cyDRdfC;^)2Xy%TO@TD zze3*@%clG8rhB@KpwMGii}r!pwASoCLASovpV|$aL9GYQq3?bQp&;G{S&?&z8MOIC z0!3azq#%28zSWbT@F|M(C2b+?VQv$Js>0wE+S7x5 zw7r-~3NP`qGWctg@VVyjX~TdNr6Y!=q+88{ip8+Ryw>IcXXc0Qx-ftK{M%M;2)}oQ z->zmWe7F5?wg0YBEB$u`tn}NJuwm07S{HJF)&%V(Zx%QZs{?jhIsr8)-h5u4e?JUm zRB$Lnkl{dGs6uAz%fCV0nUjGjuQt3_X$(XiobJ=nRR{rmS5I~a8F;zi2H$bjQvtgU|J<>h6h zrly`@C+8SDIVU0_BF?g-lYQX8fr1@7cBHejgR-@Fc5q_YsX>&v#cnC2tCyzM4U;zn@MYjbBDPqT?y-M56xAkk4kWrDwmLu8#@9 zKJc3jdr#3_9fr|%WAHm>)#|&zpBjEWjkil-M<a5Su(4{(I&cLX8D4v-nJz-bcsH|zMisvphzzci^5#I3Ni7%H`Iw<+ zEvy`d>XeIpC@-R0T3%F-HaRm>5g{?QCwQCKENGiT!+qQ(8uGKQipL%X#d%C zc3#q`>31{eo4LNUDH7vFFzzIgE+uEup;MRXLPBb-oz@o<2YfbY)EK_Ca5iiMkm7uR z7r+$=a3SDju7H4z1D=9@uTX$V!EungcJt*njS8$BfSMExaNpeI;Sqd_utN~EL;pY} z2kaEsIF7GPktr^WC-n{k*l~Bf?8M1=S^Z zSIHm#q9J8wt9Z-<%_Q9lgBBeN9ZF_2a#`uOYd^9P*Rl|G%aOPq;dY7VHWH&B{}DMt z%`BV|^a)Ym=qu(7ff(xek7bhH#WsjAh;xDngRO&thh3Z$q{eNX6v?6>f`u#!oD?bX z!i*;7EQ-0z3t1F%sTUj-{6}U*((?E{_K9QQ*ytxXNAtCnOW9C#_dn2?Ue*plZ4o}d zf~X$(c_+HX$2DrXi=zPt!t6xk;LpFXW;K?K+roRr#z?c2Afa+Aw5kN?ma z=Ex%SgSn4YI)aZS9JMlH>ykuXPNO{TLkCV@qC4Jmr`5Ypvy+iX_jeyluMhi)o_G6^ ze)YxxTDkQoZHY>uol&uLX9q7@u`QB(3x+ong4A|uAuXgO_$lOpxdn`o`IfodYx9=aivYeVHhlKa0U7=?&78)v0U()^_{q0y|8nxycc*KvWTYg3r($wvk0~cq^?R`5(A+XK+MPu9Xp67bP?zfzq;x z&L?J27W<;RP8H5{wfl66o*_AMK1CmlJ}=||{j>8(+H@k0PR3@@7qd3dQ+>wM){`j7 zO47@+X8P@>Mqf{%xb%F&VExS}lWFv-a2mQSOn)(=?Xjy%*6%rs{sgWE|BDSEl@IpD zdw?HgQW5mI3I~=HDu&B#8e~{G05vJdet19gpCx>HQsxb(Ro)c?$5reddy^KS|0q-f z#DGA9qG9oX!VrY>Ups*m9PxqhU1 z@^QrRD9!o6IYRN6oewdVb)~b?Z&!h(0bT>b=R(VUcG7a+!ZN5eLHlT3=mA>Kf^ivs zTaVI8|J~$`j7`8E-foBGekwySMx|~0|9;I)BxOoyS2!V(QG!z{Q2|>+-BC!NGYj@1 zB90374G||r92G=U%~=%OWAs(Cg96eqXHnp!z|nwGf#5UxG}5jxj?7LKj)`-Sb8{F4 zQQcm`6uXwjy|YVH4=RZ6nV%oi`*QZ7F4L3uc7dW6NP9_NFiWigrp;yJztTpa!|_N+ zNT6lQmg$*_@bGY2ym&F4J$qJn2E-YGgRpk(T1rbxV^4$~jJ!%uO!kmH3Zm5c&hpCZ1K%Awuev(pSPx#J{xdY>uT7dm~85iQ=CjLC4~0 z%gH1<8=p#hPbbll3#qjGI|Mcf z0!#8TS#T9N0-S+#b1@7D zJeV?&Pikoq6+qjf515sDWj>J756y!6CW2!@%nl09p{z^_`Y$pm=o83v;6J`&9k!E_ zGVD+K3B+Nr-E~vJ+1^=}#(P~BWKB-?r2NS4x%tPtN9P>v+LNg0zTsZUy^}UAciUDL z0s;b_J%9dup_N<-fU%E^MQUm)UA=l$|Bn(XVBfxd6c!ey8~U2NA^6!G!#muJtOJ&T(h!77wCfFlr*h9d$}hYl&0nP$1} zKEcNDY%3%7Mi;zaBrY|J5>hkuY{-_VM7olgPCcfqrl-G{NUL{5>a%Ix{gD@SnY4@& z(z59M)nxixhoLl+mv4zqr8RrbQSc$|pI0*IC65L4`K)#NVDPBe4EizXAdU6jQOx?rLl7jB;3GK7oT;~pT$}ZfLN(w@>xM~I4nR%H)wYevztO`1 ze0s1S#gUbOt2iKLCl+?EIXJ2MP!$3VD-SA2K@2=G?m!sgkid|GcZhNrkP3`bc#UuZ za03w`l`IJy5~R7>f9RpjaoeCJVKBLs!(kS@<-F5a&6|IRPGWXGWUv_wWQlx$?4W!w zhCs?`EIZ9A|LyCo4Djofbs_s$cF}s@V46B@3V9B9rxBw(Y2@hPG5Ot1X>V_hd--rf0e+S46vZN7K%x!i4DUa$l5Asff14Li9~0Ye|g z`%gdpq-RC4va*UY6ZkKmbMx{kCnJFlt)EYO=M19w)gF|;emI?((2Gut>PWPH80D`V zLItabQGxeRqLqUv$$J8&o{ymHe0C7nVUhjeco;W=%nBR{e22)f1o)2gyL9OitzW-h z|Bi7aUS3|bdi84ES%Q;dKIiKJA1BYl!(%WvIRaAvne;S5>+2hPxKulJ{;F_-9KQg+eo zTU$=X(cjofSrmGhPRFHDN@gbcA3RT+BNOzpuUK|+0`^DK(4}F#|1`RiluC!r7VfjW z5^y9glW#2?3|r^Jb|Mkj7c!O)S#9tW_#bu(0!!xpRpmNHp%8Jd4PJ+_Z{-Bkq$IX& zoco_&|N2utMX@JgTZ*k?J1eHGt)nt%)d+cDA!6K#VTYRmBTmX;5J^TRvnJ7$Y2(<*7)w9Qm`FeHy6Llipjkgo*JaA=iMoR^bd(zn@c53t8So{2`CV`7 z^Gz@Myl-#%{F~nN*;hUF|GmHLL4CgBb?j{5`kC^NF>QlkmcheWyCI)W9tCsqgw3YyJ^c%`L4VEjwQVCmAO zl$e-UN;YPG!B(3k>igMSE=I@?F ztK2DXjXQrIOlRkLQdU|l<-#|x@DI#R1I`JV7&$MjgNS1SL5Y~3pP#LHX2)i>d6Cq)-?;A~N&U z*2q}8uj^Ipu0MH(w4|86mTq__QxdCUq2j5lh$maQ&$q{Y(h4D zIA$@uFk~KWKV3Lw@aD)wicQOL>##gNzfSMExhTr+@<9qn@(2t}~!Jd>%8tfdDn@jl> z>{-d8nfsFJPc;B(c!(HpFd85dWyX!d!*4H30XC4mw#zXRf>F5|UjUoO&i z@@IIZFoe-bAd+^4^I^_>fY@x)u4coySce%ue%Y_q1n;vlzRMI0U=P^5mliMnnI?=M zM-wMbVCP~I{WyO%Em%00#*80D-}d{O`mzl67)0ZzjH881exgceF zDD@xs9ew^~Z|d5;3%&Q@+w|(2FH!4uEvV^pjj7SIPgB!oji~*L?da`y-lUH^e?&dH zccng`e@>r${sn#Y)mQXsx31K^dpG*u|K6lm-+Gzl6?*HvH|T>-@6#vUKc-$^b*HcU zeL;iR85uZa0Cnm1F}?HN>-68(U!Y~{{ApFuEMUb2<4!tt{d^=hlVq9TjL57aQ1qBt z3=gK%Mc(jAKL145^OlCT61$Rrq8l7t^dIO6IJ1Z{A!3PT&?VBZET7>D;3jrJ_8B(v zbwiB$Q>RYpvsK|UN|| z?Bzo!>*xNIzM?;+E&HDKP8md*SxJ9!{0n84B{Fjm{I3n0y)&Y_&0WfeqnVll@ z`pUqrUAt26zWZ*OT}B)b=zIi;q&6S=1NYmkr>_fv$1XPwi%3a?!E9~ZDlyAuZYSF} zrHjBBiH=Lt{oOBTuchbu&7d8plG%w!BL72Yss1bdXycyKbm&|%ow$%h5BD5LfBVRj zUSbF2{_f-G<4MbDZw&9B_j4g3U3WaLq~%cLrBr=j{F&I463z%_x%z6zn8|!AVH}#B z4+%WVcn>KH2KS>+nP+H(Q)?TozG1nkCJ^8DnaAVX)xPXULfgg#5B>Vr-S`yE0d3fn zQt4sNexQ;DL3Ne=sHKnx8-g1Hfx!Smfta%-a0(Fd!VLxan6o6dgWI84Fr_M#3_69( zR3Ni6A#;KZigXqsHBmqgrCrwq?km?o^o^khXoG(sO<;%P2X;6h%U3SZosQ2w?@2v+ zb*1mV|Axl01G3R~9qrz`g91YRXwlMzdPd~yeqYg>|9gYlv~5XGJoPBcBh=xe56ENW zI11dni`Me~G01#{F9xQUJvA^KA#5kI0)x}psn~fal8&B?p|!q2>=;d<&OJKNN8LM6 zufE-A(2(!w>u>weTYMf(pKC&^H-?y|BQ6yEeIWBz?%*bZ!k1{1d5jIx+)~4B+txQ6 zvW|7{UuOrNSCvHfq%FU^(vO=D8B*u~JipKh&<)TLc#aXsFgv){rTpF9-EU?`p>jg} z1~zQiP&7N0KpX;;IKlXr3_oht+1MX_fo^@RAMH4P zhBA5m-k219TuA@xZUno2>nT}jYro$}AxL}{V&%lu>ek=?&fBczdUHRUb9S?Jq zTC(v7hJlMP-a`yU$;g}eNEwSYgygo3&R97BH7yY>o{r(ulX8CPR}y4}O(~^(^7;nY ztP&(C)t*$SJ&>CO5vN45Bp@6Jyh_QEKzYERMV16N9!do%Fen&gNyI6E!vTTv0ja?l z7DBTca8_zZS?#xTn%VHSC%)kaY1!(PH0g&4G;PLYTC!{rg>T(NU-$ijKKZnhp6wVt zb_8wP5l)ej$7oY{D6Ltyk|s}`L>)SPKuudVrH3DWkQz5?NYj3tM}gZ8)4CA6%<$SV zbO(Y3Z%JPlw2yo@9i*VGM<^)#2>Ax@qZMnzY2o4knl*nTjhV8X1`Yp-`VE^;Uk#Z@ zpAY(xdi0x4pME)>os4nx`FG=K%;cry6S|w$hZepx5#vDC2koZ$>@4-@{Rw?P0E61U zr4}ulQP*yt&_+I<`I;AbhsAOe!QqoKEExwPrEXTy0lDWl6bhnyRL>jF>yRWK{`3Sl zojlV}`gqQv_z{eNLjq?6&$KzBd0mlmA0MCJ@7c5GTI!$z5Q84FWXX~eM!y*Ga0<*Q zT+Z9(^SY!2N=QuB%c*kNp}_BtESpG~>xNUF_YgWcr3amz(T8ZI2j#3CK(uxQ9bGq< z(%5m~&G{s*iF_1C2V+n0U(N##1{@(dPn;J%n}P4?>FKm)%^G9L^?}bNl^wGK+~m*| za6oWx;ecSm5{wg+F?v!aQ<)A3_JjRlztBx6$GP*Jk3MVabKv5E&AKyE-0)RWw!mpP zekqkQv-2q8N(O(Ar}V5`TFCtJug;#-;=Ab-pTW)tI~LoclPUD@X}aaresthWES-tZ zq_bCzH?p%MxaUmCjEmpF%PIBh-2!9K*6}cp^+ezifl1f{GR3ZWvKbYnt_8T*{HecS znp-OepeE&N+eY-zuWv>61AR>Tmc4PV&{5DGaB5Y*a&q9NiQp!RLjr>WL?I3dZZcpbfqj?NQEpngYHK5u8<`Dnv%o>vylp2-#zsFOV5+H z|7KdtPKD3r1GI8&2ziWOKpta$W(Q&(eeFJ%zH*;W-+KK_gC}^C*9F&&1Y$S$SGRsdxYjL2`A67i>XsLcWT-0BYLdCEA-G4FVG`Ty+{u>^m3<{UT#P4z5h0EbFCze z+a>?D+kS%w6%Q%W-ZBnErl*sP6WYBpjR>bg!HI6Gi)BAf7B{q&SV(kFdhEeJb>QZM z;)jz9!vYyLlwzWPA+UfT1OgHg*_3BnqEO{VU|`@sj~_ptWZ20Sf;bzPcGng#_)+=< zgCC#G!0+G;q@|{_6T(hMeh#IiB=GVa$|=aFY?foICsOu?F_h;snO1%3N@>dnQrxO< zC~f6PI=3^F(lW9sJvEckbFwKfm-o;6$>;qR&Z1R#3~@9tM;4`*^ z^AZvgLdT9B(@Vy-Y}umk!>X*TG^C}aB`;jKa1A#(X1)>!1fQWdWRS2qcv0bdY6COB zV84i5f=|FDDA56TJoBH2pKiNy^NHP?qUzq;(W_cembD`~krL9g_0MobwnZh;;g~qO zxASoN{o8|B2GUn^*3*IW>9qSa-Ww86f$YG*iLu(}4@(1l_`bm5FgqVsV?ALYqA#Hz znO`t$4uUBov4#=Xy5T`92cV|qg6lIGe0tKyB>N#HeUkkU$F@pJL=|cWa3jrPc1R>k zf*TLR1Dya$280D;1V%3ePKwlyn`=I?FNZqI)TzsV>$~Nc$uPer>w@>uO79gkb;d-R zzi<}qJA913`06wI_>+#h<1u&sY&sEricZCx(Mzq?tXoCzcl;kUdiE*0<1fFbVI#ft z_js81=@WK$-9h8$hS7*wp)_(@C~pS|q|q}1 zX!Ohg>iF3>>ezE6b?i2To^I5hW-nM#Y}|);Ab(!7o`!k4QM>l7Xvol^MeC6<>GjRv ziQG&Qfik~mMF#wV0IbH_+z=>;?D{O7zV^oR+~eJ8k9QZ!TmN6mo86o;r#7SPl`m1j zp)UG6G%jxMMQ6A4EN+b7XcExa{&x&7$e-2N1@pc@6P8bMR`Z=!*@8T9s{UDSR3IyxDjOgY&(l$?>w&PxtE zG=e{VH^ z{r2_SVsb5wVjh;b)-bj``}bef#_R{A#UKCJhfmSm&&=5m@Qze> zKu<`9Rynpe2yk;naIDLi$3h| zAq8wXT5Nx2S?;ry28>-rLAx$dgH|8WxLG0WG=#8&!T;HD@MMQ$D=Ti_UFXPa#s(TZ z<`?>E&~)n3XC%Gbxj+5)z0ax5D<6~Viyi32w|Y{?-k#(>aV2&7avXU~@um?oeQEgg zAR0Mi6OEV=Mx$m1)8_+zq&MIHn$Pb^TD&sQ=A3rZiZvU^YosSV@zfKvc~_xBhRl%h zJ`j{&$v6;1p+E$PW`f9JNSJ4`5ktbE_IGv^oa-HBHm(cyb}~NqAd2ik1xLG5!OjmU z>xZV4^W6iKnrv5o}Cf zDm0TT24oL{gM*E4g^*Gw%y=abLmy(EkxC%z^a0>(oMohBP;zFDzV7(CS(LwFEQJqz zi}ug|j8-lfN@HUq=$%XF=-qvX$s;S924yGH*tE;^>bCRd*<15EuWbZ*ScX^YWpVoEL2v` zK~)Q0hRCOd{w4iP0;`h!Fu%ZB#(s!hQ`!1S!3iJ=1%eI$0il>hmYcUN7gh)C8ErPm zF#tO#EQ}^i8Baeio=>|D9?{E_y7%Zx!-sp)-o3kNeefPSf8i|cJ+Onm__`N0Z}lwQ z@#jC#yq}jA?Z--1`0gbC@B`G>^Ct@1pGeQN`G6gcjqEUlv1}$!{=ax*Bz^5RgYJ2- zA^rK!chU3h|4Scs?m_*Bj-emsE~Q1Q18CWXa9Zup``UV#7O&Vq9lQ0X!K0VasA(JN zy{;o@-0WZ)IXzh4ujkY-n*7sN`s6b&df=hPHh!RN6R;c z7cF15aa#g65l8^hYN^4MNCE035h=JK=g2OI?D{>ODn~Yh9g^IDw<&+yhb7lVb*D?) zKB3%WHp}apMD?JF{hN&D<}(`{QsQSt1SqeRL4e}mR=9r!1_tgnY~%`K$BrHPf3s1J z&obSv8OR(U(;(a8zi#~V|9o~j(s>>J!|lk=&E_8@Q(}6C?i}o1KAX-g>POqgenc~8 z45IHZA1Bw4E##h_N~4m~XhKE~eVd#}UnM8e>|;kL=4vdZ^KStU_aT&;o^!bj%gW~Zjn*@K5@$FgO#Y^Xae?ca}rh7YAJULLe(hzIQ$Je-z|7)#O7r}TYQ z1pD^wOMLUqH*r7BGho4hgaZP@ALR{lU#lu}Dtv%_qu<~-&`~%hvgSBGoLe{}aC8w+ z5oZMF-E{c0pU1GVoF9BbP4DZdgr7{L%SqY#iw{p<&EU_O1dn>6r7bPiG{wYfSNN3#ZGqawIAu*w?3j|Fat(&&)eAwpIEWvb5%)*9~1- zu24-_yl!)=b*54&4Ah?U<4l@4`v=;zWeW`*=1w1U{2vV*IDpozTSHs-o}fJkBk1_? zqxy8ZZJ%#R|M>UadaN6$8GNzox67cPtLK`+15 ziiY+5Z}ELP^Ggo-+%IkI5XsF4#V;g)Xs0;0=0Si}k_O+jX;b0cvkqX}wr#qzF?;rG zy&P%9iWPL^$Prq&aG|lqH75k6PLky)=4`M-g5|}a`vL5*q^0W4h@SJnhunPjLb53{ zHG?7}&eG0Zv9x&nTnZfgHqDqnir(B7L7r)e)?*?t9*MIS)FZ>SDTr0)8G(L7)<(aEFWkoU3p<&dqNewCOyG!|xKuds zTqN{l3VBUkvWVLg&%SNe!*;v}GNEu>r4&<~R&%+vG7M`c%+H!QAh>sMK;THi(T83@ zFcV|{U{~P2!^S`#fD?-UFWl~O^9Szt|DRXjGmmUMY+ z`k2|#mA;1KTLrx&`+;jveN3Th;N#vT@S^nl#Uw#{9UMrq1)H zS33-(5kH2p6T%M2j1c;N_O1fHjw*W(G+}rDEG!GVEVi&XltN40qBYzd3KUw37D|y? z8m&9DrAFP|8*5T`cXxM-C-3~vH+i?cZ!$?<+|I}EBd>4d&D^;&bH01zcK>rB1^1pp z&%e=(?z;D3niILqEVpa7FK`AQ&%Btm)c4Q1v}VUiy63UF)RXtuvEM@KG9ZcuPgqOS zqIXmMS3V)nzy6(uj+(^Vxt84xU$BHiLWAhr@4lz$+N|kw7H+1d-~7^pn@PPKFsi9; zST!FA+?5DzC^LB=jy=uixf<8aC~f)slos#=CG@RHX=@sjgGGs%oW7fhnZP$UA=>u2 zt5MEO*xHm{e!-u9_~QBW1a>ymNA!4|1&I$GTKws?_4qgG^A8))i_iIAOLV`wsVT*6 zZhCE<;>@(&%`xYPKI(}Vfy)0-r8QyfAwC~rI@TmW^&-es-8_zX{oPOOuVkZA5Jg}1}Dr{gcv*<{{6h5yY4 zJ`%|Zc^qu(|I~gSz4YmB@@{gN8hx;l+BWM$P1=1!uS}msZ_SLMUl;D8ek=D-w_!7= z&5yy<{pXG}rFBPI7R=%zqyxo3ShQ_J8`}Ir%YSM`OMdu)7Pe?X^FD7%Gv5D@roHtx zO?dS+8u!x6G~&4zsDEuQ8dKMY#(DYB`090OTn#_!R>z+PhlZK$kW&G|=b1Qn?p#zj z(-Y7kK=8a!g$0Uogi-Y&Wgy}AVQAp_1*1cW5j@v$ta!%32*#)_jHa3|z57Yy@Xe>s z#)uekn@bKPP%Ym^Ex7$~|69d}8jZ$tKzTvY-g+SlTo+uUJbOX~1rBwO;X0{%3->#` zR}dk1zQfy~s+{6_W55D~o3Jm`d~oniAO{FS0fSWVj46?Vzxel?5C7j^KmOy%2M2Ad zQ*p;ppDGt2IFvv^=vB|h|JRS#%dEe_`+@sfc|XwCaI9s0??xsa+ zGSB=kvC7`+ZMP-@#*O z8gDmc?g|<|eKC!i6iq`$MNs#CQ>jDuan!cQ1e&>YKSi(EMgO|L0=4Tgih}#kqHe>Z zY3=?iGH@~Qt8-SpRg(vLs4A?xIei&ku+p+g7LV~;&TQOjKu^5N0xGi2g2ZYGrn zf(HQ}4#)$+!=udQfuwBztRbp6T{EutG^NPtJ!ss>-llj++t7qk$JL{R9#tu=Z*@u@ z=0ho~J~ET9b%WeIeN|K&ToWx$@ZeA!O3^|n?w%GYZpEc|DGtFcxVKQGxVyBtJCx#H z++6|$x0~<3cip!v9E2>Yl{;AIpxcaNxeG5JqqDs0?tU6W0lAS~N=(+t}b*kiI$99Hz$97~| zb#gySbrP}*QykYg^ERFleSNEs9}#@jcGBgLB=&W=iQ=mZ0N*HZpBbW!D_K?PZA>CC z!;7tDj)sAmWd;QA`zXdp;chiCfY_d!Uig|F>eaT`OO`DQ{2H{h5a@L zs2rgi)}(aaL&+CaOphO9!R32_?*K|q4}~PsE4nRRgW~80$f!UVpOm3YOjn%L2SJQ% zr;~Hqz#E(!ii-fy35u9GEHx)ys-Q;+BPiHEBuKqnO5K>GA|!}Qo>_wa%Zw>|U)3*5 z`fo`ocz$?@$*3gMZ^EmO^LvUxjsv&n#3epwRWptgXEPE_Z`*Gsm*Dmf*|zW!!aBbj ziN!WQZikg9b{@@x0U8ur@6Xo^daNg{raNSIq#_xNIvE9r5@#BN{+D{b zeQGu@{WCl9@-xm|zW1>5s+rnx+;lNdoYAONC0_Eg;sYGd$$jCYl81?ZaHEH3xbgRE z_{{XxC$X8FM2o$t`xA0jy94!m3uRnCxHi3Z#cIOyb%3X4>>Y} zdM&y0>Lu6|2IRkQf1g}FTX=HmjqA&KMB3K)4+(N z0$ID%R9#1rSLWNfe-c`JSf} zo4baIUl?nktHJ1a`2dfFJFLa=S@ge4ZxR2Nt>j?qV#9I2^|!HP&$WKvlMK(oPOC7j zW0h}hJl@L3Yub>GE`9IF{@EuhTXOXLrkK*$n6EQSGW2rK?OwgWQ9RwK7=ILgp2sHP zZfk|u!P@5So_@Qt$LHVo;WG7oJgq}mZZ2On7x21Bp!EZ`tT=r= z#`2CZZZpvBOEptKhf|frS5NKaeh*J6GZlA(GeP};-6tWhT_GA_=ZGJbddgdG;tJ6}oK>p}CwnE*ofSJW0`m_*kP z%63a$uhBi|WEsR+G>ZLymmCEG4g~<(zw_8W51C`rP<-6rh@X5IU7TEbDVKSh1yN!h3A zXno(+1m8Bl{p0lU5qBcJ*IMPq;r@>oUM>pIJ%`>;T{9IYA4M6b&_^7*tG{tm71*_t zSp6QryAw58q`cyJn|3SFeq|?KW-uSU81Q1=qBaRt$ZBpCo~?45*Io8)LC(7;GREFl z@_usH4w8$7lyxK(KO-8QA2eOw8N7J)P2|dEW>=vG%O4LdUUu5_5Bzi6o+1&+ zno3ze6I$O_4KE=-X`6}v;YbA*^{CG4Lo5u-DR(Ak<>HCsGVb^yq8!F$s31*fZQE5e z2|wqSJpc9iu%0Q*`}LQcEMCmXYzO_RnH(KHiDS(4nOyW(hi3-&GL1y=FF@MK*~iPr zPZ77Zp!4fIFZZJfUovLbRM$_bBks?cMvVdi*SY^5g}=@Jyzuo)rz8WH*MIhzSW&CU ze;=QPgN22){U-btF_GU?j@V2Y^rnJmuK(&&?maaw3x5<&uN-r2uT5|_8c#4{SKVv4 zS%za}z_N4r+R&Z-?%NeQNBfKv53Xgu$POHk630BuGGhS`xiJPGlC1@!kVgYiw4b#S7fo0MB4wDfHOSSZD zbtA~1JMk~rH3{#r-AxB1CE|spGL7HSqi>hL%j@2rn;JcW3UG_70lEI^c)V{xgF6 z+AY6o+4>zFz(H?Ka_soqY~~U?t0N=iw^ps46KOZ=1$T+dH0rsoY+kTm8Z&&IJYmLJ|!qzvP5%S#(qtW@~y@R~KwZ`il7LkK{)h~=)n1j{eq&eU6SPuW_1 zl#Cq39^4V`j)#h*SinkveUA-AMT^QLN8dylr&(Zw6|lw`VeI=%wE#h(dVe+qFTCnWe+4dcW?NkP0B;Gt*ooT;W+3qE>I~CC=3bY^d zw?(JTD_$Q_Ke#3R(_Y8mL2mfp>2Ny1Vw1&i^~R2n68R(i?H3o#`|Y2!GoCh_?bEMQ zgIiS#2!4jDX|KiaQ?4}*9rf?dx{sIxT0N~N zS5WYJI=Km_$Vr+=v_X?W1>aQ%-#B}IrQH!d^TVmCfyxW`JW_Y`*QeWmrAt4iQny29 zSiWN7Ni_WE5$vDnSrtbN@nJmy97#O{FHTk^AT3f)gf(EIPZ;l>)&LjhI%wntzbad_ zKiNciil7#KyqOili9THAfpCP7e!ze{${jjBDhQ;}(_p&z^wk zGx<%Ew(q)Vo2=GCVOdcLM(u<#(8UfWeMZGx8UVP!cOR{k3sBQSL5JE*$YY<%FEDzi zlFMP=r>OYG??A}RM2}_fGjd=&Y`*Rh+N`W&QJ>zgw0Pzt#rqSx(v#R0;SOWNx4%f`1HA%Pq zoJaYCqs0SjZkFBeGCOR=13MfgV_NW29d{GylggDk(c!D)W^jj}9q=B5(LXPtHzVvO z!U$HR@$~i(TxFL z&9uFhknZMO(XO|&WXFeR|JCiSt&iM%7y0;aP1?A?x3^)Qmy~^@#Z(M)7vWCf7I0!F z4X4tr!kiwiq}!nsi9VEV?{8q*pg*W7Zw)*?f>_trfDC~baY%=kv*peQv%hbvnMl1D z56oX1)d?vRVE28n(`Z5J)~Tf`n%tNPa^tfkIT8QUnf6MREt1XceAr9h6AsLj@cL0D zG_?<(jkcmR))A}wI>o0?NC942YADR-6pCxW$&p2tt`lXQ*v^W}t*bq$uH)s5xW;TK z%;eMnw>{v;I?l%p#8W6La7MYHO2pSiL`1YNFVCU5JyM~PmVIgTJ}BRlQ-B`+q#u(e zXA%+=!!d*F^#l3@`T&cAN0(=)`f?89-_5N@QeK<;$9HV??!kmNjCF6?5PsP)xK6rC zvrh&1t7*(b`Xl^$dX4VRIwN2*ibVKb%IJQyWBR10q`z$CqOWRa!$TyB%#xXMwv%R+L;^A5qG80!yo zz=agq)EQICRCR7|>5rG6ZZ}T^nrqLUnkip1OJ$wxcezQHYiX{Irz5=yDCDwz&vE=- zj*t!|?I_#f>Y|5Yuft?s^rSK|xeCTm^GY1%72qnr@n;I;DP}8Q1kl5-bA)R@WtWdd z?1&z85{SXs8o$%F#uIWL?bpBKgin?e;psnwvd|2NPn7pCQay{K7#Fe6wkfM86zZAP zg50|dtQO{Q#_xVAoCC>>mfHJddZRUx2QhmrO%L#2V-nC7WQuyGHxqjMqd}n; z(0x#Eg`R2GR?tP8o+>$;ju5Ng@V8WL+5OZlL6QC2%>E&%OVK`Xh1gyQ@ao272;LojrnxmPnO9^YkXzmP z@=d=6ba%c-2FJnq-Vjvz(QK-aB|6k!y!0$^btdKISzw*OZvLF$P{autkB&~3yYq#^ zof3^;i1Bd7k>~1FOGMATNgNb5Ek9>*V{Qcf)QOzTjt^Zd0LZR33JL8k^gPWE8r8&R-*qe^RbmQuY zx@JKCFG z5pZkoFEFq8F0|{SGGKzx9QoS?=82eiQdJ+FfYPIRJIUbH3Cw4K?z4j7qrBpWk3}49 zoRRYivC+j5W0|&^52hlEToLjg3>ImlYAWdUXBeR0wyM-VYjH9gD&)wms?bQQbnm4L z+0B#yzPdo_laRV?Br(|5cY=#aa?{IxCB73-qS9LHZ{DCzwnodt$$x~XNG;|3pX|Y zp2meYl3pqO!#?nHma}O@7A-ew;E^M+Ql#E@L9A7J`hLc5i0Dwrl*ir5gN8y@{3WJ{ z;AegDi?~K4Z9tybY^A~XSMB?%*?#B3cyyvaibhPpym|9KE#12pNS6+J$5Bh%hind~ z97X(YEh)}ezKPtJNYMlsbghMI+MH3sPpyMyjvr37UUqh8+79CR9MyNVYe+C-GHRoK z0{--}2kDKjAfciTghp-5%G%8A%S1vg*7ja?inyj4G5|cN)&UCo z-^##q?X|f(>(qROlT=F#{`oCLu%Eqo z;9$C#8dX_{GsdkIMe6g4S~`#OWnw#H*tTf~4qK zeNu%y?;1S@JWtcI9D{uEAj-R3%TgQBdIfTvh3C`xtiFHr@7df)LaW7O>#6({8T|It zSffK#P|ZI=i@2y@P_>{qDiAsBl?Lz9Gh6l|IF-P=W7pdp)ECm0? z0ShOK8c}{LWF&a)uKT;368DSQoEVIG#kst=EHFPF%7`mV&>pO=&zkEqIXTJu{rh*~ zOb?f=T$w6U7>6?tqD619GobU%F#?GLqzXX82;7O%$qCj;XUcL%l0zF_`&9x8z(>Je zB^u!fb~v{L^Pm<8i*uIzN(N?kp+Ij^!W^dJSGu7S|LVMm9o9OSR`P>SMqFv9`Ivg&uqLN+oW@I{y4KQ} z!~L18s>ZGPO`L=N_N#PZPb_Un5!Z_Q4U<->`CIRuoyLR9@s7Of6Pbhf?tGiY3Y&ED z_HT?SQX~%V+UXa@z6Pvkg#IkGdt2?;l&Pg$o!*N)01ndSVgDlJ!S{gVs<-g!pN!9` ztxBgrH3fnR#vpc*2TgGF1s<9CP+*OY(2veb5R;PDC*xf#Tk04fO(HY-|NZf{&a4+B zoyP)WG(-5ixw(15ixesbZVg^*unj0S;2DR`p!{c6<+)!*; zU||oRl6ICJSMI%Vghy8(-Xa<;GBeo8kzNq{25XUkRu)1?e>^eZ{tz2a-3&Jku2f?M za4mW!+j$AzrUxt?Ua6tt0qG7`a-x)3Rasn2wK~H6pZ?m>A`^r4rc~ z*mry+J2;XXSTni3vMyVuzNcNL)=VpYYvbN>7F2vt^}sQac_XesAYm9u>kD&E=W$g3 zaT&cZX($=Kv_Lp`ID)Ev>aP67#Nge_x4>mjofOm5{|E1de~KBgo2yk#v>E?3LB$ zks&xTMKfu=C_(yy&*UlxC&`#45dW_Gj!HFSZ>?M0;mUiTLAPmqgYrFHSG_LjsoNPO zk~V_~VM>(lnFxNI6I@vE=JEm_pW~!=I&n0x@*|)11~{Ft{j^1p5vN+t%ynY_-_NGV z^(Qqjb59K%;-9P+kzy6pcS(*hpQCr8 z)Dpg_;MiA|Q5gtTre?N;pUuVgpWW-<*5gGEOATp9+n7bF*&We8sdC)`ohWA1Ti(5T zVe4AV5T)baxe0*+$nHFO7hu!At&Z9#!uB@D6S5$2eeP8s=C|HHtNkC2Pow#q?7rZh z>F)THJQ&M#s(fl9G}K&$Cs( z30o#|tR$(xTdAs{+w-lD(h12+}W+#b-|!4tlJoMZ*63pag1aLXIP1k)I%WR^{t{eVZI;Gh69t>x{ICwQ@jBD zdfZDMHh;!SMlO52vFskhX+UA(;98+m&91YVj=TwZ(7*9Tcme|4V31OxR=Wi0zHlje z;O9`b-#^580uDS3P}?eqBjHyjzN898ATDh~NprvRyx(J(d4?yy?@{7{`}}QFVZXzu!L=KBXxru zSH*Zg+mB@k*Ew&2MO?N4=R7~X7}=?DyqHT$(A9f_qkeFkeD!|!=41M2{{fLeBH}|q zn4lyY*kgUGMFjC8d9b_y9ZSn-4KeRn>4X>UD>0F|$IN`SKL z^_~3XQ+5J5X0mcQP5wh|MiY^}6u)b!;khESI9U@qkK?-@X`jwI!LGj|@xHP_YhqMA zAB(71y>n5-sIvHz$c@~;o1dM~EPQ<->ot}3F<3#i|z7^_hk41oCT&eRhx?8x~N zM=xC12sL{UB7lg7KH|%gqoA1yfj%&ZB+`W)RVl(0@ugOS8c@%DOMf5Y7+*Ksfl1TN}oVd=ehZxJ^pF!Py5fi=^^hSG`RHZ{&SdQN!FU7>piG(N0qzq zNu^``XuP2-G6XPGfb6@&C{uNN$5^@9`1)mMM5gV7nq?B?@Kw@V#hl?u`xdD0$Csz9 zC!h-^vfeR}%cnQeFU@-$Z+s6SrBZrbfioszQFd^gzuJr>%X(p($YesI@kRtWxcdqVf54MX^|15jY=FL9BOA&O5rN}^xJAO ziA}Q#3m2+Ms*6}Sc(wnRyEDcb1ucTTJK8#!y}O*eWFl5WdNntzT89VaEP{v$h(34G zF*MH8516)>IsTCxeKV+jR(m;c(dn$Z<-PfdU=kToxP^3RM;aMg?>vPqsNd0sx&+{$ zp-7kZ^ue@ENUem8MP-nr|NnAy2Gd@KAn?n&6}Iqqv`eAIKH z>`fw_;8T_B)1HaL)dI09-%jtK5(+n<4I!is%cX5C2Uw`H;J&}oRd08bqDUS_bgGm` zvDk$f903|>?bN4Y@TfWB49MvrUQ8Rr7^KE65uOA45;DLEe7yAb^99{RSrckME2HmE zbt!o8UXz~;iVXukw)8mFimH#qekxboa7s8SoPg9DJ%j`!DhpB-9}^rJNrfnE`o2dr zbr2&;-&Y57l}k%s-~qGcy49x2d4ivZ5+ZxU39`kVH~R_^V7y8~N!jc2b1n`BTubqXwZAipIpJZt~q7N&8HOhi~B-T`&A zwP<5A7zG48BpctJ;u!_5rv<8e`aNSB`cMopN?p*|sAk$&)bXG48^v@HyE{mQM%J)J z5E}AAI5uXxe&dbvw<*CYFwZ}UU)Ivfv}$!=UWf0!uB!GvJsM>Ek0~63>~`}o^L0)e zNHLlj#0Y?Vh^DF3R!;u~=v}Kf!K>CBceVK1Y(B?-)14cCJD(q_d?fCUOkS`p@MWYZ zpMc1>o;oNpSQx%K`PxxB$U*9Ffig0YSin;ch}6tqj8!}!Hw|>EE2l3)fIXA`7<+&j z+_ml>o}0@;yD47)7P%rmPv1Yb*w=B`Zq zuzGmfaujU;x3Q#%d}P&5nblVAmB*%hjC=pB4{^J=Y~y^td#u<*^<(E9PhH_$2%Y4f zx$1M=Y}^QvhG2i&AQS-fQVwFFDihAn#qFQnmJg3GPQLO(UfOciCLoAEY+QCx8udAC zF1}`p7u%dJQP0tq5b42vEU!SeC-W+fAhR0`!d0oH?l~Pn{=@r}-AN#Qh2??$5md~lx zPV(7JyPLEz*keo-q__=pVy~VNcmxgBj#>X_Rap`mL>9k~{3X4C0@ z5BB3J#y&TL!~BQ-S7)uKPpO{BvbbP>t4-t?bZ8zCQPe3m7BjsYp&1K3$QzxBa)1HX zD#nE&2#CRlhHlIU`4b2^U$;a(3wzfD+f>IOkHMkXgqUsghmsTa*lXQtD+ut-AfW1t z5p;doDGqkgRnmh)(Svh74w5o++bE3nkfqA|IN4$2SSMbES{2!%!ri`p)m3cKa`)tK zHp((cE&5Y`xWqh>3&@#!&Kp4;|Y?z~ag0L?=E0 zf$QUM%u1U&mHNp|E<3~1R03aw8vGuv^AW0U(Lodz%Gu^rg_v8!OWbW;9iKAAw?eA0 z`H!iho~N{XwYe`_dgqiU;d>$VC^}|Qs?s7e;z;Z~!9K`0Onm^vNOCNID{dXVp@#UH zlO*eATD&2Fp(d_C>7MvCQ;!DXZoP=0x@|9`%>(^_1@_~R3`Ajf2L+*9&<;r8@zwDHp#kz|*csiBbE5$}k%19N42&SfLOCcGy_O#I9c~gbY6vzM#h4S+26O4g z!33j%E6-7aqiIo4!LN-KDfq({x|FcF>6t}L4fQPolrH`b-T#_;%&-&g?>-?I?dfaSSN;9;ETq@_|pjw-&S8bp#1? zI=N`C9YF(0sMe*+;{CVKqsZA}Tq!U?r)F|Jfm#Dh&=4X5`i{m+DJe0%b|8>14GYjV zWA=KzAHNqVEJ9m~l?f9gL0hUTFqpxT6bMP{x(z0bCC4-76jE)2n1VK$QJL_#nJ89l zFo9uc##;2oQZ`H!WOL-|wh+qF%P!&46#g;dz39t zinxlhilK_7%0b7Nc(zlSd*07;?cU$!FS~TgT!445hoIp1Zii4A>4bnIsbkF41fos- z8-FRaEsDuTXIdd{xID$B4G#Z(Yy$_otbFH>rp7D#h>jTl%6p+WUBV~2dD1>{MGL$%n{%r0(0`O(zOUz55f#YKQZI*IvN zJRT_TBdM94q#~%9-4K6|v|PY==yTlCbN*_BQ)lVCj~X1Kb`$FFsCR~SiUm8QXoVAY+1&U3m8w_D^X^jU-aMD%@A?lEn@?iX)9153GA^W<( z(qVfPCX-ON17n1h0Laj@(u9t^v%C4qvnx9zUiiW!w+D3vi()C_SNIuLW&anYAXtue z7%DDO+y1%6APy<_mo~#$9DOW+k(?>b3Mw*t2-3qJMJd*NSxTms#5^ic&g_JGT?bzU z35i&RLlq*Re!dfOMD3La`3 zfiZEieO|a*sUh(WzqF8c{?f~NVGkeWJh>bMab# z*l(^lKFA5Qy^Bg>zMJbqm8;ol2e181z1n60hU|7OS zQ`HvKwSZa}<6W2$L#GPXHjT?UZh*0dAZ$6_*r9QahJpgnE7NUfnnc3X>pe1Ts?mcs zki?~&G>^6^*Z(L>T>|lsK!<#U|7ZM3;*F~WE&x6-`ge>Z4NXsA9va)2g|d$H$y)b1PpGbNfOvVSI# z>Sq$V(@DYOcXu9bivF3zTL^Q~U1LdHTCc26JI+7)3d^LEm};^1{u|!JK5}MvMqv-i z>%;0phGN-VrAuYd&!ZU=Z>M+J=S35@$8bEyo-vr#;5CF#bU&XPcvE4cHDmPOLxg^K zzgdh7@1c(-ii(F(cZCN_#CAB4n-^*R_m7}R+Xm@Qq!Dav)DV;3^+sU^~g(fMT231 zIknyrQbF{pAEGXf(_dL|<70;aHn7jkqFlBGN_!Z+e~F*c!F|NH)$Tj~XNE%L4w~xI zdUE_wRcMe`xUotpmG4)%Ob-@cd$;8qI;I3uU!-BA$xj)k;sQoV3s}SypK`E|H2OLj z^lR|v28U`WOoM$<`(M$<71E|0L#54ttMSCsVvKicN$-IH3}E^mLKi?#+$OMze8w;5 z6#0LCj3(#SyI3D0#^!O0IGgt?zE%e@23&nAohMUeww^))D(#meQ_eT9t6sh6EvNtC zC(>2*k+2<2B0zk2l<>bw>VnQ{`n;)16XW!Hf|n|k7rke$`uU5|>jYj&LWPt6yK95g z_r5>)%72^APnJ6|U|tLATj-6MX|hEMX^A!&DvcuWCBk7crhFLwF#pNWRGiCwL@{SQ z-I_Fv5x9+`kuRptDA}t*O@a{_@UWyi8s#_?Dx*R&Y?Qx`A_FAMidbfWeAu7~((OA$ zCqW!xP>xMvlkLEkg8iFLx<>Een@IcOhL8HRhA0s~)^191zmi>7^{DkI& z7JrPwil1OMsv^x{Zzqhxs%(YQM@LSjCD3y_&MP>Q`Yfp>>u+v*GT_Z2}8Mv-2W z8K3s($pJ-R>tnuIZAvDP9nB9Jc1(p6%Ts{P-$e1}lu?(BFi;aRM8lx#t7ORk%YZkL z1r`H78Vjz>rE*6?Z-wh2LdIjD0%=RF@^Mg=d#{Kt46Ds>zIsdBr?=xZ2+lZb>jOc_ zj#9iHFo{V$tljp$1!pZO)3Y9Y&|m+DMhg&iR-=&9t|%H`yJe!o-tF)T!BPb%s%@oV z5(cw7v5o{rN)vtyb>f7++58tSjouu9*s><22LE6vd{sI1T1w;A@Oq3Ej+6b$JeLOr zu*qBU?fWG)m6727GP^-<2NbvyDohD2}$^8H}|v6j$|L*|G+{%Uekc(N!;?u zEj*LQM5Eac{G#n^S8d-{@eiO5Gn0uC8-@a;n-ZU0JaCMq_m~KKKHD#+AjycWsBc{D z`m)b%5UBMP)xrs*5cd@pEtC&iZey;wCIOT zM{&ZvvLb^TI%tHQ32ujQV0ni(s7>qowe_<6|cN{|2u5CTuR6`&_SLObM zlTDVwvPc4KkeREpogJ3G^DwEL+e$}N&shHni|w-hI@9@&Jy#ZASHb-3+6 z1WaE$o)%VC(&nIcYaghUi`qUk5~xj8-6hqTUDuy*b5eSSs^Xv&P!cnuWlNgondA1v zu=6HvA#J_lwzbr=j!X{vGRs)L$kZ2^y^TLk+Er>1E@OCSpGe8 z-qD7x`Or3R+=KX0tP_Xmh8hJ_Na2gt_py6jC9xgdw}&N;J36gT?2^6}ill}2)fNn`NY$tIAOHWSHfd`Tv;YEoc3TdT zS{x~vX$_Ubi|dO&o|H|_ot+krN{S5arCkrXJwoeG6Rw{V`l8D8hF+u|SY^R&bm$S&{@SXGSRr}aY`empWxaPWr;`oj zUcWqCec+Qc`5Q}=kPguE*}m5J4cF*Zj7kh#D2r@MA#MRqIn1LPo*6NOQw{bq+|2H8 zx7&N_qNYzx01^}CeOqZ)hIpJC5?2@g58t>qbyZi&s9>RrWaQ+HBYBx?E3z#5%O5dO z%hi_W)RTTdqQ2GDuz$BNo(`QQw%xn&oE)PaS6{4kPipdxIucPHY-k43XY(W@b?*_R zeOQodLW%hj1G6Xql4kuPr62ceeBi!n`QC13BBNKlQj3Ft9MqMB?#@axY8xtwcOD8A z|DCMLtyZN|q4Y-sLbW7iTdimjNpJ45yl%}1JDYt1Sj0w_^eG9n6#Ja*Luo{C0*y74z-&>j+ZO#6(J- zv%!%X7Yj&dlgVrjavR;SeW~J^IhmWbH~IXKKA+70i)rqf$&L}bJ`VHUi>8kob^hIm z{&;WD+f4B|4T12>Uol|;Reu;6Ep<7WY4jDtccD{b{;_Q4dLVvSmHhb;p+0{o*H;6X z6i@D=y54fu^C6kVm5a{0N+VK5(avtes4I(mKs~+ z!Y^%EzY~9%3DA6^QHb7C&f7`kwY>~x)2h`#zu)fl9ICZusJ}hs@P3R8w;i9tsym%m zth;P|nOHqLD`;PP`gtAqRsPRXzL9^tz-S(U2^?=n^EWoIZOH741xm+YTIwDO1Nak8 zf>g_7r$PFEez{NTCXhJZ_i7+9?FJQ0ic4v!H_U2>ypf?h`|?JR(|17llNI--js zXo3~W&)A54LxCX)JS>SO#zmq}LEYSb^*5QFoZ660^)lnTPi1-=Y~J^!ETszH(PO;}Wta zzXI>d?)KWg%6s4c8MIkWSY!2465_X;NhrIxSQqG=NJC)N^Dc+ECAFr&njXWWQ#sY$O@7DB$xTD8X+ONY8@C?b6m{M%|@1v4`>pZh1oN zUE7hVZemX1ok$z7*J(ARzp&ibJOZn%C)imR>TB5YcOR~#vRU7|e zquVqr2sbgxiH>4&cwajd+tin7FNafEC(^a2nT;E8N&um9s+Ni{l|s$Ky#b=VY6HVq z^Ns};( zfEP#}ln&D6U$^-V)O2WVln&Z_=rm4hc)tH~gmq+RbvD4lk6*Mk} z)=!W6xt)|;ao^}D5v+=bg62if+K+=A ztS;BqMOYqNLqvfyJfV~SSViB`E!woLA_BPgR8%%IKvTF?^z9Y< zLGdNTuf*lwJCpeTt`kLk8;2Rm5fFPhPpAKz{>tp$>|(W^A}8;=Lh=$uoWxI>Z!|{j z#x-KolMf#CIaN(0Eqgh!@oi+sYapq-9;{af)XK^1+Bt~%BM|~)1+O7o0;9#f2D+Mf ztIx5zCOJFP7@Ew+ol1i$R#)uDTbZ6~xz=8-vxL*i>KEM)XX?pOr2F&P{yBVa-8eYL zj>v`LRq+rsIw3v{R6;KWLm5<}8zA0n;w7bD&E%TBz-#}Hd5}n4P2NuWvIFT_Ze+PP zO55nXiOS!7J`PQz9~Uy|^d8^be-hd^pzOz{S4q~>_QC|x4><;!#Uy${q$*rhl9CfW zGw32*waw+Qh?o`Whn(oxoKX@n5_8b7#mE3=z2cZ>SZx$QHdqdQ0nQ0d5VGUjQ&p(` z2Dcne$KX?xL(*+Rg2I1%GKsV6R(C*D!V}L{bzDL-2=AqMKR;eFFAR@LBeXcH;H={d z7&B!w&n`K;u#A(aOv^WYI3*yMy;h3#WjlWc(S0uRi(O1y5PHLFePN^dMa%o1&AaGv z%L-rNHYQT5Sj7SHPWJKe8&Zyh})l2@!^rV-T>M%)oDWRPhQ_3q@#T9HF<*~X?8!GCHhwjEwehxE< zeaPn!78otsj{VI>dg+#G>3ULb!CaX(lF_r&N)AreJk z!qB0z^vW`ns$AR-*< za+a^438rY|`4JR;TKSFh>!fZ~&8id4HfuG1QxK&q;YX2v;(!Kzcr?>fYte*>V@GfL zL$2Z(0)F3E%E^NuAroX2L8KPHkfeix1j%+P_RrZX259EQK}@TiO6fM8T6<;{US%E|7(6}g!#`A3EiKay3Z1CxBXa=QFu@+sGA8u z1)!*C^?*Lr@&((rkxI2NB($h^BQF<{ohBR-SI^M+a=%WGHr;SdQQu(hg1I9wr&`so z^8kquivL5?SH?B{e{a)_-pJ9T1OZ`mcZ1Rmk^)M1IePRc0SReP5fB8C?iP?x>CVyJ zdC%YXe?Q^H!+p;C^tsM;IPeYK8m;LWo$MD$^cTi8{F!lHB7Vwu#0E~ZeJ4Xx`lT0a zKzelq(Kg7}X=E%j4nyVi$l%gjd4$z}9i;;n>+|)Y3)GK#wNuyl1!g*MuZ@AVV(cjF z&HB4&mXLEC@}5Rn-(I<%N7gEbWrl37;DqpjiLtT2wEpoAN%d|2!sXd5F8;-+dU5Ky1XWT~4~7vMX)P``9R zpP!vgpoj-V9LaMRFvye*cO;`O#Y#d<@PIw$EQ)xA>MhT^aK1u*AgOn?+u!Zz zj84}YJ^%z3ys_EL1@reiecl-6N7$6G4`8Rw(1323}i9n zY}&)^8xI#rQ*Mn_Hx5Z{V~tMfRqvywh{XMVSoq-*q;b_1DS#~Aw=Y=|AuAAStfae* zjH+GHue%v#e}H|OgVT(SW($!YgJEZBV;={_z@uhh<<^*xl~sn zME7ha8FYaWhQW)k7Y74nU=@ez(PpGWRPzIzQ&<+n4FRg@3r-7H9ZVBheqfw7#o)dKl{hpHS}l z!1}HmGxU`yV$+^YHq=R(g^Z;Q+5){HD5lTD1dy)3>wtdO6viRJ#KP}M%yuTkP(nT3 zT1N{$ki${y+uaLpK(n-6BpART%peRUbV%ZgPsjO5mFLhi#-y^N>1ClGc@}TyKReEU44n8g zGEuI4y`t7BZ8+&4NbyK~K(KKi`r06z;-2Upi27@QXL#m!7IYl^&$3V`5PDLh5e`dp zjh)S?%;(i+Lt41UU!I~D*(>yK@eulfFQ7L}fWPxp2Q+%dDxj#6BGiaMH0+xWhEgm! z_)fjVN|2fvTOLiB11kl!L>n#_paao`FqiRtWyWS81}7YqbcA9bQ?Ft#QaVSU_O%_q z6~#FYCTBPcj*t$Q4s${ai*ricCFIQ-eA;#X=QP&a;|=~$NMK;wW8Xr3h|JgDWO~H6 z`qII(?T&Z7H$njBUQO?<7VRq2?8p83;GtVoWI4+0T*FEEVA7E1FY~`o0J z#%@9Wyd(z7`5Zs`2)v=xNyiSgSy2l+j%f!z1HX*U{5NyEc-Hr7Md6(23>$@B5v#=B zoCpPUo+~c(2t}|HGI?!Pi5-W3(Uyuy&v;ndzFu5DAvw1++1)n4g_Y$nWiakdk$YwRz|m#A5i^&2jfX>DzWuQC$TB6JK5EdpVEW#Fp);| zXO!*h2VZ{c`&xwzR1+h_wYR60ohotWhucU8{Rj5PI@jK<${}XlXvJS!3$7RN%CDd9 z#~;dd=-cnNk~(;o_Rsa!jGAEgi>KC%(#VCCM)7phsld%+!=%L!zjz7P=5wwGF#tvk z`g8xNMzLhN#3K$^^tE_$6?$i=qGQF}yqdp&r^3t7jCTNU{!8|bep+1TLaz>gj~UX zm3P5AP$94h6@@s0l>haFG344Xqp%Uo;3lY}HCiVyOb0Upy9ixg4i7$0I_IFW8weyl z0E#ij0R=@Z(x`g@RVSgw*fIQNo(K!Fi^=Pt8|xjR;L#`svP*emlR|`M@1E65#-8e@ z#T5E^vASf86GnU(Uj}3Qp7(#FLhX)* z&=hoA3S|;PAflnmT`m(Bb&jYy)VhlHrm5474GZlmHu6ZF!zMrOC~gbxkH!>CZoL)3 z8T^uMyv&_cDTbJ0ikO7}88&W<;OtJ0u*NRdqFxh|M^;BaT+h{ZgAUKOtt?wcnZ(Z+yPvKcCM~ zw~{Z}vVi()L0_Y#6nVy`{gcRL5k#K^*0F85ekQ~~IhzDKZBj|r_ zNt;rKeXq*_)d$qP@H+X5!%~Lh$1UMsIvV6%u{_zVlI36>?s|Otjr?UdzeIhfIi>k+m%iX`U2aFGHYF|a zNjM+r#)!+tV%klAS#!S(w8IHvG^C_{XY1;iPJ`+!M&_l}4G28-NkMLxs3uYW1Tif2 zyb!$24qx!#dha`(D^Pk9&BMR17$>B!g-4#Qfu&Q3B(+YKV{hvhH)fnufN@lrR34E1 z7l+uui(w9J7sO)u%VeHU*I2y^GX^A%ya|wHO@&3Y^@E`U!!aF~#*9%!gd|`d@CzlS zCy2bR7^6b^0_niGaec%^`MN^|LDzI&3|Gv!0q|Bn1{VuG<_H9!2NqWyX~V_# z5(C7-QsCnzK%BI^T{ILh&ngT^1N{V4M%~Ut79%*p&W*zVq(S4vF6h}MoqDNr82dIg z@cA^~*9)%vPAkP`E*+az3o+@wRV-5{|KBuP>WL%SPnR($pK|My7E7jPeO@b;jLOUM zA-lo3`LxJj_#S&Yw|6p^A!ooO!gF{6pqaP%b3);U>GEK6I@p? zrzK51;_~SML?&LdYxA1wMN}a=ivsA;un+F)ZAOHDo=eIEmA6W^BBx+tfUc+P5f(G_ zI4IezM;KG}aBu>;85KowWA4L_YB)GC0XQkl!Db+35IjQDCsO?&m`}+nj*q&14-%Q%2A7pfm zPvXf7{bs*J_SUU&;B~Ni>HV|(7ySS5W^w+Nxp!4t)1XSSd9o%jX8iZ?uX2_i{akv z*HCMz%VCcHW#0w01;NYLw?W~&i1S_Y4E9cIm6&9QcJtqPAvo5WfH(3Sso9wFcp!g( zRnJb8vHcj)yZM@)VkG<}#jU2)D=t#}5A83yJ@zCh`Cl#23N1O}jgnLr^QgzYnETAl zafu;cz6Y1L1_rRV21BKM2c4oWe)rb=`1M~X2dGQ$)QO!SEc+X-&zr=IS#w4qG$$YK z%=90+t5u(?FbjJMCci~z3YWz5R|Kw>bk(FCvkhRies*j4I+}*5=4(@6?0zCmBX~&o zZhr;NtNG;G4uKI(FgYdf=%wUvG{$j44&+YB7y@q?3~=w~ z`cDM1+AS+&{yRMRW2epc;%v!UrLC$QuWx)bi&QLk77|Ht4T`lX@YPmSkCcDckuo_7 zg8MSS7QztJ?Ho<9Z=Wwqq%QhGh-aKuEq3^Vldh?1&Dam;Z3ESAo-bxh+U{LoODVf3 zqnINiyE?}vs{+EzZ_~Eguf%NjBT=vbih2y0Mvz@L3WbFY(ndqa+vjjZ<0F;}H>aH^ z05StNnt=Z~O$dkB5x)3ig5_s_GY@U!v%`1tk50fN0!HG&=_1KzgnV$j&Z{m}C?PN0 zb~_Kq*CKfK!S^++DmH+MF^K)JI5Fu@Bl)6s14y&KokB_@OXwnEfF}|?y zjau9jk8e@fObJ;{t@RERul)oM0#y}W#L z`{p9M_$)BL_sslK=}dPj;LLQY@vq&aaCXxj_=TA#qDjl-d9Vw6vKFL;@%zvAZo)D$ zXf$kAi|NpJ?dOM#i8lhVJGBg27BWen#D_n%e$so~#&ro1;N9c*TyvCGB7f2`&v_Mp z2T0R4Yy<&W)e&2Hp!$^Bf_X;?Yi;8e$*Hx~C0BljZXRGv0(vb z(F%<@aGx;%|1ah+d_va~+4`HG$vuX`a!>|ISbTicce$fxB$n3!Mulhkufri&*ek|m z;)Yow9T=Y(QP#G8U)R^1&cdAZo3^!RyKw~c_nRK85dH@(BKhtw7RI92oz0y##TH}U zWix@yt-oCu?nPhW^*W1b=zJg^_X~QWw_w?)oomUiy`Qg~RdKxrC|h)7op^oCKH((r zJ}R2=$Nj>5&F$4ooftg{jT9WcmzKgZ0B~`X+hi`>Ea;Klz}oOO7+`Q?O@5x&vT)(&HPohe@%eu3BBcG-=WBkl71e~yBODZlUm0rK zTJ|0%3DANeMy#P8cZ8@W!-?#L1CmNY79Aniba1pzF&07sBq1-Phw4Upgd&_EkI_Gf z^-lf2TsIaM0Y-eX(Vr-tTj?n&x`6*Z)b!rP^jSi7>%?xCiN9BWu3`~7L8gl;<$t#= z`2KrLmc+5Qt;_=wucU$C{mbh0;Nhh^&yYKbC~W1)%cR(>YRq-DbmJU*4bJo^|UF9WLZw zk^4l@F{$zLrBJQ>s_2A^C`Pg|@ybWq7LqtPWm?7vxoVhgWjUg76A^Ft@&x(5&2vbT zv&mMh7##)6I$P(_`NJT!d!%FkYYL+J>a1y5@IkGU=GXInznqoNXP3+jOIPOth@%VxZFDrkDkEK`y#XFxr@ z%8yyiPdhS6h4m883whQIwU?gmemPHOJM--DFB`-t{$0;fdUDC~g+D%#bBPdj_MTdG zG*~E^Gw2#uY7T}bHQ~$=v?TK`G2dL%dkwTJcfH2XAjAoPRTTKa7#`>K{ z_I&1^=o9=7s0yRDwHhZMEe2MUnEiPDY3Qq1`0J#s|Ii4)6(hd|Yr#zg9Sp_TXZ}Hu zT7BZQmmyS#|27LznS?GTSWq3Fc1kQ=KY}t_EEIx^<&ovfD$>j0?!4|XXt@1RoQ$Qb z6#oo^j7c=}8*oL0LnDy)52w8PeX08>-rEn;)Q7%%V%8)HCM`)jHDgB)K6C;1{Be#C zl8I&YbaMMRD&yOFyHBsZ!5?$3vVUs^YrW}jXAz%!Kf*w-sxkTXlg{|Xkf7yzxHYa*F4od})Ddd<~{CmG9bUnSz+UO_OI&3iYFaaFAX6bex8bY89 zmanYnV@JV^B2#cf$K6;rIJ*gpmrA4H>*9$Zwbx1@U#E6mLr%q;#OC6@Ron`rxNzyltThW&Ge_ov6Iih7$Q zT$3(W%V<=SU3@&14p;hfE#`{>k0Y(|wcET<>j_2LiJ*F8n?Dr&Xx}Qob zfmg~%mT$VbLU*e?nJYH3m}FB((pb=UVwyG*(=tC;JdZg7XOVA!lH55=_tc0VoY*N( zKGb%lGF&H(!%38KKcAdHhM%VwD*tYsxMgbm-{=ly8_&E!o~eFE*Yv*3%5J`e7w>q%S?cavMG7JV`l@l+ROnIEtB>hua#uu~O0rikvQ&rd6r_GRHXz~c zFBY^yhDBB9hz~xc*?x^l41VznKVfrSbUtls`7$l4Jvv)=R_;hZ@6}kLmWdV2`5iG# z_08=POTYBy;w6X6;cZ$Sl77=Ht?AH*`62kB=EdKk%}arew0kvJAn=3XabYwo6M8E? znO)Yo$%&U4=*3rpmGCx9Oh%i{k-qZ;c1-DKmpkv;HXcN!f7#l~r>QW1)y%J!6yq!| z7yt#_ZeY6Rbhj5@`sGM?$}Df6+7_Kv4tnS?*}uE}ubo_=uR!ep^_|{2K0d;iZtvAJ zex{Qdy_m~#_J7rp!=bRe|h3jR98R$c5)_~SuH#_LhsP0RiV zznF`*7l~4Cdb0=hnQli&qgdZ|`NUjaJ(@q&r`Qj-bmNK0r#{UxFU7^90yiOdWrt~) ziDs_1m+Y{(z;^9b%mBtC*wd9*&)Q59Eak?R^1hmt%{xm#$Wei8XvZJ4B+Ra6;AUj9 z%$XDb;?M3bS+(GudTiROf_U<5iGP;+`j_p+gnJUX>8jcn*Y&h9Q?0-Yono;=mBU-Z zLhQrngAE<)D0QptJFQ3&v!k0px^_*l zdBKUh)jCyQMwurZWYxOPNhljb435y^PeE}Nx`7K~?xU}?y=2o&kH?)>^N0>Kg)=GM zzL-~0W4{4)>Qy5J)Wwcy2;wfU1PBrq+{pG}>ADy9&z~A~{gmU@AJO{MBekTnQ-}On zeb1(Dmy%L<&Q|2|kXH8*dBT5VpD-0>h@8ZH8N2^BI zM!G9o;w*6+jrgyHNhFYbihNHS;F;ZDSbi$Cwjwtp{%M|{+o9}MHn)7xOP7p9{?#rS z$xe{@|78*Sm^dVaj9SHmRCyMKR9a%#(Z#OKEV~c8=a__0gl4xMN{9N$QRTFey8Cp1 zXxef|DK8-}!n6D8H#V+v5#K728?GX*azx5$7|7Z#tuvJSN1;*clYLr3g@uvOQ6gS* z3;CySEtvW%GqQMfW)m|8s@Ie@z1F8^LVF{5#p)!rem3vu4Q|e+)g1)H&CR7H<}E5! zJJpY8-FI_rEPqaGs>B(8@4(>`8hPU1wHs96uV_~RQ@u5_a1%4c>b&Eu|6^kc4$yBZAa0>3`zoV z0Tf~5Shj@9DGUC>%GdaEyr{jtrD3w}FtH$j09_`qDLzQd1S zs-xdL9yF$To*8-W1;=lzeEAT>5nxNNK5LNALznmZN#&eNzL_ue_xo^wWeAT>PDna~~1O&%%hR?=1m@X1y&kbSEPs01WHLA#B|KZAIp9un46 zETdJ!#`?ro7(zd5ftEVEG31I-FelI6JMn+(r2i5SQf#p7plpQBCq)1uZ%;+{Sa`}u zLhifXQYeBqhP(n3lb}!#T4UAGnXHEz4wyl2ydyLmvXqWW6NFHuuuS<9!ZuM_?}V3C zgI$tVDr_T`1I=|{OB7QBfv;k4Y?)5xlOmKzj3>@S`4{?FE0H( zT;?rpVQmr}$HvEsAbr{(0%3+|L-NL!QvMVw;=?6Ih%PZvdj{2sq^9bjyG3UIXR*U_ zBEt|;D_G~2uE!}DTe%d$Uzui&-AxchfrX3Ua>m5eh}3_|qCsuiJ2>t6ym^Com@K8G zW6fN**1_Mip`XMfkWnR&}WY_Tuv`UB@N@HfR{~ul!>8vF$2$ym8BNt%o_$i%#5@J#?={7EzP3_Pmh8 za#wnZglYFz%kz3-AL5HcXWaU99M3lEJ7GEM{wVDwtugp5CV#H&qn>VRNKuuhlju93 zHb)_R=2TvK)6kT7RgM+cM0GYgd5iHsWIswJL?IcH`V(%k4Qy+urQ={*s{B_6=L1uQ|ZQtWB3_t>v}x zApx%A!i)l?8M~bLGJotO>Jh3{0%TRahFYX}bjAOfBV+)_S2-=6jTA3MWJJxwHoP$h zD%6+io5&lz4)c$KHsxpe0ro#VaE5(W1V}OgoD`;M-Wt9M>P}QKRtuL@tp|7H^=mSZw>hVqV8u}HJgK}aY>eL3j0_Y!7O$XMC!Ud)mM zo!a0i?A^gyT`uw-bxkABJJB{2iPMjZ9%7-+{V{eMk2tdERp;|vkMZT6HD zUGWb4?-(|c3BtyM0hp|23LLUf$Q#BYtm4N(wCL$?1b@05HYmbUDzReKJ)<}}gS~aa zTk!8FgY^u!^op=m zrB0;kuN-;#KbDk#8eed>roY$zcwoF2(5tDq9;=i0wB;@M4tkN|O@xVpOaL(f`CYFN zKxS2|`cn)JTk{~pT6|LQVcE^QlXo3M7&_s1AOm8<0CkAEHa|7$_*(IaS{eu6si1}b zWB+6)W`?V^-0GFfER)#^I`ei*_GS53f7+KY2rgCtW2t{69YyOZMIxpeGO(8`2L-d0 zd#ZfvzP7duj=*3c!Z)!J&9NlFr$%4tLrrkccF}w@-30x3NC79<^j!&6;)-C02o|Ds zlqW(3JQej4hf>?ZgwO%Z6a>S>A6x!I24&F`MynXxNjEqX6E{9Z!7_!8+O#9T_y)E| zKiFuO!$yMb`8UP|J&dr3C0PI%5wdPk(DXiAmSm#TTW7Tw{#v)FM5obn!@_@m?IMgm zx@t+xYSLpzz>e`=dJWJz*J5jFLEMRsV%m~U_O9f#=)4U-jdW1Xt+H@6YGJfPlLPhj zbd>HYSN#;T4Gy`mWG3qjW6o)w6W*eum8KZ~TQ9_&gqUp2ZDEqh)o+Minhg|Qo z7*cqWf$eM@>5~y$Bz8*VsX-T}wGogJC0c*ja>6*5#frHSjGXK&*WoS_Ti!{Sp)R@y zoH(ZBEZPIcvZV;=rlch&e`CJ9A;$15Tx=H6)CQ;6+vYzo-=2Ge8?s0J}h)=$7RI16>g$2|hxU^K1k$?#Rj-rD#-hjl6P0(ff7GzFzK1rzg(-tpjOK) zO-xI0oM!fB+eB^bA1e|NMx$3v;NNN0M3Ds$ty9Xp=@x)UeNTz6-32d7L%h?UJ=h163trD#Nxg z{;-%ccNFa>FD7z-l8~TEe}kn$U1bkAj2EmEqxxSN5y9VO4O>%!X`FvfxW%BM{c(|a zekH&(f9eQJ`;2K&GY@)d7L{(+d8@sOLZh6iT`g0Dvdd}pMO`XvD3C|$RQAL;5{%Jn z#qy{F+s+|mNYwsinFrGn<|27cF{#OPKB;NAyrLD{!$O3xl5enK%bd;3xZZAU^_`c_ zr!AoMopU0o(_D4o@7YFUZPhEG!7G)1w#q3c=sc?b&nl~$AIxp<5pH~%rB{L8Ir(P$ zd`)=?#ZDX;F(etzoUnZ(gsss1i<#qJ-ug|JdI5+A{bp@mKGV+^o&*YllQGo-EC|;{ zBrpFyB9i)X=b`RXTb@o;QE$!F%vQ6Mha|t86e|l@xV{*e)EFM`iO7d8PCc1JrwEx^@JnCJ3P7};zRZitQc(B-|4!j1BqljI1_WB69QG5S$J$I} z@u*Uc3lErV6xBQOl{j~iw;{?F{JEzQE{`R@c(yy1lJFW?#Ej0^t?i_PA#By|$HP+x z0EjI9#s2YBIc^|ce}0UqYx=XL*8Hy9P%95A^3-YL2rF+|YqO}J7hiyX$Yp}$5kOP; z*i(NfP}y!oa0CvKi{z35(c&Sm2v*;ss983Gw-!mj+t6i=I8<{6cfwvhlS2y+P>5a@ z!Zps+Rh-;vI34mulvN{?{VH;2M@BrZ0{@9B>AbC+f@dtLb>2SS% zOH$N*x4tyTx7W=pcU0Hj0T}fPk)iIza+;_*9@O^>*7g7+T)3h+Uu%CcX9v=ZbeEQz zA{Z@b(KqV$VulR*r(Oy{tn$PuKaErvGuYD<#`1s zr{Da-#u#sJ%(q$=w(Ph(e>@I4`7D&9$G%7aOc;5A6>fuTC#vvqP3a>X(85&4nU?*R zq)_k3s(_!o2dhj$E~i5;yygcd6Kx*@ptFdyCgs%^R3(4aahQ&E7+sKw$*U%8^R9x# zD)<<}`$e^*FKL1x^)r=AGq$n|B_H(&AJ>V-qwzBLX|OM?b1l|swdGv&byuDnW#RzE zEH5-~_1;RBWvS!#ZDc~c9!EwFlVD;(!Z#&l&iw8qV$)MWCng_uXOx;Ol#42mv;w3m$ za@`dpgzcZ$ITzw2q%S92a~#e%COvz_fzrP8xfLp5?u%I(KaesB@}LI0J=1S%F589H zbrUs;P8<;3JjK!6&jB$P!JsP(N88N%}Gx*au@+} z+|I@>{ao4ua{Qu*mOuaHet;m%k<9gDK3_Zt^38CL_gYk#F_{rn*N0sD%n46g4!7r# z{NSqjDqab{jAvJ{Dg$avCc2z>{(_*A=pwwJ#fv=_KvveJPAvD*sIJO|2oH-v(^T+9!72BKkbGZv}1*8~6mh<(e+b4d5OE z`9pL;^h&O4#$GC7ShKALGn(GAgk(&*<~dH&ZYX}fIkM-OLJ$E=(WGSc*@2G+or6R3Z+&(L?LphLjq;1=?uOG#z;1fNI)XgqF#EQ5C5-M_aaF39PGXqv z?@L>|Xb#&5uL(MZ!=X=M)OJx*P1wSH_PhPofuOF0pCi3lMZYB1mZ%9U0W349TxDxc zv~jX=iw1bm*T2fFZ&l%w=}=pH!4*8xf%wYp|eWLvUsW;INrfgdF^7BLhY7djUUpPv`KPrgYo9zl>0tBz9e(lRj%aOLo5gg@`-E2ZKVcw zbw?(GN!53GcYUSirT7}^t>uSe`<5!0;R%f%BfWKiSbmG&a~S!#@s*v)i{W(54d3w~+aUTm@y?y?_dZcxHZ@E^X^)#6`Z_YWsUT%WWDyK=sTpY=9MPNN zl>!nSZI}q;nP0@siT{q3M|OikRGwI%{#RUfU#q$i!r>E*7!N^mW`&RTf8;NE`8Yt_ zk`Uh?mvsNlE9Du65lwxW19R{pl6q6tr7qNOSp2GME(B@5htan5VCO=1pl1>_g%?MC zg+ZB(cKmoYTLM!(i}F+s#&(6k1(|wKQvi9a#i&(gdHx7eika#TkKgr!f5{dnLd15> z8ga03ihf~zB+Q)Zbj<16NIc9fCx1G9I;yG(M=6T`x~-%vS9?nMdYq5kS=h+A?9jWLaOOV?@ajIt?#bK zx0MxNfR=SQ(a!z*wc(VMk;C#O@9yI6yWPCRNw0){Zx)K;jmhMMijMs&0OQh+{jA&E z_!_LTBM6ns9B~(uQS~8x*UO9AiuBRsdes{>FseEgy>-ifr3!`13^#`G)Mo}{>?T%|cvm-aD zs!OiZ07>>WG<77lJrnMft$eQvW%P&v78`ctQ&~=7sO6yh_o6cLF3#lI1h{JqDFC$o zqN6~!P@~r*l$D9E5bho5y zLnrUwk24OwH~QB`6-i0B#~SJR$$_^+KRB3=FfST{WwMy0T@&*t1g8Oy8Lk7i>q85i zk}!tzisP+2&-<}PQI#v#`tkyI{y#d4#5#S=JiE%^54k8imN#_{9Rf6?cLB3 zC6iU;$G&Hu{JmYfr`X0(@#UzAN137i9)v8Si>P0)o0;N4GNYu`%=+Scrz1WFdD+-4 zyQ0enKyi4Z4nxPK8sq(CxKN5)RKOdG5?OOg>Ar^%gA=T_y4JHG%i9FN8d!NDw|oO{ zei84c?RvW1X6-7_pu#&sQsw$(SSq4@&R;)hR>!$=PUVz=4tIx~(5In7>L1 zKK>i!RFA|Q0GAsMUSVmbo2M0_52(YU@e@uF+JNdcAM=xbS?P?^e{Tkwm-~Da>C;$> zEeA;McgjjVFJvY_V6YAsm3-wiA*hPsG%=%N-{X3ZTH)SHb=aMWPq{S|yi7f=B$du0HZc`!gqijR0 zI~8b{i!|X~%v?i_Dp!~0Bk6M=UoIi;nfr@`1>Ex&N-uWz9JFeQMHuiBN1(qG>)em~ z)~T+*llFjqPtyJVJ})Zp{m6tDR&x;NDlA20(|qDtfm;^an;-YGP_ci~m!Q%DZ<()C z%2R?JD(2R%a^t_lpJvwHq7!Bwwjo(QFYj*rj()Ks`Lp4RLaoQ(PFQCs#ihsGH*PsR z1#A4|=<@71%Hq1x)35d@8dI#a8l`PhM0VH5*c8GZDXL3o1#|zKCC+XL@g7_u__V~5 zqQ|I9AQCF({{=!S2aCR=VpCT{th0m{BOvz{{3_KoPYFyimu+w4WTaW2rv}y368J9w zgCr2E^nXv@Y7>OxgUL0f{h#uGjf%YT%NQecJ-nFtd!r(%jAKn{4O=nK zLI1?GZ%#5L!0u(*aED__B3)0n!Lz-*yREB6G&R-8p?4Hm$t*m0G$Ccvk|dcf_d}lQ zVDsVY{gQl}g$HnOxF}T?02b$P$qc`JDc|&DE@lh#A_k#LCOh1 z#n6UWz2FJrx!B0N&B(xsH$LYM+G3b$5fJ6~Oq4p>XuVj_RU&JfXUvc(o+Ln=``5BH znDLr4CnX?GPc%45Fdu6*YCU+&Li4b&c2LE_=(cLd3Uqy_yCc%C@rGzdWz00yW z|9&6oKzR6CX4GHf(lLvr7-V1SS_g=M?re2o=U+>}@0&Wrx6SR-gZ4V6+QkxIF6BMu zy4ZZ9ziKhZp>fZ*4VOZ$KJVOpvNP9+Fjv`dOT?m$x0uvsW+y3opl#?lsxyn8dorY5 zbBA{Fsljr;THy6DJ@1g`BDDpBBiBx`Cy(@1phdF^MPqw~7taXk&3E*5do*D)a;k@Wh-H{hdb6MOC&9JNV=S9+A^;4Zk}~fsW#2H2YW;Za&f;s2U4u zH7yd$eP5qA=>P;;CxtyWfQKMU^^FX6zlg(569&byt}`qhPtR=y5_-4?ii^e29RiBpi}FlbZRBs8R| zbx0W0r->}$Mpsbe?WU%)Wo4O9_N{#9 zw)}R8EhYQ$g(V?>>k@Ux{zGwFWur9VE*+~j5<4tYOrpysS>U?)`Js=6Z%31Kq8NLx zG=?_kl+D$L(fG&%gOWAd%r9<3!@iYt55HELw)pe0$Ca-k@fqotxh^Ki3y|_Rp3vb@ zS3-^rO4xI+bK9QVVlU!F8N(y5HI;NNo50<=?7El&QF$!YpS?3U=}tL6Km^#GC?kMk zz)i1IMb8|Vy@^lhATZ*8nN=|>XEg2<3Gb7}-~dIx4|G5zCZ$V0FCbBHkvP`l3st^d zmJ?HblShgrc5A+0EnSCrM;v{RqTcWez(s9E)ifP1S~ z3W0nv0_nZ7V(!=IRgEVszq>tTV*ZNua)kGq`bPMUbVOJ1*sb;#w5&Y6$`1X+Pwz@B zqpkU-A;ZQblWWwSUo=$tNw^ z<-Zu{#{U`R#|fnC(yv^C-nLDa|Emn@U*MqIFp$NYBRQ{e9=?)iEdBg6hAz){Z7jSs zmpS*b{$3gBh>h?qVsmfX(oFA z@PiAj_3-GCc?`5GrySh5Qu%T2mv6pX%Zj-(0cE$#i9)EAHhj+YySVgX(tg0vv9C_M z&;I4+hZH_nTVVV$@k$>?>$72VP7#evf;a%PtU8b8jRCy{_?l5wereYLk0Ly|KH`oZ z9N>;uT$Uw5W*~O9`Jh}%dZTuf!BPh?d-##SxAkn7BOo!=t4Sv{?x$8|hR#+pqp zJBMB#NjsS;lw))yOpf%LUd@^8K$b?0VXYKy+PCkKgUH@4J8ys$HYcAT1gGxDZlZ&K6wGGch@(2YSdYYu#JKQUtJmVEmYVp5n@q9^yeX211<8wNF(TwWICzoki z54>LV8LNRBUF!HJ8H2ng<2iETv`IMfT@@d>zxJHu48PPKlNG8SuB@6dVnHzGmTywS zLg>EV(jT;o<$3ktA4KzP=u-R&-rF1U9g;i1y-j|;KW~7NpIfdd3C@}gss_P))QswR z{cvD}DyTYeU_^iZyqQTNF!-SK5y^EFBxrd%!kTYM`X~%HD!bw74i-GQ_v&>$lEppb z74ELn>ARQQ8>%Cq>EA(y9r=U5)gblyzcy)3J=XnCjO0KO5-EUW(zy8Z zGWHp~s5^V}2%5jkb#rYi`LLvG9zDEdWM&`;T^}kRUfL8)8g790x_O{sE}J!z_M}y2 zv2jQez4)41nV7{>6l9sE!__VAJiyx~D6Co;30}ud_O7s~n|}g+rih&t?AGoQ=TP6N zyyfnbL-U=`?=|h4zr(}+UGY+od6@JjU|#x<2gAG}@gMCNXky3Qy1DsYhw}FBq?d@w zkiaQ?1AU(Ou=D~o(Uj?J=CDNLv#a~DVP3KB)A4dZ$K5rX{pkF`^ibhy&pfSadFdy# zSa?aKk>-tZh~S*%T)yT(`xHK@u~$nC%T4gDsz3&dL*BgV)HfO7u3sR3uXk#!icUka zrzRk4I_`n-3u2wk7LhNT_roFAVgWqvawDxi+@7>{qQR6NGm(baCYuXC-)&$1nQVEU zIL9+zx(&WaDWOs<+r{)&=$C?AtAP;1R@iBR$Z8=jdbm@}?j^onq*Y1TqfmTpW=q;M7a%Zn7kF5 zM_txFuZVK9|9Ngl56Bw)T5k^dhSA4_P()mGy31nlnV&%ot@Pz#vMVg;)bbd41ncNl zG6NCML`E4+V0^yvufe#e)vj_y5kRv-W$h`K&mDx_S6Vw=u{ zW#WxunP))-SJ1=8V^iFoGXqGJHDg@9J?kNqWGss#B{e)YyLu6X^>TwG2HmMsZHaT2 zfaP&b{(eXBB1=U(3nz~YMOeqH$cn`}crs~Y^N!tI#=i>64p8ntyCZ1~{x>t@2!^cT zWH6Ij!9nZhod15ope!5^){mZt%O&fe%*1B?T@F&O;aHq)geqSY6@p1E-rHY3;F1ANPi26*xS&{kV@Jx{5We2G|KnmK z4GVR*t>uv(hGiT7!9mgJMWU4h!YPrD)FbB9-q8dbIXq+KOn##jl`##%sKt<7!V5-28C**&sbLk1Ey$+Q*D zKBrCXDfO4^wd`1Eip=(}qcZTATmh-_)o82<<@5CG>sxF-DSyJ|^F$st0@mJAxIOHu zj4nJRjY_v(%DBigHr9XeqOXYG*T16Z+R}fB&V~cOXE5KXZ-fj8{X^==RV!+zjlZN~ zw2B7Ue)6hDy&4AUE^sUei1Ytwd#k9pf-PDUcX!v|?(R-Va0~7Pcb5hlcZXoXHF$!% zyGw9rG`KswPR=>^jXTEseP8g=WAECls%FhvGM9yf$~)?9n`xsZy1V~$*yuAPB!n`q zjUzQP5-f}j=XN=ma^Q|*h{9q*ngst2+@67;R1*j4NF_&GVMZoN{q0If4B$ma@GmlGXg7bJ*AjKy#%pY?Rb(HXvs(BxL*1Q(g zuJQQsu{itS#byC6{&BIYVXCclY5$w1Kkt0mVO#Uc+-*Unh7Eh$m3r);rr*whiL%Jm z6t60Bqu3~PuwZiluF zl^Dd%B!ffM?E>^J-+^R&T>JAnTnFLIPogdVFO3draB`08)AmdcgSgrpR?bHl3q(85 zVPF^yY|qT#*!m(t+$0mqpXNr0=JD@_S*S=6+ySm{MXSv^U9x;W<*YQ^RT7sL0O!w! z_9`LO+-0BBGt)Eh|7aIpf6o1(9XmN+saX12Im@uGu#ecq=$6>EsnIrj)AsIwgy6+4 zJ`Neu3xQA`Ob44fO~IJ}%8xj&LtE4yfUZg%bJ+v;>G-R43PzS%3aBC&O5@H;)5C%r z!gTk0i-3CM=qwM{*p10N=>ncB61U#v35-9kgI!-r8xL%(%JwzzA{e!{6uORux3yE_ zY=uh>^-@`%mcC0Frpi4FUqJLjOT$=xho@u|A3w_PRF{Dk|M0DH2eQH@)6j!Ydk6ae zes?}QSdo!QOqmDnVydTGv+(L6TGew`fMRz@@XD|RR^C#hw_nlg6PmX+(K!xD$gYdgL8MR}_AmMu`#KIVgaBgd84^x$xh1hG^^H*_#B>oklj zCdGeJU6GK%L>mL?BY^wJY!M{8K$8*$t161OkfHJuF&JiKZde%*6ocu5Ng+T1Gd%hS zx8Pl^nuO6XznxX_vVvE(n5mH?X>Ngp9HDJi>cT+? zcBXTYH*8u8x9Xi^W^i;4hAjf&f7M?^|Azbt;KoDscwmeXIB3@k40=JsF1*dqN8gsD zhmH1w1tQczlruv0f06|BYq55XU&}UtA8Bp1FnGalVhEOFWv|P(G5c$U@6yy3pvsi? zt(p{)(~%ovu)^mUnI|hQSYa0N--~nse#0->h#-R81kX$a++LvfupR(HVzv<>fdmWc zLy6+!9<%uLptVtB!_U}M2vvJ#C~2?;lyDJE?cqa~x*I#CINrL#2uG9QJ8K0=F)8WE z8rVW9un`ap67XP358 zBBlujO^zF@LO7`R%9iSb#rpN6BP^7JE&xpHU@$3)L;jjyLKi|hoPqseeMg@E@I_1N z3l$rim5(?{x$`93|M{^xfY}@p%btzwDkKvjK{bzTk@cRxR0pt(HOz_MHI{SJje-WB@o{6j||ufv+OCV zbw{wYjNBp<{eBcpTpT9(&ZDKWLyckXhmDT6Ny@}C33)hwx2YlzNjWof_6GXfUs%-o zYY%Hu6OFH8VE;X9Zw4vB*Kx3`$MP34pXICISjO`h3iZy=h^*3>^I+2XAi-D{@z<(1 z2VmX)>h_@EK+QY%qSe^;;C`O(8hh!-WS1`Ymx8tPoXqu3)}>OPMn-&I-tNNF zlWMX}Ho~pPfi%@za`N0ij~ff_gRbc-BJ4D$ZFEOFOYt+INu!Qrh1Z{Qi?}e50$}N+ zr2&6yp<^0Bg|kwXI)EYv+dnT_U^uLn0(%i)VpK4a=S--?#}(1yVfNzy;ZUv$?IY5e z+9{qg2)ONpXBVdm5`0QUsNmB33?s7WwePMSyE^EKhB_{p^)IqfS!>lpg-03q{!^iJIsq6Mks3v>NgRQ zUREl~`Bl!UCWw)nk=<9y(q+);%I|6={6nc?%#oQdEe3pi}_klp60 z$-mfQ=#Q8MSbyZF{0vx14~l*Rt<92wxiU7pDj!y{z7wl670)DtV59%eW_$Hp4yae{ z01m9I#0JJZPDtt-*%CVJ2J`o1Z}MwrOI+G^irdU7jzoU6!aH2PBeBwB)V|Ro2wnX+ z*7)YsU-Ld`zvioy^o~V8u4W3gGtQx%k2Z#Tcb6iOT1vRYcn8BG0wZ#Uhok;&m#;w3 z3zc>VX~FiiV~O)QFIK!^P40lw`s{K`HyOhiS;sGj(Vge)O-t#~D8;2Ey<^Y|FDb*= zn2}yuP68O3AE7ZRXt2QopfJb^TNsq`2wl;SVzj_vbtRyA4-=FbUR5?~-6VA-{MvLS zGg89*0GXS|0}GC7i*Ts6PgFrgda1RgU2LiK*IT5<)|FXvD!~usWK8PBZ!lZ4dK)d=#C(ipx}q*L(8uljYY?+5`g6hyrES4 zrE9eZHkv%p`LC<4oEAAtzAxIh1rN3oH4P`DQ$c z+_IyZqg7tiGDur$fd#rNw7>KGWST|8qkwO(oL1drJQAQ(5~?$i`w#k2d3W+Y8n3Y) zH2nsB`E7^?%dnay&^198*MPZ{yFC(p<`!^_#KoL_( z9R}0Gck(Ctwyi|qMTjmDtP2o>0$sC`)Z`xGtRWClwmJP-8d(=`hzPI%Gy-9V^Z3-K zhRBM}(8c8ab05fG-*!W|6JWtvM{|rKpH(&U3Q~FUO6=X4W<<|NEeX>8oq>Q-lWTXW zywHd?rw?S?_Sxse2qKLse3#>jWu*j9I)@q2M}Wp z$+>_-p*+ioN1>++IKlr%u$B^jvE4jz@nAawNl7l@s~y8J%8S$|X)>wZt)h=tDFUf^ zdRjhEb0T3VE9x5dv}k}AAM9UB00wy-M#x!%zu<=kcjm6paA1S?Y~0=rUgi?IR+Ze zhk(S2YmLB2Ms_USmGM+{8UOL(C_*gO?ZO6bzw*n3KR(hbif~T1XiY*YEBNF_!V4sQ=I;Vi z0~uKGrU&~dk<$Lhco2}t{;~yW01orN&G3%}3IFetqy9_cDCoWZ@6m(VlFG$jVh0|P z@xSx_AA8;UyORFj0sg%O_57W;V1$I=;{Oq$;NbB89Q?2!|1RCX*~Bog=>LBVEK?n_ zUKvI{(Rj0*+eU;k5l)&$RW0gzjH>&-5Nm|)=IIrL?Xl1zt)h>?_oOUn&;^%sRUuvK zUs<#n@^Y_{Q+i|yuEG7O$a;6xF>Pr|g&L>e5upCy#2@huHI{C(_V~V6F0fxH9SLSl zE+ZX8>ULNa;z6cd_*zPelb+G3q~ft%4RLv#t&y0=RQku0?&_3)Z|d>qzYS+x4kI5w z^d={w1Gq7{ycBZ9Ku(xp7B3Nb=9kg-PFk#o_&o`=OM#pKvK!BKLyC62t(ei}BiQ^7 zH=q%y2qVvm!A@hgd2fn2?X8vM8XG*+OIp5*yW@kx-kEl$=w3}pZ=-*P_m&)9}DYj9J9=zcP?#-j?b>G__%fQ+TT{U(udlE-QLWqHbV0d=K$a$T$ z%$HkPb01e4$@J0cy``V3>hr~|Yc(m36&h8FW;3<;OK&yV%yVSmf%Fxk@CDduC}Hw< z=9ALAX3z2iBLhK`t4p1Jt71!A=c}IYwzu$}ueN)1_ZuxIS??Pyhw0&GaYzBX8;}0v zzD}0!SLhQD4ZVHpaw69kyBye58Iul_Cj|^H^mnAjdEEWb1;gX$c6hj>g8{B4^BU`Ur5V7Y6n2ObX#6B4LAf zR~&=Vmp=-6;lA0ALlb;4JNsmlBu6ho8NcIy=MeVVjoA&nq&?C!WF})^3()k#w^M*G z80N+u8$+S1+g5K6_*=gX9r#8k63S&@($+pp|8~#9xBBqI@N;PglL0;+-g$WM zZ|#>FWQSA`K-s8wr^T*MejqlmFpdE2>s!gJWb{ZRfE{821kQbjHi;tF)} z2g7l*&3Y(rnb=lKlAA|s@sV5JuGOhqKO4Bg%zIm1Sq~`SYI(6y>GA3Q>ZMH*I47(Y zj8a==FvEA4WTkJ9_rw7Q`)3m;W5A2UUKGn;mH|`1r5)&fJ*5aZ;HQpZKT3SR+((iI zNbKBrqH(JXbgpyLjlmbp1b_=bldVJeIb6 zY74>~%a#@LpTS7g4}-r7zY<=34j{~XH-z>wn$-80ew+K+Xy=JUDw5ab|NHuTWlpjmuv6mX)iC5S0V%@ML4^1|SW zL>r@@ot?i7CEI!3u-vPyK}dh1$x7|>Oj+e|9ZDq2vWedf=Ii~1op1*Fj_2By zc}0)E$8R_yBq#Is@E(kXYHE`$e!oz_DyC_fy789-W zCE{TDRKBHh@NtfP4IE39DtxN;no0IfzOE4=tz#BX^PLSsB$GR9e;p)mZoxE#ow?+} z?gjbN3X?L5fjDS^y*cBnneXPkdXO_)XmzN)l{gD`O`MJG*FE2bNQ$6|m zsSWy4COtuz>%!BLmoCz8)wsYGWktBpN#)c z0RM{X?5ltK;uy~j+=1to(*9~6!T2BDd~7%ylQb%^;UQFz?yKlz@%Q914#k>qzaVU_ z-LsY$;h3i!gL~K=VdD#_W!=C^ygW8(ad1Yi$Fdte&qrvnt_-wDlNX$ zT4lTV{9|%!v^yvpFH8AQY=l<%*DQZIw@)a65Z*=Be5##mPf0-H&)$QbV5hrhxV)L1 zabukb{mL>?`}8sviLD)P3%zd`GdC}+3{f~Z=(!F(f`fNqN70TX3Egj1D=tE&mBI^I z08nLZ3wSfV_u>+RVGU@TSt7G*-i2o!OddlfzS&O~?@sAgGP^4LRbt6ci;!aG(0Rxa zRpJ<(4Osi0zbCWqWjs>ma~kmnok;_+YA>H>``}L> z=oxXsAX+AwcJV!a7dc)CTp{s)c3(Lu{Kmqk_Ok|GwRq}adXD_l_tFhwiM>rCCFM@A zCe7m@1mnAGprzPpO>)iZbtKeovf~9u$CdA&&2xX=>@0MJy^0E4(f6K{K8?t|F7_^; zUx_m!=81^}L}n`C2q93{S&49=EFARU9M#9WB3p$$MY}_0ob7y-FR%yz{PF9|59NA~ zr^7GNY-o++y1`)Hp?cQEPpkt2A$wL2-OF3W_I*3r#X&rPp8^zJ{(<6joWXTRqVl47 zo};@(cE5Q|BxSO5W;&Y~M&S>Bz*ATfU$rOeM8rJy5X092wJ2h~Y}U}9g~%-5W*+ClpL}kDVnv%#rQ_MXK+$i7;-hnU=U9CZZZ$9{m6^9i^Y&`Stdr2DlJW2j)$)}; zkU;Z-(msPu>RgCDVW#?Q=XPVM3Dy~Pur^^7?TOde0c#8Ms`MP%pY8_)E0OTq;tn>! z;YuLm@#eQK29U6*6f%F&XE{r#BE!Rl12>^``%R`v8SwtzM#9j)VFI_d&GeI;Ox6xh z)+jxdsQ7Ker1|UtE3(R*l>6u=+lugLjFTGZ$e$YMsk84_dhs~lMy*5en(1-uzhLEh zeQPD@h2jfnT&0xht3MR#GfXK9s@j$`=>Qb&DN!JU| zE<-Vo{`Ofa!r65FAb)z>|S%I?^F%VftsF-vNx?Xlt4V?>rH=1r9< z=1t@)ezMG}dN`^w6&H=8buI5LZBTOz?DxdtBkzY}{BmpVVPPs7&#RQGA4d|8Z_{P_ zvW!WV0EI`<^_h!y((qcg?|Eaj~`hY&Dsbft9I2m}A_Ih$;9P$lE%%8I+FpXq{8A+9|5ooem z-iWgFxJM>HzBhqH{<`f0Rt}?Yl6-G*sD37D;dbSSbCMCUgQsK@V3BH1f{o*`gTKdz z<6ML7ExkFFDlx)mgDx-#6&21MAUtGiB@oxcX{=kR9lPCx=1_4vQ@rc??bCiNj#3Ru zA^C91SNp^4~T>3s26-3oj)zEK#%mPh8g7S0+R?wiSAesWOMCm=GbwG3^F2h`@4f4Al zoGd=u9_{W-^VjfXWq1@HQGFFGthvj~3#8;Z419VsY2P1!XxNAB?jA$Qv25+6ewI5p zAshNos&xrTbwEj1>w~iIsKgf>QqmGu6sxaxk+0-EaB|DQIuzq7b*L;sk;s;Qs|%d* zCYboWEi&duygcR2Cmr2enN|QvA-U^tMTZ*Olhm|4-*h!Kj!bP>NGKh>WR;EWaoH?+uxv{YQKK{JcyiwN9+vCBK{4X z123&@1V_}7bHR@)10QD3-&t6ha~o5_of&9}Yt2(tPbI!z5BdGxK1MOW{$oJTliKhY zH0ie1Q)hja{TFhUe&-MS6s8a(onR4@{(xxYq$c~tesMvzx0_hkauF~?Pd6c!Grijx z&z_$ifL8k{?IXz9_h3u+CCrx@KmQd}5L zYzm~?V77%TGH1-!EHU=F?tU;*V=%B$_Vvz|mm4-4iUN;0xC8aX* z9o z2yDi?@U#Yw_3S!3E1=Dp75o}7mh0XvvJJuE9|ZBz^h7fm{sN|XfTBUSeNj$vd-(Iy@n(>aSbDOl|SlkXL}O8y59K1-{-!0Sb7#0EiQkw`llbF zKhbsIBLE=^GfD%{{7Kj;8va#?E=jqxdDr*YFFYH4Tp#W7lJJ_EHs)1U2`FxYCGJK1 z_Oy@}rd%qCK`{YO1ilrEyKQ-idzn+n8=5|Gax4u?DJjWEurp&)c*CsCl^s;yFTJ=$ zn}L;qT(h3RQGEl5E!gG{S?0o)zEy(u+bRvoj_|Nqt>AxrtxU?ceL)w zZxi`?!&c`9pn+Tk@WXrK%)XW&{JN9EXh9Wl=ludZo8DI+_$#mT#L3$s7$N?82`uzO zoY)Za|LFVOc?-&@h~l@(e8g9YKYrm2p9xNu%C@Nc*>iBdcY zol@Md0iR;HL;PW(W4y~xr1ydq2Xb~(XA%l#Cty{kC+A^R^~uAVV~-|MbhCRg zf|aPd!BO-;KSQdhIFsu;bzYxE9zs*ab+yfhJ&7SE3eh}EWIS?d1EiRI-NobYw2Ie z?*%ON;p3>3W?fiJoA!({GK7Ye0Ne<|&Q_^xAI=MPz^=+konDxTD*)KBP0{`F`#m}V zvF-iACN!U^YgF_$n(15c2_UkRNLLoz1I3Qf@JOfcAU}RS#JG*|I26-xd8~CBol2fTYCdBQTJG$1(DBdnK=(})Sk!L3S z=&59Vrq4{T7y&Ut2+kRducr{NO7`D|&DgZ~U}ApM1=$ObJcJvKH!X7L%jdS?_U4p;dmGvb}6YRbiYr2rQr*u4O#2LXP3-QNO>f^r;2v-_b2c; z8#fDvgb*P#tZN2x@52OT?xGzUE>$612HUoqTM-Sc5-dJK9&>%fTv|Wl-+UDjovTpA zs9LYe&EJ@$ z#Dpkrde`wAsASuJkxo3%FmIR`DdP9vcet`gesjk`x8wPB7)vMTN0L+Vm{Q4JTS#Lf z0AUL`(K2TX&Z4M+`LcahkmiwJvS&6iexOdxDe^k9tZ_j_+`@4h>5Q_c zMe@NmTH2Y*Ez%!g9USE@8oQ*?*x=#wdMuLXq6+tmgTmOW&hQk@D+wp{Bx>P<$N^1O zYFa(f7CpUNW^#)?(2Da)dMncfK7(c5LF_Ee^jFkNl{H$}-ggR#32ni$vgq<_{NvA%R~$-C0W9=r7e{Wl#ZT*`Xz$hKCC)74Q3@J0wn$0S z>gPY^3W)jg^q_Wq@hHHm4v6%r#3U2?3GXNEYv0+PiJ4>oIIPAf`J>o|((K)E1I>;x z2Y7{PAF`+eBNzr9gPqRJZkYTUvK%9*`V%tDx$wvfyE90en;~6;vmKwva=_kP+nyi` zRNJ`$G%b_Ms0*^~CQen>cQsPcQ7WJ$`Uha^}x< z+0jEL(X)B^e?$ONjyI8|EyT#fxGBi`3QifAP)9>yem{C!s-H`9AeHqmq*OJredH^L{6w2NhbI zu+1WoKM-RBP9rOr4<;Fd*L=}j60p|S9vdmZr{WLE6(7R>;%Kt+lfzOq+-caJxDupR za7bG6EtRyPNa}B|r~kz->2d#NU*y9?aK>>czENC%rQQDtFnMLfE_}hDVsDlhr`Oer zyq41g)NpYe^P{|uf-fkZ9F+U>RiIXgmP|xSKqMp+`!BoA>zWIdjY~R)@QRX#4|%W+#)k$LoW>sT?7E=l$_a`EB=tPt&{hk&L!LDm!e=b`hh`-`>*|5vY*CuuUTrUu{t zDw+Nb`TmRE{(t>hgT`F1H6AJ+%6b2nq5AKK!NC%{`*WhlQy4OiLPETE-HGxgAj+@5oF zmT;M}aQh@`{kx@9l8TT}OGNKWCb^d*tI6ZGjPz1v#7-r-j>9sa-1MzF&ZI>*$-9NE znwx%vphvl!|Ho!d=*bbI11J2RlZIaU2UvI%(H=%C?7V)b*zJTUsJpAgQNx&D28C!+yf)gvY8eT>359l?_^yPuo_ z&AK7)+X_S>^3MYQGcUp8m>sA3!@VNu_ORipGpkcGv#-wFj_Y+~dz%5oy&%gHEXo~3 zh8_f6YkkWZ3F8Z>%LnOv4{!em(fj0!SP2mT@y;i?9%-N43Ngo&b^Gn`WdW}UPR5Rxp4sjtTe)zuPs8!-_;u>1eH$c2`58rB{a_0=}CK!1OpokyUNNV zt6(6cnutAk(k>3R@lbqj!!o61O+oRR6i@Zv`P#H`(~NN!R>Gi!pKh7!RjRU z%Ef;3ujZ1)hd}oqdp`J-e}LJiN7#O%zv*t0ax#WFjvLqcl0AL9lHV;hCV&_clC4Bu z;$jKU2H=q>A_+Qgo=tH$cA7-th5uvDKVq3umd+{qs&;i*z{~qjKY9qE`MR5Ni1H{23 zY7}&KT?Z%o`S-HYJ%$XXnw<>Xg>IH-}cWqOi*-$ ze6TXQh8IWMXbPlMF-NESgy=%r15)c}d#va_L3$A@9uCPlfMKR>Slz~Zn=4=jOV`Cz zH-tn6Tsy@uY|kP8Q`LqetW3lmSIm&>&TTFAFDuHVHHT`BrU8}0VAmxrOsb`Jz@_Oy z^!p8(sL*ngnSPR^j%ak8ZM*z}o-6->5FM5}p)` zWM>w^m*!I}uEC=O*D%jrGm7F|#vn!V%tGxGX9eb(wr{;4>O0!Xr|IAONgG7OCAg~l z2@V$TYkO&G-JE*yBnJM%YoNuZ0{2jtQt}d3&DGrtEb~m(w~{y-ELRxZOfC>cqXYU* zDn&dYSJWcF(7@Tjd|2+7{~_HB-L)0}GuPhla7}~nP#TC(FFihqeCZLKPeIW3j5VR( z;mH2ZEKE*-E29&36&%6w1$anivW8ewvCc)S3`CGHlm|M$q#wz;9!!M_!S(W}b6lo@7sm3C%%?aUgDQ2Idknmy1UEwv&$Td3*oNE>%s{}_+SYDfbn%BR zCXQ6)6WNcrE!wqKRy61i#P<>eHy#3EQ44E-m}I)YT9F8&Gf>`HAoq)cl1Th6)jWf= zU~Xr$pE*rZhr*Y%I?0PIcKN-D*dpbPr8(>{=b&WpgjuI1JQZOeY9)ZR+P*0u^#OxI z+>I@QRkA1#kLn?F4jY=#V=C>1s-5yhXrybLL-0y@l#7vErJ)$)XxM|#_k>rlRXbY) zTJS1dGa|a$eqgs{&odG2Z4YPIK$rL}DXGyS%78)2EP9eLT11nZf~DzTFbg$>{#l8e zY)x>aIZ~fI0K8XV(eTK0(_6>G@{v((MCJ~!U5H(G5!r6XWz&k4(^dQJ1hlQTb3guq z%4cu(I@kQxaW~xj4b_$rBs~R-Db8KFzp6@N5V^*O1+0((lO8r`tC-> zQ?h0vG?Pg9mD07Cjz-4E?qkfAwX1iv9O;k?$dP-*kDYNCT2vKpExiB zioqQ^MYW+(nrm*488K2=r?o&OMf6iRLW$dWg*p+;meoC7W2aUeoG(||E{^)S7BA6@ z-_Yg61L^(0Ve!va&;s$-ce@rCLAn^7ozo*&QTp_;H^ zWO|C>v8~_slaZm?Zrh^K(Pfb&>$YIQ{UrvYA`+k^mrX&&#=zHx!rJ9X8F_JF-RX0p zY#|#QSd8f^#s%6i2*2{#J*EK{HdJP_w(@2^9Q1s-P0@w75znZUvb6y2nR}JGHWoY^ z>AF1_h^c15#O$J=9>dHfmiIA+wdwH6Z>r?dH3l9Hh0lx-_a?k>O+T0<|5X_D`}4iNrD6ow>~Nx#2g)mv!M#P= z7Xn^lTaUFqV8FjrE+NvGt|=5(@xdTJn_=alEd&fJe>3?KEzH0%+Lws2T_+NdJ5&?r zojXO6WkKYQ^dzOGN>M8#U&S$WSDZa1-R>@4lz4T_UD&s-sn3YU0IeL;t`-F*M|MqI zFVV>OryY{pdY{kVi$4bT#~f2hqYoqzlZLc9^1GOT?P-A%0(>KXY(ciT$Qy@v-L_pCB4VA_u6gz1Kc^X7+XPgFKq=e zEcgSXO=hsUz`IcW+IC8YOHTDT%hFc&O`vg!GShAeb~A-jm@~Qy_laRYtPHR48VJ6-O$30xqF$*h{R)cP7w*sFCEQg{AXc6*=hP&1k2V4%ym}A3%k#A3s;BS zco0WO0Ae3(U@AglXC^$1Ea8mDRM^h&7Cm(?x-J+uns~V|)o4|lUPqR|+-Er|xVOM@ zi0Njxt;)!LmR%`_D8DMyFZA1VIOP}1i| z{B}1{Fqt|^G|~^CkKC^k;lGMz3wXiLi*oS$@?3hO$~VK>>s4FEsJ|CxgvKqp-6wlE zNvZ@qmltb}vpqP$_BhH=9`@EV0r$y5;)jiIWmDe^5S{?uOHKI19n*rb`AAajCYBu6 zty8X3B{I<>H>JM&TG2FRXtDWm&!>Na@&0O?avv3`j95Lej1fr@5vnhCF#~b=tXL1j zd|QHLh$#87^ioaSP9zD6gR@u~K@#?~onrQ0k%FozFM!-c$s^2PAzwGg_Fy2okb0?o zsucKECaW?d<_=PSDkla5r)(y6@|RrHfy5q;Fc4eQx54B0jC&3a>w;*EJya?9t4Ef3bNjSXxS#O7%6;t&T4 zPx?hfrVGguPy$T0j@S^7JZVt4JhEFXwyUENJ>dKmc6a=>zrKZmJ_@1{!b9V{VoxdT z6(?hm@J(ChUY_@ooD5?>@@Jv*K3$nq1|`X5j_O4p;I#kr5u=ZWrun1aa{lb~;L-kN zcO$;_RGDNOR6eB9LO%K&bX=m{*?Y_QaY<3-OJeJEgU+t+ZfIm8*+Im3mTK&N8GhyZ zn5M%DRt#90DZEV7;(3RK;uncy)n1+!wxo$UlH{(gB`mGs89{z;w1Kzy{6|UIGDQNs z(+=T^qA)!R+3YE>k4l|(z~Mbe8554~sZ3G!7jjRcXl4GZA2ok-LY_bijpF&nC4jIu z^N`Z@fn78_5AL7KYL*Z>W68mFLFCb17rOoXq7jr;@+ zMXbQ5ZTvyGLwDV}pYWg8U`SSdF0Uny%(7O)T3f|xos-u2X4o?Ut?TkN6a1ffW{hS` zqiS-@$?|bGWsylue-}$W^&(ha{q7-A89t1B=gW41v>g-hXO!c>m?mKe&2whHgC*wADzF$lr- z^!y+%DI8=>*>BMG{%YuQXh!hmgE*9H0155&{zTS&b+&6K^*yKBbF+}*uI|@iv2{P2 zKPkL-=$@PL90T&!~mvMuc}Nt_+Fh;HT|^WoF@c+`^Y-fF{oT@@e}{3s-FHWb0Kk%HXlH6 zj3Ju^1Odu5{0xl0no?L~+TXpSf>Bpyw+{9v7kplW0gF@;T%tv8Vzd8(M<$ z6xL6Z8>{$sVQa6gf~2`GKieR+UBL!}hpyb0-Dt_Fbj>F`HPN6n^5c0xJqJZs@e0$; zO`RD681*VOaL!=qm5tP^;k8EcXic%}wzHBKk`%2(bQCWL|6xyCi1d?K!MC7psq?Z# z`iKpB|Ej@DH$JJ4Z9bjl-`PoNruevGRGK~s+=iOU+KQ2bU^e zwfo)4{$OSsx3N#Rg2Gt~bP#GI`7}g={=RTc$~@mO-68`aIRsHi-e_w*#eL#0R%L){ zwEUDw*4?{CqfYr&|CKc?)u3(BO^GGzDuO!(o^K8n$P*^J02#}uM0kT5*^r$pSV|TS zMy4>pv60_ zpkALZdZl3{mDp+lh3=e!0AW%=Z;@I@w~iue6EVfadxp(o-@v346!JXi@#y8MbQAgh ze0%*me@=X#*?AW-Mw=C-#e+g>W^eE1(mIqAiis#)(ngf+GcgZW>6SzW6!wrjQvLo1 zqK}-3$g2bXeA8-M-F6N-YbvueN7PaAW4V52WiK> zZX4A^hHH|;&JYX6x1VJ1T0H1UmEUf?QJ?#n)M_=^pU~%5nLecg(A8zePt1-sfG`*Qvz3{6zWZsWybVyrJx z5pqn0rUMp+vc5OGDs|#8T(6_2_|DPd>WZ~c*h6#Z86@tZj|dsMvzWp&EK9(WOT zrMB7d0VDNsO>+XgQq%7gUA^Jr`n$g1)q+U4o0Y$xkez2V~ zV8(k9Jr>Ds;g^-kWQyAha@#LgW#9CiTD(iqUih#Ymw9kMtT zcTt5ANAV`1c{*JkzYU&sP2t z#|dBg!gc|zThVBNAWZDjq2PI2z?6ioXJ1WCjguz49lmk5o3hkKQAk)h5^!3m7cFIw z9XiqH^Qada5AQxP5q_(%!FRII4N^qS*)b`I-Zcv!6!Y1rp>FVUWsh~^dGTw_G6~A* z%D)J(f0D5fHE!wo_?k`T7eP0(Ol?7CgqqTB$|;7X0{4rdZ*_drMMcs1_N|-04PURR zB<|p0aVgj-23d^LXJfRlb|A&BEPlLrDDcKrip_o1hgvJoWniINX~9>16!-Zm@lRJ9 zg(%-Dz~dM_*H-ut-~J?8@e^dE&^GTKY*e(O;p@|I0IXm$O#LB_zfoks3^e*(7C^Qm z*Q7tnJv2s#C)=&%>peq^JazZrn9A29bDbs6(blN?63YNUI8p&Toz^U%w1e8os0$y*RVD z1G2oDx_MIP6O6;Dqj*Qbv~Dsa4>3iguC z=0S(B)tv-7{|`ym7#)ZEbmMI7#@yJpZ8vCaH*S-SZ6^&I+qSL7P8-`c-u?aG54-2= zr#8~rr^(X>*V;=ni;WA@jkwD+R`(Vz5dVJKcYmf$boITQ$z1-rm`Hb zJ;XV14X*N3JXR3UjK;nd_sNN@*;2)0J%nMEMKb=C%p$_TOhzu~yoR4rSY)K8*eLtm z>EGr06n$I48d_kimKMGg%i~&;fFm_qJBWgTMI!ru)&OBMXej~Sn0V=ueDvFikux;|vg`0KV}-5kFoOeh z^8^-C6+5c6)DE?OX!iOFZeG!S%3CVv`(|mk3_AIX#EaAl_R&m96i2!8d;bumPJ=u= zt{tMqqO$JzzvSw&9G_A++p;o9?;g)z;s?#$q1YDK$j7!-TzF&1;w0=T&z$327U1W= z?BvxhDTGKM1gY6g6c~>!G*4FrmhPN6{3f=K zahzhhxBgn4DF!-D4P8bCaso0AY>sqO-RmBcbWg8sWgIxHy8;wEsbVp8%TuHoEeejr z#ueq-<{p#MZP&KjV?FCCc1f{oOF3bATM0eaS1qh<-1paza%%L7r>rs?&=euj9-@vg zAJ8BX!RL>s6X?qW>iin z*4IVhPZ+>}t~Tk<=Hvt-xBVOg+&C(M08DZ+4YHhuDi-$4{Nt3-hr?6hqxZnW@%K>u zanhuExsm9l?)&sUc^~Z>&O16}_Ucli)(ifWw%|S+?+A9Di5ign#xpN;S|!wJD`xW&7@bj`KE^?9pa9RGKpq&K;2X*Zx$AP8_Gs=X_cpN0(&3i0})n zqAlQ@K_4S|?mIgh*Es^zpNP$7#H`9l+-iq|nxoF_l?`Ze>pq~-601_lCl(-l@f1}G zV_NdO>yu1AgN45B)^D%GpIO&;i-r8r4Ab0uzB>vvv`77vu04Ja?gBrxJrFP;3b6a%O+`I@I%5 z7)ojy&_SL#p@biweeqcnGk;RbCY;?0k}QR9B!$+Mqtt*wH`t%fw`st7Y7 zuB!ruUmKt<718;{JKIt}lYe=V2aHi{g35*w&4w+p7_#HKfzDG1&a5tmNB5vEpdH%4 zrR5VrBtbuBM`OX-9owX83sWp6o6CJHX2eIPOLE%0grgF>G?&orC9|FH{4jG(MsLCI zFUPGJcl{+5p%v4mW@#IL!g<|c++klub@GXz_$lZ5y7QP#K2>vO(xrY=9un<)3YYJa6xUD#zrk-H3X|Iv`cM5lm|+-$vX2p}X&@e=fD ztq;J>1eRlLcx}b&2FWCz`5Z&=u}VT&HeXui}LGp^K%nfzsi_v9o(nA zCEd(>Px&HIcjC|(Fo}zbU)-Bzv#s)`82VQ{TL6?_9$M3Ta++vmO~n@bW(q^f+xSEf z#H|^fzpJ)n&Yj-J7PsRIH{Y=9cg`pOfgb~tp5=uq_08kHFhlscRlcIt@lHPk&Q zTK@Xm84!|qfkB_^7t)@r4}8HJrqaS``pdfC(nct@Mo`N}EjvVG5l9HR4C~Q$JUeD= z7zdpKN`avLgZl?`9^z(6O&a?VAtr7c5B-N4Q0eFdmZb}6_?{$d=Kqh z4u>9=>ouJVtmFK0>|6&~ynz7NZp~HqeeC&z@(y-alGgPj>;A_Vq5Y)qd;DAIOAM~M z3^{5zhM6{on&?E@!{dJin@{jPhs@V#2cF=}o(G==3k?|hL(VW!!h^w5;gVLOXDSPT zI(S*%54uElg)Q8i3ZLrF>U76Hz6hRI5r5iQy?z6Ki*RO8QYE-bUg}payIPb-to-~D_bP_1G-wGG)p?a3+m}v)8>vV zN{ZsbTYy}EU0_(CYZORRmhutfj&%bZvHtg!D{MlFaFlCkqS+%hMI6+Xv%QaxQs@ym zDOXMXZ#vo%5vBCSB8|zk<5M7KQhL(ajRJhQ(06LH_V=vHEDv9nv+{vY}WV1>Y*fyPP%C` z6{UpIpeWVAq;n=ynOK$v<($3?wNmBWa5LOt;77jwVQW!k$z&?FQ6T&Y_8K9SD1f^# zJ17BF`fr(IT7+1pBpQDj;z)S1b74@=fG;~N|D9{`M`B6`dA%_C!@32)G%Js`9|pSkzGw}0 zmj;mt3}HVe^Wh=Lf>{miIy61SQ>eIiFMs#NjX|iPH0z8oC+Jq&#fhGcIMqeL>BU}9 znfWa0?klvj=`C_09Rwz^55aZ>{(<(L%Dl(l(ySTb-{bDg#7N)CoVIol?afXwPvH4WN8Ri( z-qd<#P|1(B`gt&qjkkNc&A!cf zm+w<*6D3!cVjz>8tK-*?8iTD=>{&jFDtcGUxF4H#bRa6i> zT+b^%SnH#6zCI&647DEJE|pK3xS=2_2GRdu*$kWB9%vRkQf38EFZ~%U27d@Kg8M2Z z%IkM(G9BOr42f4l-3skTwtLVsKB^%JNeUa!&W5M!Pf$)m<@oZ=l3i?ZHZ(^QmYbdx z9Hrwu*aqLe<_K4igh6Suc&AfK)Nmo4-*u>*qDaN!;?r1yIAsqyX#wNV8f3x!+2T1a zl4#;-zeK6TEX0QT>ISR<1y<&eBt$BjoS1S2M3^cmo{EbSH$s{F*FFmSFEo4G=K6?# z`^}u^s^H5L;kUCs4`ruYqr=_j6FPV73bT5`&DahxTo|#_@$tW%%ZxuOv?gjt_rkan z!wM@K&~keEaBNPVVNK7ckDc>_mr?BrvOm1I2n#X#RHxE(;%?wxCb(ulD&ULiit36z zi&_nN^?a6WPh7(z(>=~_D`Xz=_;Dbs_Q-7IskE6c1kvR$_`QH+PDFNxv9{LK7wVRcp(tdA@k$4wKG$M2Oz7F|hhUCv(pm{UiK} z>M8fiVl=%!HQS!9v7jU%lx8GyRn?nQ?m#I0T|rFwiv>AZuzXM`ObSE_Bo4=ZWH;|` zau-k?9y1MAvJ)d)q_h+T9WtgI2g5B$*04^y1BTj9gbbk48v5jli;Wq2&A0zKn-A_AFS*f6~d^)o;vBXh~DTgWNDfe;YHB!aQJSB=(1h#Rq z=MU1iE%;F8f@XsLN%i#nfm2BgxN z+~$ebz0JE%=6Z7INk&;ZER@zHdG&%04Bm`67m_BBg9n>`RJCo)Lhf83uvcsEEs zaD$HCj-P+YVVa=-t$aS&j^^Im-1I5D80fi=Pnl36 zpVUofrngYvcrY0iQJSDyMhyEW=!8z<6>%u&DgCiD%C-aV9 zw%<>Xteb3;3?39``Tp~f(k#wlgc}=zB9<{0DG(V7W3Bit6C`D?3AwZ&@^(=rDl>3_ z%kXnxG^`0z!hlT(?(^~XG$dOwz<3)qB*}x!hH?fSJeR7De5O|5T3F3pwE&<2=OeMh zUL(EF^6_s*MJU!E?fOl&n_(ns!D|L62H88tGG4i@;==I{RZb*{4vUsh(is5A%aeE} zA3D|~;$%MBB3nU6`;x*dQb55YAb7&}Ou1KyAX}*`{P@bte+|WsG>)A%I(U3XlqIL^ z|0gykt;H8><2@Hv_?Qi%WS514s{s9Qfe-S!jo?X^FDGCo*^!5Qa*{>tX3;dOa}*#; zu8spwo$*tq#{gBxC_n;ZtYY(WG3qwTHPKbEbHJ4I6s74^ZrCO0QB0To-mFoGmXPva zD4nufA|k-#H{R*chW6(7$1%!*zu-{3qH)4raYdkI0PE4_z9#wt>1yUwI0AG;?D$d| zHd+C{=o?3YABWIfa)chM+srWnZ)Aad%dzWRxr`sDWu)VU$DB^ki4x+_g;J|y!kbSb zbxTHDEGCEEe??8h+l5lU6RpUM3dP2}T4%{lp+lHmd1sgGFrMouo8`V|gJ=Q*NkS;p z5o=RpPRBWSGr&U7^eBQjgoF!mZ_fPK_k$rY_?dZyOIb?=@3I-Mjc2#Ecz5`A`Y?5Y z%iJ15WI4O|HK8Tie~nk_hshZEa09M+0wJY^l}ikVRu>dx6~kq`Pdq70jKt>JDtPgZ z1Bhj~``@o1Jzky$cK4{v4-bG8bVzckt_h%z#2-S2K+OQ;&4!c96?^RDujC!In(Li2 zoiwAr>x{ff)*FnsEv-(xrsS^iqQ3KR|Gl6Ya}4j?$~qL9EiH`Bwa?WEBnx&YgCU=s zF{TX0Cv*$M2p%0SCf;~kV70v=ml*%eAJ&$?^eTaZw7>mO*i!1mjH!unh}qu|$ax5FQ6egQ2+5tE=c`Yg!D(aGvq?4z1!Na* z^sKquLQz(v&5_JI@f>z>>_Ec^rz}~{U{ML3PMtUXy=cSqv@#NOf0`6XuZ_b>n*xy& z{cd)rnAjq7;IZi!Q*{;~Cmp;t`@&B%DAvm-{lO8cUYl7DNh*UN?IXD-=`3k2L$=r= zoUOg|hPB5QxU3;NGwp3_`uQ3cXZ?5Szx(2ng?oARe(Jt!En+ zBxyX}Pu|DDG!E{a3tapOME)8{<)e9SFkKFlr3^010H5vMZ!U5em}pr5;P|QJ5c%K8 z1*;^uzFPj>Duq$ON+SD(q=4|{8`_ERnyezvfqT(XP;-K$Q0c2RxEU$kL$*&c4|MkoigU>cmqO0#q15K4Pbo25Fry9|x~#qD^x=8GGP4VUHBHL>Q! z$KEI$IN)vnTn)+wA5fUMj?rZwTYk-BE>tdiu4(Q~em`p*3P-}7y#KCPjbte=tqiXr zOmsL+)QD6a9s@SVBJ@q{MEV}#qXYfIIcot$M8p_CVQM5qK^r4EKIosCK%Kx}3@Z+L zbgmkn*pVCw8ykGnx$1rqT5L50Z6`)%;tjTRYr!9|AB%opgljkaRSwSjmcT7c8I{kx zUTma@ep~ul2;S~JHij9G54^NRrS?xe4QczLzzqKE+jv)1mWj(lqGUV52|xmhoBY)V zo=LoHIHNHbp%Va*b>SdQ%dT2kO?A}e{Av>NT`If#j zbc%IV`z7RfIFVx93n$&ZXYJS-_}&^{XEJ${p7nav+|?AeZSg8P58avvo-?o1jz?WO zk}yU^$0hl$*tauiVMs;OxOeB8nBF(?sM_>7KlQ(eINH1O`jVziy3-$RH%t3qo&8J+ zl2IXFU2Js4qcOxk{UX?$G5#JgcsE!vq{`}95j)D0aS?bUkaQhZi}aN`X614>+#D8L zorRoN7;Dy@+@Rpwb2J`z{KYL90Fm;y8H@8Hw&Vgss2I`h~zm zIL@voH})Gx&<))*A59EO=c|~D!!uI?^qUVP`OAN&D)v5bByf%m{?(3N{0oEAdN!Wq zM=004KFTTw^!LVyVlRU6g+sUQ6EORDQ*xjm-Q=tp{rM?39O7#aI28ektQDf)bi;LZ zR<}P!ydu+`s2vS0sj!2ZV;-H1zZVJLm9gC#rW zru=g?`VubE2a{rOVK+HkINeSaXPu&f@IwSG#&qmo^$~}Wz z`+O)~1dE&xHg{1P{@y)@h5AN&km(Phk_w(8jS_%(kGM{4-O#V10HnSm=HRF!S%Yx@ z_y^Kxb{!RAd)W*eO*35GN_LO(-Nv9%(3W#YCZarH`u^fOIX-Uj(`yC&Eoldve}jeCg@%8$$@0;aWLWxAU4PJDscH;PEpG)Qza1sf9km&w z6@R~7vK4z_5ebZ^l;*cZ{QE3mlMefhektXzDGVM?UnU=6H{vAI-&ViolW)Z{b2=qz zO3>M%g7cX${;~v1K})X`NHF2Dl#-$VcT}y3MNa((O&f3XL|gdMkH^CrK7 z29u*!;!yN^o_j(EvJ?LL!UAv|h#Tw>t+9@Ab=lS>E!%s{!Rvw6a|=i!ONiLa%VbRO z)Os?4gsVc668Vzu2%IbscC&mN0z8rEA3W==Bx)W@AMApgc5`&9No0n@AT;P&IhuOH zJp3k2tT@t-F(~6E7DcZA<0e);t@e^7h7yW5QiD__yW-McluOLX==liyB0NVK8Ak%& zeV-&Q)7R>dR;j-21qo#RY+erxm_Q}Fu*HAFE(It|_OoQ6BZMBG79 zT6`gYFsmPtmo(aVpHQ$n;+| zcZOG`HjgcJ`Tg%)t(*`lio)38au{w=X(S1huKbk#rE{j{#q%Baf8nC(#pK3~#Q^#} zZwpj$@rlr+*?^)YNE5-M|8%kmg4xw>JiH5+nv4||QP8X&9Xlt0i)19>*VjNK-J#Y( zh*A1ffS?^4T0+x3NwiZ|n~uL#yKdjBdHWBhFL|UQMh&Mgb&cNoe^{g~4Kbz|(EBgb zc&PW}wL=!CyPpUeNUinfpDZOsdnUUf(D_L$xJtt4c86+l4}`7^@5q8@(V?h(3;;lE zZ&Ycw(uP9jU{ucc;t+diY2FnQ7z*CNWj zrH-`vdmnBQAnZUCp{MvxZ8KwA{Yw)PLQD2}pfqIN@&<}L9lOoohRQ?KbXRu`eCnZ6 zXL5*{6|0}PLFq)jU z0(wSP&|XEzsH(AK5B<{aaAjP2hsh`EVv`~l#r&}>aNQ%_M~=@Pk_mX78z3D6jb!(*z8|OHJ-YI0O&tx$U!%N6Suv2QjDMa% zq2c`f)pFE!vy#3?V!ko@K`AcF@qV}jca6sfj_2doTXXiGyVCfSj=Z&Gu}#%9g)tNz zQzxxBie8DFX-A^_nM-}9KpE-`0Ld)`Pd;W`$p+Jp&%R>BoRXai34(xoQWTWv!ZXlG z8VEZU36k{XTFgXIY*O$WJvE{mXz2e<31$ql#@!x_VGRYsxR`NK%tD{5F!&xcB^<;BmrMJYbDkX(Z1Tozjop+`29WphIzV;5J zajf%5DTi5(eqU~EFWt>d*IwgBXLLEQ-pQ_tk&$6n8`ACR#1 zf+DR`Q@?x=!E}Ogw;MDr7x{-zxNsw=|5eMg=BFetf2rEyYQXEnE)(y=q&fBf;BVre z)wsXU43R4vY1VOSq4Z@)_|uXVi~-u&EbNAO59m6oo@$3GTjz0sQ8=T^$+SmV-7 z-nc=Lb__05D)hOtFMd(h$_}mgFSP1c#3gK>La!zX36$;)+o)io<9f-bA3IEq&^p{6 zl1X0Swx?;vT|c)Hc`w`MnSP(WYKag+`Hi|FB=p?hEv*L7820st0#b|i4wwdW_jf4e z5S3l%)}$3~Nc{L&B>L-Gj9fWD8EwV@dj2H%qh|MwmCOQAjs=hVbx0RRD~q^y6FZU3 zYSOY@W$*m_y(}(HB{(%TH40=R2I9YntrBPs3g0ueI9J{ zhM_UvmG>=!A}$J7X6dKS*?n?oISyBt?yU=U>l8M{@ZFq;^LqwyXT<8o{LZ6W!N3k% zmSLKWTojtt|GGRX*->_Sy%0dWA9pC#iFgzXvf5s zX!z3kJE(a^!AlOh+PcoxR^FD%%F4#V!ovK<#zuYt0RbQv*L`yS=+)I#!NQar8>q z5F>V+{KT@>xcnGx=xv?(8G>+-Yx;BT`f&)g*)QOWw=jh|66>KTtszkp=4V}6n6JWv z-R4hZg@I||oJbLR{~h<2`d`IEe-NfEQu7Pz32c_-<9~gvge1z5LHG9<)@OL1jq??6 ztDg1+LzG-saTYF3Qsoai8||07wHL*FELzvm{G_r9>**`q(vBzn#6+oh@O>Uzntv$i zg{%2OvFhsYck`NY2ym`Xg3vU!cD|?kQ#SZCoJ2P(-LkaUfY=Khk~Wrj0%hM_k5(1Y zl9I1UZ0sj_Xdl?OGXI6b+|$Ak6suPsoyQwgP%VtB7S{Ea-9~5`h5PT!BXZ5w)r=9Ia%mzQ z6sIwT6!n#Yw&LDJKN>GPRAQqxp3Ft7H42DeW$D}Q&V!&RQ)2~*OD+QZCD4TL64(x) zPW#FV_vH2@*0y5-WfI?ENQ!w)Sm}4+v^2AcdGGa|K1Fo(>>QMKD(JRtioM8SiHI2J z>2I*DTN%_hnf^>q$Em2O#6`x%#R>j6TS*TO56`NtWrcx*`vnUFlT4edo+~=#JQRyq zIH_?7PyfBbf1(HbQ|k9;H0b>}gUgNpqqTG*ETJVnTNwvSZ^aW`F%r~W&(w@RgT1{Mc2CF3?P7@I6MskvN%{;X z6R%1xwO-8gLg$mmA3@JzEoc-|kWXIaRv$E|kIa8y6elV9hc)&YoObA8M2*%oIoe~2 zE^u+kCoXp5v#)U~w}H`W)U4+7@zQGp6!j1(7$=wshWlLW$d>KLhdyes!ex-d8^!u9 z&ma2u zl$=^U#Mo|`7RsLiQj$zTmN*SQ!aR6M(#3L)g>}Z6)aao@1_RiI8XWc2C54aF z$aBqTQ*9iuFQPfwGDHKWN1;M`D%q6D`g=Anm$t`d0~E4_y-hCXBZjhL=*!;-ziQL7 zsxSKola1JIC&4c|B0ixP4ZflmQC8&2(PmFeZ&%?C|CC%TfqNsNlTd<=)pL%7VmJ}7 zV1w4Sl)CfFD)bU@mis86#hH~8HpP<(E%S!Ts3Wl)vFJHJ&l-R2yFnx(NJwgZVHW>ZO8Wm;}b2G zU@A-F--m2(`4u>pd~i0KW*DHFXRoX4XeNN{=m1nn0bUPK)`x{O57GL_FKBCD{X4#L z$>H|oQ2YA&o=JVdXF5l@9o_Ohs;o0>1eUsbwa&7Pkd(ke&h@fY)bvz6h|0J?(iysO}#(25f^>y?ubFqe=PS9Bnf0j6hzz|145 z$`_U2LWj}a{XMTBXH(^|74GAqRz}lRrX@T8zB87IchCK9)OWg+SDLA_A8VTcI|wK| z(nK3d=XC8edFilus!}`rFv9_huNzE|E*=RL)gP6O9qNd1X5GnAs01M{rm{66Y}_X@ zuwnjy^s4ATdf)xBbxsp@-VCx;`nyz;Ki)}*qy4ljDMRn06co8`Q9Wrfdpt&W!XrtS zaBt(8pL|ECa-uDUW#TQPNz7wkDd+Fpk;RSt^)O6ZdltOXmWS&W)R2%)? z@oY&Wzpfhj(fa z-rPdyd4^aAUcS`RHOma{(#zjEA1HvB#l3w&=EXkF5u4+W8^ep-F&tn=^H0kwYR>TG zN98;>Yf^r7Y-kC%{IuP?5qc8Z-V;_82YHFc&8Qk@#^`p(m(A&W@5M73iHd1j=*$Ft zk%t}=;849SBC_XsrXuiH!f@pff6=u@Z)N8_JHZ!Ts9@)@L*{@;E4N>W6BX=aoJYY< zrcH*nSCkut@*)&L_y<4iYPnuMdVc&|1AxY)+v;^zwB#_Hgp%MKO7yOyihVzZL9UKv z^iFgPta$}WO9O;gtP=Bw9!WW$r<08I{N98A%r>b!<34e=7yC={A+1(iphqV^bJBZV zJcjz7WI(Cj--Gkqy3wM^>c8y;b={Zp2PsQiH7x(guBmF~5SIIgOW7Zn1#DtV-@gDS zk9B`4M&p5j#!yq*_iIem=2ls2c{zPYW#w506yq|sF&z^lqa+9f@)Z~F4>>wIirU`Z z#tjS#VkteG(#jIQD)Lvzg`yY0mQCM1IN;Xr@~wPwADU+C7oXYL-oD0if0u!)d>Xcj zF^i0)12%WFYLxaT-e4b%in&M&&#^}(q#H%{dca~P-ZojdiDWb(2?Sy_-4>|dUL6WQ zq_v3XFtq=&lPozb_`T2n*7S(nnBIw*Gqn+OF7~F3I#-QjbF5><{H1(ZKl!T`&*)-p ztH{Jm8HWwDYH=nMN&Ps^yloj+fR6>AROwPwbLv&vEJ~bo1Tl-^Equb>MM4u5G^-P~ zKxg1EZ=X)bdR6=Ek~yqx>!`N2qjj!!=y0Pm|DPsa>5=oS`IaZJ)u~_O{bIY_xV{Zapu%G|j6|F@Ju4e-BaWwip zTW#o7kfH+ZHOs%jPYHy5%6dYe?=2!@lByA&*=_)d11k1EaE7FS5~hrv;N*rv|57&= zNuWQMmKz6^BN`0*iHU*1+P}c~fR%0>yzN{sDFYLK^)4gwnUJT~@KrZNZx)g_;z*8iwUXi>F(}c2E|ykA4yM7Umg`1 zIbLJfm684H*B4wYtR#<}!HC<0gaj(Y#$*^+SOX2?z5JGzpIN4kusY4O{-za%UJMZP z@{p-K3$K0^aUYdy52+_Fnj81Aoy>beSjp=8wqVy1rwHM!4jI0Cc;n1gq6!&Yp795I zw?4t62$0$k)fjm5zJ2`^H>6(`8?2NeY`!Qs2sG_=Pisy$Yfk3J?yzI9sduG|+7UKxd zv}5vJZ!}Tg$ux`vS%I&%>%%z3(Vt;|aMw7$WXd@1ra@UgRymN^ovbZhC9@yk>UiQI z5)5XO8p7Sxayj8@Xo$7FUqESRhM}lYUMGYa^%}l;t2( zkd>rK&9t6;$Yu~RO9lFsrZFK42mthv_5of4jf4H;!R_)Aao8!)r;;mHnD{28`VbNR z7*KE~54U0Go29>PZ$^TSFzO)M&OmZ?wOH=Zz7j4M!37%I?S!AR{W9@>_Hlln# zafMkV=0N@+8O`6;vzZm&(qYit#}H0<62oj05+Zq{&iQ0sn_LZEgkPmcb?O$zJRD04 zk@s>!LqiQ06|dn$5h=+yIIs?=2w*IXRHPt*#7bO=9i0QAVcc5Y< z0Rkd~Q-c~O#e=hyw8_l)1q(E=Ye)N1{<3E&b_I$&)QvpkHUN|>Bkm-Nad!SV{xX^E zQ+4?1&SJRhjq1BOfqL4NpOCB@Z5Lv}`-52oFH%b=nKay0Qr zl}ZbEHN_c3F+igwLb$^YUIQ9vMr<5;iInGlTA~Z_ef-HUZSq_E5s%Tc^gjv*+_Hc? zp@J6IL1j+pcz$XdMQ&!o=Loql2F+ZW9YAgV6*)Z%6A}ZWpSuV*LRw(Dz^Md-Md6k0WKcN16maTD z$=>fqQ=K@}ou6oom@Fw%$_o>ZPKy_W0R@13UhZ}Lq*^|G5 zKNsT*nwM?$3s@8kQGU%ky9{%!OBa5DkgGL}rpSu$1w6Z|_kGSua~SQ0QJ63H61HYT zksJ$j769n_&k3wH{csD)?ecmwJzJ>*006xg|2pb?ULV#}PI$l)y>IJhXzrb!*;7x9 ztZk!(80+Y15R|Oj(p!>OPCNP})i}vps*+G2OODikRVaZKrPx)}m7)!73XLh?^uX40 zf(@)S*DRz$R(~UZLK1G|j86bixNb9~GLYST4`=tS3CbKBdskhVy#K_RSk_n_u!u@3tCZ!iOk9BV6R$VX;#fek(s{uZFrvOnyJK2K%`73faaq zeB%FvWu3ZsjHJH-Z<7dvV^!YvKb&1_N1B)Rme?N<9+~jHsW4KLS4?&3u z;U#D?(c^%cR+cr{)p^84#fBtc2hA?Kt~>KCjk4M9H2qw?S$D|CBXTA_NQQTVr)k9x zn<2`x{i{{J(jZrJBA}9BHz)^-?u`R9snLWCon8EuKI$Mp-OoT1cagrgS>jsBw6&cCZ)qI`;dflIYaaf%iv~BuzJPlG z?=N#d7N0*QN318+Bg$~X*6nN6WA+-up92Tr%!BLVxwE@MEDDr{bMu^G-nlqUA+H{+ zf7*yVF$Q5m(lnm;%&Stt)w343BQ z_eMEhvBSJTNX0l)bFgO*S&0sIQjc7gr7mQJZIhIsT|toa$o9wZjZ@sNiHmlsbe_`y z)Yd%dwa72B!vQhz$-|9%l9Z%m0P-PCZcIZkEJQS&#n&GsotGV`Bib}NofS;!c8J)5 z$V>j=?KyWQrSkZRh9vWTW^#(34^~rd`y7dPp?QY*o3pMwFs3o$wzjrvRWbUP;IzuC zC@dtx^lVT{SW2Kf13eRy(B<)Qn>ZKWA^J!hshABH?lYvVJAHP)}_{R#VSE zY&FdrB6+s@nCgF5dAFpbT(({?kYpCz3`bmTdWs%Aql^JTp~jBSVc9NY3RH&#cZOn+ z5@uV+OXJ5pwS3+LZqElWAa|t4-m{*HhdQ!KmcFt*c*vsm2rtlY*rQU8UGG7#)Al<1 zxOR=87<=QA-U)}c=rx+@&9zz)&e=&0?^b6l;=% z*(r>Jd!^B&DZeW80t$dcaf#(r?!fx|U(WvkQ7iZEKuq#&hPZ1%-?(M+nS^&C568#C ztnwZB_6-<_6RZYfAqU!WOn6-FVN^GUsJbJg->ix6l5>wGf*sj}oNXN)KPRVrTXnUe zh-5)Cy*&-}^-gz3YB2Ed1Dl&h3Qg+%2pbz4YjyJ_D!V6(70Zx_Jp(-mvL{$&+{(@_ zE*a$+`dR4S`LVe=sUx%#<#A5=$NPU;q18rdWeWcDc zq}KUv!n(K@U6{nz!Z*U#!}|yu{1?~a0$%W( zFxBS|xa?KRHea>FY`L9k^o{)BFAi8kWW!*1jv5j6kHm-wAQE+S`+OBM5waekDLDV{ z3&|{Qqg%z|h0JwO9F5t^xDPKjNz{_Ya^7jyZ-5G2tD#kYV^!^5hL9KuwO97ksJ4NE zkK>tlauO}Ho61?n)?ck9+8GE^$IT8JfXzlnO>!)~C5fyJp^=Ws83NOpsALxba_0$tHmpcCEt$Kg$H|ZxL@h z@>PaG6{bap$u@Ml(Z)`Wamyo>{)@^YC_011R=cT2iUZZT8sHW{uu32UyK3{XK4f_e zTe9fD)a;kj+hcEn-gZ_og zdA@Cq{>zFy8q(`L#rhm3ZzA?nwwsMdB`QKx3G8bEjl{>T2P=8!WOT3pyLE-htpZfJ zXn1aF6mfcJP;vMjuL-RGjHsC*ks3J)Um&{j%_BCzv*lVQlpGOna1AyC4#mCip%1Qe zcD0wayY4E%i2)ux07Gc=&hoaK&*{iLsT3YQ)+9&o2}fhNB^_9|Itx_d!YGivqmawQ z^f+19jJ~_X+GFp&n{*w6l3bxNhol6lid*z;lH-w|YBW)@n`V_uk>#l@CLV<^!~(Di zo%ExuCN(|2UOYFK@%zqDBuV>7m`h7F{y_<|_%(ton25!d`zJfZvCc0Cu8KqqU}gI{kU4Zk$>0vPwUHy z3R_4C_pd0+>P78ZHa4sG;MSP2%l*ScJDYDEKhEdW8)OBIE_TH*3wVD0`sIeK7T~Jv z^4%qN&a?Mf0V1CV?$rLxBfI-yb8A68N&2i{TwRC6s}5phdQp-NAd1O>oh!>C`dyCd z2YvkYNof&4Zc@xv3;%_AB_?)$iJbFzy;R!Tg~X7c9T0^E2drr&T0$(nGpt2oqN$QL zx6MZN-m_MC7=OH=d8OJjiF&vltId z0qh|IKNn-rjjuKkWRFmG8DNo8uyVq7vzB+7E)UYHHQe*1^5i7C^Eh}E6-ffiZwDgj zr%(Y5e5;!juSaAA@s!5`#|l21OAP8;W?}5Zr<6BhLD`}2*+O28$)yhK%{IpxF!(T# zFnEGAK%j&G4L7%Rl)a|*mxA(oO%o(o(eed53%+JXgUS!augev1W~6V17WhDVL{3_N zbwk4lB3NPh^2i0NO(=9o94Psx>>dmPf=Fn1)ZEhW!{xt+L4~cYt#jainc(dS-%1OgO9&?7pan~Za1L! zUcGi62uTVJf3)#i$fn5czN?u+B@FhJDieNF!xv!vKLBSzn7*kZX28Ppp#$iwAjv$F zF=5OPmHhnt0+elBvrFGSk{JG*Hf_>20CaG0&}ugJ?c0YFCr)Ue5daVfNOVL46%~c3 ztWtoYssa^NmEcvJcI`mUl}pMftOjEuJezQ#QiCF;3Vc+dsFc8^CcR5tNFD!fVmcRp zpJ`bnV-OP=|0XiVUe!@ZlYwJt82nz@!oT zIJ3u@Y-Hw_BI#-oG72hi>S7T-wBCTxYn>39QlJ5k6X`{;Sb0c+l7+aCU5FFs3(#cb zB8=bYh7av`q3NXcI24(J*o*nFSaBHdTWvy6LQRB)yQ7=>-FxMLqyl_1WASp;wbc1~ z$D>3&7^Rox^^Mc5^v=gRkFc5PyXpM9Z~Z#2!<*Hn0KmiKoDR(}`Y(T&rf!krNSxRb zJ(F=nJCfjovWmKmHij8|+y{~g$wp=4a-xcHCk7pjIT~{83>N>=z^6xxAcTe~bLiU^#sfrcIxM zDO1()sS_}H$^=Z9{0+uW7>60CFJ?Ny#-@h}C zs8mfvfi6Y-Y+LpzL)mOw3UwOwbp<|*Nyeg{d3|9j5IrCfFk%Xj@E+-%C%BMwEj{x% z&*8ZQ+@hf5dC0d-)n^8c)C_Y|2K%GT+AixuPEq*by4F6vXA)zbbrviL&&|z6a&od(D9)(IvSrJ($b)fO7QscS;)2R5lqzN< zBkpJWMP6#ZEARC+D^hcEucQE1(bG>qO?gb+K!cEaf~hbP{h$ot+^jS35t4NIccE#I zSGv{hFrz@{u5lB=LgW;dX~#}q$U|~Q9)8>18upF>@Q6;qC-yt=>u%E#7MF&+l5$Mn z>Vf}Q%)yCsHDGSJ>j_*dD8;^rB>bZ5H2B9})*>O91!d^9a34HQU%ugY@0D3^vNt$B zL3J$+Lu36f2BXw^8mC*)VJb#rodR4l-5ynh|2!@UA;%gyV?M zQF!?UV9ok9Sg>e5X4=ny{Ty4&oNc4Ml4sAe!<_juVK>WK`+L^hnsfNd^Jb{ycG{~A zrrA!#RO>0~)e;jdC*Ye&V=-C*kkMm?p-}FacIGhoYm zj7vT9_sATp!p2~P_eR#IYDsj2%)fbzLWSq? zdwK;$z9XuNA9&5AasIfm0$|l~7FCro1EVe->)Uwi{ElpYlJuRl?_IU?-IAlD<5RxA zzA3f#ah(tic(UGr=So#uw{F!wHw8Wze5j~Wz@V}WMVTo$>$w#Hi!HHj#OKI&S%Q+o zcBpo;0uIeW5W3i2pXK zaV#wlFASQ8c?W_Kd#M0vnfcfs5`$MqEl1kb0`++={M7k=aoIR~sqmf()D`%s`t`4W z-A8q;9(a(&@hB@?>gy7z|0O!l@kRMhy&f4vauctIpw*ka^VZe|f{$ur z!~5Pj3T^?>aP2fh3>fk?di3sw5hI3S`|f>k^^d+I5W+f>k3a7Te5fe-z(cx+E@Ba+Wd~&{Z7cw&+qA=prHG8$Nm|p+;6L1rvZoT5xRbs z`gS==nT%C?J^mge75puN5WXjyBDseR8#ZW>8NT=N@zFri(xpq0kdUA)+gn$puFZl@ z0UwNjP$y7+&^WAf@Zo(r^TP*K0NqfTpdd0O54puOpusI5}TSvAUXHrhrCG zoyg~Qo6u|CcC9ai6KmR)=UMLX#+%=)K!gG_XD?Bp1a(Q0h#7=u{z7`jg+6I2WXG3N9hWg7K*5JE2l z5h6VfQk+gNIXw|nKJ-dZK+uS#uz2sMzcYM1be+L{hM%F#<`(;f5S&=7FnFr-X$b3u z58q3nxjxsE^(f-?pm$pajIm;Sf;*a*ZR`o37R>rQd9*_vjF@7%J;Wh4O4KpR}(g;+>54u9jX)n zDLXPveLfq+t&WJA6+N!qu)A$&kA{CS@x$rShh2_e$WdKO{i6pTdfjilrw4TtQ~Kx(m8=Kq zf7&g2*K655N@|Db$YzQ;<&`X2q?c2sY)LcS z2a?H37UO`10y}^cS`R|lIn1wQN6|24+7m&Dq-5z=$RY@#z#wSo_=Ep5bn0biSYz#F zD4gMYBluvU`9EGYSg7-ifrmcisuw8&+WTx@B15un0?*&%-hWLKy8>sXkl1ZiV{X z0S@YQ$*Kh!xR`D~1>>iU#n?$BFml{bjQD0KMvWVe5o3p9xMIEz8#x3c#;Cs)j~+Jy zV<(Qrq-hg0074*QH`^AIEhk{)=%MI0;46IA^&|D2K{(**kNw{h1tIuYwfP{IH5Bk6 z08jEDDd5@0>~HqJzK!b(>Bp{~WgP3-_?)|pn3iFE6iWPMkPVT5BNRGYJUbYg$^Gwr>YXjxm*q0E9+8nGuS-f?`xE6mc;+0GWFg z_&CV)swt>GWQ)Yb7C5`W0#%1*sbjXN-fx3aCrjYaY{WWmK^dbS--8YKJN!*qX-im0 zYCgC!mp(c};yu>|_)x!{fB5j>NY&)G0v~z@(LI9?uh^_5fys~dPUiQE2{f)2mf~c( z9*pE*`gU*pcgRBc#H4HQqZF8EGi5!-ZFJH01PMthz{10!c&3{rE-K)1>U=K3;?wct zPp4vU*jWvn5Y!wymxrQ?D#Tr?>7O74eE6CCmMQj&&#Qj^h5rpwU26DF{S z3aB+slez1$Wv08Mt8JRJu8;K|IqjQOz3|f?icKkFO21;N@yedEXwgj>G-i4*Bu0Q3 z1)R|A2u^N^hA<_I%7lhL6^nonhCykt$_iOh7s5`Kx)5$!_};sN4Azz|hARR>Mr}1j zsLwbsWRQ@JL$0zcng}1gQqv>V8wSi?xA60(jPKiJ8tKkHk=VL*8)na*tpSb&%jRS8 z%0+P4uu9|E3+yr7b}DS`r(?DP1&fw1!um~Xv3ctTY}&jYOV#_CvurWRay-V2ABAC~ z2c!Sse&{!-5Bl`)giP-M9 znv|^fkx5w}!G|$P|9=IA1xIBqF6Z8tSBve0+TV zPH%r*5sh{N45l&d-MjbtF(LlVO#sO}N2{wqwYJP@Re2uH>|TQMBaD7bMb$oQ)-)2j4* zJiQPHA`{Vjk)!&%7z+-E-1}+wqM~hT)SB7|y-Y(J)HA zr>BELM_59xQtKg64=E11t!2^nxrV`t$>IQOs*}>-7b`>emw%Bl=_HxM7&6fQ{9RY1+zI{S=_-_+D#Fv9i?C#7sRK zdB;J&tE!3E#%z08ZkK{yQrpCMFbjD_)iHxwnNzOrkX3tK4eK>mH6Q0I4F<{#$__mc zk#Qws>z>A!o15E9DJdy6JO0%HNu*%QmMz!cOKKB|hCJWv3%b=ws3iJ86*A%@aOL29 zRPURn0EPk^uJhqEv>nP6=qPuzMES0%$lE&(g}Y|rT&O#)7UiNSzeu|le~Z^Q1seD} z{G8_zWRT=@0wETv^K*g|?u^dA>yp&tluuC<$9(>R{E#QOtz!-eov+Phm{iHHr z4+JKem)gBuKAQGz#6!;n7@^6z$So;H(xogs)6*9F!{W3hd5@hdKxf;{=sjvO zNd=Z42}PqW6Y=JlrFd)Ha{TS7mf7U8%YOJsU)$46(8phy#SL6h5-9H@)#vXhv`&t1wB(^_E7Z@tqLZ!~@d?=*iCUAumcnX_hL-$5trKJ1SpzQ^F|e+n)v z8fUb^GfInE9P~N{Zbs-49HaOQTmquu84!iNhg`9I^;&Q#-adW0p?j~-F=%Li3?DlL zQ>-Uqveh^Rbb8>u_uJ!}aig^*fK5H)9_Nq})kFk$65^JnjM>(**M}K=)KXR4Aos^| ziQRkQw4tyb@ha=VXf)7c$%rK#7L*wrSCX&Iv86X6?s|-QczC>-o}PZL#zek%qR}24 z9E?ksE@|(L!2peau1Y0_eoe|#1uCm6QOxry^AWvs4$6<%qkQ)?lyomvvI>_iTeeCyxjyZRa-JS)I*G(k6!}pn;6ssi4X3E&W?r$^uKFj|)+?C#u9!QY zXBLzqyRZ}?XV2lnwIYP46y9s$tP2=_)s8DUMNODLLQd8 zMBz_g%|K>h2~M2P(^9RxVzboua}k-GgPh_rZO3%|?*%0nqjR@DQ&ku0fd^SK9`p;K zNS!D35p4>+?l;y+buqTgben|6jT_~6XjW_r06a`4_}Kl*zjvxzG>)cmTuHqLbrR*2 z*pt*p)J2cAjZ+^MGGn#Oe@M4^m?a8OX-5Qy-V z?|Ga9MIZGbu+e)yzH6{NvDYo)B~ym?t$43{B>cioVBLoGSh94H0v(I7e&ZS(IpJ??v3PiZw-ll>3)ID*7!5Zd0M!-AtB*LPT;2CrjI~*M`Vagcv z?EfVOjO>SRCXImgjH&4Jbx*YK*bY`U(@X-8Lki%iHX`WY#N?~-#567#Wq&`m6SFdY zP|i)pwVA(@%VP#Ix<(nm8UV@x{!O{Sam8o|$CiY<>%@@o@$q>#Gcz-`)<(W(x_0dv zTwPsj-_?)+5CQ=j`+OB95UHprL3wqRVs%bgF|NdfAYu1hRPD1w^&u;ytQv`gWy4W% z&`w+Js^qXGN*os<>)aWXvE+l-s=a=t0v`Mgf(yRq@9K%*LhgsVtP`y0iNJ)PZQs6K zdoMudUWt(&dwcs?s>vzOWwk3k_z+o5@WKAAOYp&Q^0c*|-_uUV(pLl~6;|mDTr=M} zr)8DkT45P73QBM}rwG66VS^PekqAl5K}BUXKC|0|_ol6Z8i7d3ELH%6%lek!M;}c@ zXksP;;1Epi6CE|9f_a`d9D4oz4IE)Bj_=hm0+$Au`VH5CFd*q-U-Y6%u&@D_1SY@|8<9K6rQ^jyNC0(BXqHWSE5(?O-~U zUw}7G$3(-|-wS*8?!=~jl)PgpGYT!+2YdygpfSu}PZ z@xq*iv+%XWSNLYa2w2%#qEElC@aEgiuwwPvny8BIHyK@dyG47Zyiw?jS3tklhve7F zQkjn}_^3W>@jq^`XKY-X`8zma5K?`6IH~5NLCX2gF~vwIOSdP5nGMq@ugip*h&GDOa~gpuzEF3~Fgx>KD}! z8KsZTn#WWFAa;-_0%H(joRY=#9U2=HBKo=zZt_ADO6A2tK_EhAxRt_(pXrsEK8(-b zlY1~p+qSv>+{ypc4Mz8^*eCRu0vyY*(qSo9uU(0NAb+e`w+de=5HWJ}Fs*)rsaLUa zXAphz7~DObwKS}WlgFcD=MHGn><#?$xqo2TsF672835P7(>JU-B~c44txACgZP{K0 zE_^~_;1zHRhutEuYp*XhY;(u5HHTn3e+MSb*obj98!_5yBZf|11B-FXFlfvI3>rNL zQ*GB`tD`5pLeE?WHO>m;9CGu))M?*n^(fP=EzzyVmuULt8#v1q+@~pd#dT#sG$^WyAK+lF_qanoKMbRKz1UYZA3aT++XS^zkW428 z<$wSXdY<$Sg}YV&K0ZE+6(G1!Ya`zkiDA#3%wuC?ufG?f@lHdZQ3W9}=m|c!v0z5V z6_hF?t(1`rbu26SG%oI$iHd{M0hc-O82v7)4{^Vb>8LnliS$jj$j?nju~u-dE+ju! z`_eW(8GHoxX|B=6u-+o>+jvq&rbs(^8Q{ZAt9k)$dDleRg<${DZlAVBG9B< zmt1N(phR}mg;E!J&oRPl^4gS7lv96NeIU>}B(0>v=d8IP{cbogv1TW80*iozTqIs8 z)Y7s3+Gi$S9x@L{6E7j=V!i??If%bfg3i_(&~^4UBwsB>NqHs081*=tg`h;HbKQ7t z|Ac(>898~j>L)$$pmC@N9@If}Jkkcxr(4}h58dl{GSgjBR=YRjO&R|Wn^RjhzNT)E z<4VStK9!I4!(!ivb5+LGW1ZR25J?08Sr0PO@Y{S zFdBQ@6LHx899#p=HF2FGB`TDcDc#?8j({m0=ei;3_E_;#mrzPbgRz-ot8 z_-5=F*v+&;$9LPH>zALZYkV68BKWXhx`7)!QTXduf}o+O-}$qy4TuIuRSAR6n>4V^ zd`m8iv)~T140DqulF6~f`OWb~03vzZq5y8osqkH-z=xBvjqj=8Tnu(8GN+-hCo%Z- z#|0eldj+{UTC^cQUx5T==a=z%Rb@EgxD;j1b5Nz&=bO$b+h>b%*J&s}JQe5G+Mu#9 zizlm#)!c*j<(hxj)3A7)*Cq(z-;8t+c*tiYMo35kh)Dd5-*Iwc^VGcO=L9NulZtin z$8{W~$Xfbg$&R)z$c0mzFt#QKddfF&3l82P5#ab%XcP+2$ z7#yFV`bVN367dkvG{+HFT%@dE-66-56a-TT89N=#M&d)J>~>A_O&R|Wo1I?&kF&Zx z8Dn~2EBnQ8Y)QR`KCRq5t{NzbQV_*JCO8lfLM34gLfG*HAyOB@yl^Tm0uH{?IHC8Q zpA(_d2$uAW+g4`#-6IRc;5Nk`fzjBtdmC1)TB3oEGqESJaLGLM>fHn1j32EnlN%lx zg0%Ex96cTZFJBi8m~`s$E?#f^D*o}@-!W(5Vy$4DyPpR|#bUv#?Xa1<6_)l}@Qw8b zj8Xi}j4hZv*AX_$oiTsCFV^inhCLpMa0)yR=YTW?S`x71;884F=Z3M9m!r$)Bk{)D zpW%g9-o;CAe1Lzy`Y!(4>_aqe+Z|nceS;axcEf7HF7y~U18qC?!p5D4H9)~i@ zQGcsS8eDnZuuiSHamDreX;?6wLI8-VT<&`|E)@7UR%;*M zH4#KyxpIXDcI}ZG5`&#aJPmd+_DS-$R&>rf3w4ds;sO*G=cA%hfd%z(UV02J?6F1h z0ed8@7>(qm!;!Ur910FjL-Zk%#&v4S>jR@cvj-&UzHN zC%*DH|0bJCzaqJ~xM<%E2nfK%ix;&*bot($(9xqubDK78%19||@=Sq``{7mO_sP5# zuSuhU#sgDw=%Av^;yt`J+II0bzHzx#<{i=RoVnW7wSp3D-w(cL-9}PIF(z;Ez^}Sa z!w)~6h<|)N6TxRMXd4+a62kB3>pS!udaew={r#W%seZXt)Prd43ETHaVaaMIOtD#q zo?lNz^EN&3@0UB`pD(t@OO3nWt+u_;@#A6WZefk#Q1*-+m*W(V#gv&l(CzEVc&F8e*ty^1hUaq)h{m?tO`xK{M|mlVD{0(U;@Iv5$Uit66;6v0HN6+oHV(z{RTfx3 zYZNw~425HSEaI{+BfGR1C56SPA}~NGwV} zefqRkMDOhEjP>i+Ysc@D!otF`UU=aJda3o14@Rr0*eSzhWg;;e>q@cn8oU;-Nuz<| zhWde#7XB`OpZD?Rpa1q;yInpf{ex1A;d6^UC(L{!6F{7~Sb)np#qcsZ&M3&aYlVot zkd2gUrN}F((2jGX!At7=%%Tbes=xKu<7#B1Z5J+6{Xt_;AN3&ckdzq7$EV|qx~01ug~)$I{*$QYBTntpuIwxN?kZ`)9gm_h9$Lehz3 z3JYNh4^bLaO6+(lC`L6T8bYN-=HILp5#giveB8DGI_McSPj8S5GdkcC9EBAQi?M3W zVz_&{!_~_JpLhKPqs9z}t(_I3j)fueWIPg*Vi6J^h}m=P(WZTK{P*SO@W0nyfO|m1 z^>imPYdXAwPh*nZ4uqY~N4KxWsO~i1d zel-YLZdbem`sH>Xy9rvII4D{VD9-v0Lbg|Tly7c>vZZgLYD+s*_MLyB~d}norUyB=k-1CcWk2-85DL_XIwaP5eYaK){VTQg=ZF7c|WE zB*r@<3i7v}nEJ$si1B9x289KMC{e&9x3Cf?(0T6xkgPRN1vy1 zAtns}ht8MUzEPoW&v=Z9<4g38)U%pX${!OFg~1Lci{fCXQ+aRz(DE8 zH_Tt_h573|F>j4K=B{?e!i`?o?GcBA0Tu1_8Ncn-2lv5u9NJBTh_xUL=(Ol{URkj6glMp-H5U{$*A2;Nou$YYUVu zYld>WS5PwV4V2G*6_t~oNA=Wyqh!wO$T>O?Q>IKoTF_&>GFAdN7VMLvnvdg&3PA7S z)GGlRhx!#qB(;xY>~`n(4dm$P_*6(p$UTFPbLY-!#pZe z4+I7VXmue3OuRpd*4!?swkY%U^-X{J>8EKdlDX0q!H2$<=YHl>^E$kq=n(1;0U#0q z;eD`ffR2>6fBKu>v|Q!rvn~95`E}#i%y-8G7`}=x=au8+g?#lsM|;oZb@k_krI+K? zW-W)S_P-VIFm^~#CK#t%v2XRjqprq~neLLVwQoE!vu)F(74N-`f(~z*1Og9(y_>w` zqi#<>&WyJapsZqj@%?m;n5iC;2o5qkn#@iY1wzAvii(4Q%)iNcuZIkf+Z`lNIJyS4 zIO2Qa24kG;<{yFOE0Uca1yD9(=(t7rYOoDH={XkfeL5IzI`u@m5BlP>J`*r%`f5y=wH1RWufm+Q zZkXlZj@hdTL;^9}!55Zu_haCw1!(-{2l%@G$m?lf!cIQNuw>a{yxZwrEM2kkdTq!7 zuVWSe`qzK@t9H^)QWjcJGX9Shp6Rn14?uU7&DAClKCD~@nc1LIYZWS-wK`T6<%C^9m# z)9C}cq{~kXlDB)+-WfjQIE7tb$$T@#jTlwnJs&8<5 z%@9QGn2eeGR$yFd7CN7f#l$PuFulA4(~2{(G%X&dQqyrcGYiF~WwpP_-yq0PuLK$S zMaZ~(6`M9}(!d8{2+t~0zj^g?Ca$Q@sw->iMye`GkP;h<=%YukgAsX-+a=W&MJ_Hb zF{;UF*z3UujeSP5^!e2H3w)4yP3i{f2z>;E={mdzjxRb<2#V-XY2Kn;=Px`?U%g^Z z!@7G8Ovpw?ZYhEib8!58fws)9G4No)|ALJN_o_Ch^Fa(kV|gIyFwDj07-Aimez5{^ zNa%IHnd$*S^@Zb$Fa998ebaxZwRruj%WWEm6?c3KIS;WGr1NinF-F~*9(+hf2c4=i z#wZU&K0TIp&Ermb{r=$+c;*IUocm}vySZZ3>gCvXXb&Pz zMC0?WA7kjS!LYZt!-->2a1V&ax$`NAIv$KM<3^x)tGDszzy1je7B5lPxH*y{>=|+j zHjB2xVb2K+owx*p#;;VM!ymI(2EyJ!@p5;BpDn_;84hUD`eQU}*#)n?`7T~~r8%B^ zp)vmY?92GuvoGSs|24()|80yW&ELa^-G^d=-3Cmw--iBUmTGBNb5?mN@Zk%)RRLJE zF$^OoIiN+mZfMr54T6rw->|GMBR_`~fEqSpD8`N(cYW2XgWku`<+C1>RWnI$q!@=R zBBdcgMIasmPEz*AV>3ys;|F?}G_Xx^tOd#zHbIr^N1FHFj{-jKYJ43!bm(Vi&YY<=k?)QO9yV{@T>I`@qJhqh^^A$2M0OV! z79voo*`b_u7wQ^i#mK2G1V3?j9m-vnBYa*DoY-NBSzg;PFzXyTh98A}Q7P>6OJJ?e zw<^iS)R-z_WVEM{*xN!LjN*Q0N<`0&mB0mcy z*RCLH-vPKRUJS>nR@iN2j{sM9?LO{?N=r)%_wV1&&EmA$3dL0F%%vuvGzK4HJl3_$ z;Ppg*P%a4o;cpVm(rLn|8XYLSCyqA)Bm&m`wE*;HuX-kA>c8ASCmT z_8I%>rwS?luGLR}`rozx`+L8*=C4OwZrh|Pqg~VLYbJm~U2|TCX82R1MqjJ@5RgmI zD`|bKWtDmleJ!g#qr*JD9wU;@mO(5`MI|i9^yl6Ytyy!lk!NW9bwix&5fqK}8y&FH zVL3v=!?0-C5_J9YGfbK^0h=~$KvZ-*lG83|D_`wDveB>EC$koj0{5boJLV zW|x4ISiEjO7HkYspyL2O{n{FH*Z9MJRSo!9sDQ${J>huwlm7V0&wq=ijo-qDpLWO4 z(UUQI@j9&Ebp$&P`(vM5sJd1(0wPXh!jxGUIA%V!96W(GAC6GK!yU5~_?WH0$4qt2 z1sg*!ZO(4I`(a=F?sxw{a8%q4;Ddh$hlXJMq;cqPF-U=tn#jjt-)Ic|X8I!4Ovbs9 zrq;q1<52qJktU$)Q`N~s?s!-8l1=Suq9R7ebB+x_?$Q1?9e>og;6%Sn)qE8AdL>}0 zrbwUGCmyJK0=Lf2&c8Z!>eQuL8~Lt?#{KTyyKCQlO9UA#@YWLn30YQ_(!d9gYwv*k zynF==Dr!=j7^SGlM|oM1R;Zhoc^S!DZQwlReFU!?j~V`Z&@DLz!%{C`R!J%5<`lxd zxCEnfvoWKn5IfwQwQH2BWASlkv2FVnZ6iW;^_s%=g4%m1EknVj%ZTyzhUdx^*f4q| zTxZTefSolWX3W6xX?F0oo&(3tTW$bKcR~tK6>r4-&5_ zI)erT<&$OzDW=SlCAyr$hZ|M=7Rh__w|No)N^*41`Rs<=`XSEe!rBJP%RIy8m)Esif4 zYXWj*3juwquhe@mvi8{6G-kS)*y*>+cTCI!-|KD!5PZY1WZ6P&*tiDAPRF9p*I(i5 z0evuIh7CeP1L5R%9EmCCaQaL%CRvWvip+ogn_pn{#%(uj9B7KU&&NhbFU(l(3P-Qw zX!+3~%wOlDKth0Gf6QLzk6Ei+@JY{6_{|^wiGxl)waed{zV1Qwdv1XzF>>m1tlS=e zf!{2^Xsh)KfOsnK;fI-wd~6BB+*QsBeDuRFfBk#xcL})R8Z5342nxZ($rCVY?3n9m zSBHI0VEW9ZyHqoAl9H(q^b=K|7V~(4kEDT(abfs%qq_RcfE$eLTXA*Fz?+XJ4aR)S zE_nN$Rwy`C^LbU=AXFw9o!8J=fv)gK^* zsZO-5? z7gtqkD`0uJxM0=VmD=xVzjOH_;sgERvu-sUCr^f}r6qiAW+2qg4#Dd0a4Rc>%$SBS zn`t;|X#-EY+1Ti?66K7d)B>nGp`xOq%6043?Nm+9eq=h6fDc9&^xkXZg(~WrL@#j6 zko5qB#w*7a4Os$Q8XSz|((@@%5N(;@=}R`w^o`Fe@ij^vGP7wW07<=8gtHg(a5ODX zi-yQ&zHzzOa3nN9wJRMC0zCAxK)5O3`24msE z1xQFtQ0GM9YUWjhMTFw3K3&nc*{k@=KmMepROzo{iWy~abP2-bd3zCb{2Jb9)eCdh z`(egve+54LFl)7s0wW&iF<=UQ|CfJb?fPvu6^I)%m&{$T>HwB)_J!TDUHG)$G%Q$K z6Zv37W!d%!EZO9ZHl2Fm7r*)=4!GW2lj7p(hmoU3VEiOY1wM{x#|V^`tl7i8J~&Cm zOTZ8%SFxdCAzlJ02o_J2DE&v4suBjSyPiIkFbL&)-UH5B+-z{)4yO&l7azCBm!Gx2 zz7((9<}cBqU0bC2_r394-O5@GjjNLfSAX&DbH;hM^mOV|`tq19hh@GJa7y{{}Q#pU!&oI96`&1(a2Z2deq&*_Efp-1sqbRuRIKx zVl_>@S|fPcbc9TshKT7l2(ht3sFe+TX3WAydwY~9a3s%nC&U_-Wy_YWQ%z0-Ucd+C z1&v7dtAI*lnQ^~J#tfOir3WFr2S(O7&gfNV6odu{SH$8tWE8IXFMs)))_eR;2L>dX zHz&Lu_Edl)K7*@U-B>&06`NJos8J(*#6#qOq`^q~rN{zCq9j@-sd_YK%|>DUCiaVf z597!O=N6q2bYilf2{Z{n82zTLL46<&srNto&96sqc=@??$KL+miQINgi?Z4`)1o7{ zyPPjUi{-O_nWL^H<4vON9BWMNW3-(zN}}yj$I5YbPYy3Lndv)88TU?NgdgyVf|s{1 zmMmA`WBVp}`FP-iF7IK?HzSqdu^NfVsp`Baq@||7)6*SYK6)1~y!<@g@7z&~6v%aM z#g4AwaPo=5gjqWfb}ApQwdjUfYrU_74|@l1EZ*dczQbnVFVDRKE8E#P-U9Y#dc@B-+eUZt@Y4~&1bIk!^Xq0Si0F8jazocuYdI$ZFyaN+7b_TO-GVnU$kn~8he&~UIQ)?2Vu;hPH5k@4a#G_1vI4!-1zV4j$+-hhQuW&`xmOF zBY?e?5|EYDOzkkM_j2CV*izu5YhGU7cNTr_}Vz#=^p#6KWXXXqzPF7%I zytM)w3UJJ@)zYcLY;6%T-AWysfhaqBjU%mQAi~-Xq0`iP)>i8CsR)~F36DvZ*fGr- zmoHwte(!fenVFe|^XJc>t(u&MJNuKb1Rv~If)D))W)A{<2+7#tIO1<|Oi^ah$e=f! z1`;DO^sv(ip>u@>3GbchV{i5xI&O$xTwbnUf_YiqJLRC1Vhs3ZI*mX*_z>VhIUwm) zjIK)#KGUrz3yjmP%tm4TCYfjKC(3VvM%oFq7dWqEr8zn>Dfiju)B$utQAg0$5HLd9 zL+p<(jeqge0n?uQi+$LeFNI~cZJMRPMP+UW1xAcOhcFA>-}&WFhpO)yk2hYAz=!Ey zv}Xv4Bqda$YrKDv8)h<7-O^t7$c1`?d-vXb+S0kZ_w2ytEgSIZ=O1GHq_Nn(V=IoI zj)$|~F{GxYVDCOhbo%gpJo}$#G1+qJ^@zcDG57lL42j0LnVaDgc@0h4^n%?=R|P)& zU`GJ5${WkK1!3^G`FQ^2x6!ZvU^w}GH>mNCjK|#NJK+_Uh9To-;_Fchv?BId3V6(1 z<_y1MxtKU(E&lmZQ@qi*=}mim98`eoz(Gg6@WKml^S^N=to`m0%+aSX;AE8|K>c1H z`pJ6FsWAuSf;_f9!~g*TeC!hVM@wD;BOyv(TnsMcSvzOuUCWZ&*5 zRP*VL4t>g%@dlQrl)ycWD_>tIIKv3i_6e5~yikeG&$88+~l zG8reQPD1#^2?!ZK4*sJ?!Dskz9Q>*`4t47e$4@`Qo{vAl*7rJLUHgt$^L9(@Y}E!k z-f4+FO!Zk(`{IJ$35T3988nJoMm$hP-~)dI28~QeKE5!QT|) zNW8N&Z1qtPf+R`Bk|+qh@o#N#iF8o_q}r5`ZRVTVH!cUe17eS>wqvAI4?buJO7v4A z>(nnCH>5q$&22pt>3tKrEQZ+uBt^a!l(y<$q$}-iuQ}K z-r+U*TLeH-?_tU@!sjrPnd+RL*y9pxamc%-P@Jho&dx4av}^&k?cRb_>sH|N?w?}Z zWCcEUZbe*T3jD**AUP=kd-m*7;Nv~~a=g;C1K#cQ;Z0zH0O_E&V)g155s$Tde6f0OAdV+q!=ImP z0=uOLFiTy}cDXxtyT>SSavAS`ItV}b$**B)ZKpk>{(8Ql$FOqcGBj_|{AQrz8Cmr6 zpZ|)ALOj&6CN{&A^h(|DWi#s?RmNLb>On;Ii4i#DxEy)WBT%-WF)AiMj|!{*qIAw{ zsBmbGilxm^GW&H@MfI)$BzmJfbqEH2^)5QS+g1Y;Ja)qAD>PFEq05GD-+~ndQdZb~ zj210hAwRmNzNGl{Ks0-^1>84xLxut_vF^Q*e}YT>)_$ixv3l+yz5Y8@HJ=`Q=#38j zTK1R=R0aOjVzqu^>%B}E0=YE$K93Um~eqAaff zaTijsD$E5d&iG+vtUp$t3dZK>U^t$Pz~t>tczN)4yfi!%ulDoA>mRMd3op0FOYe2V zu+a-)X)zv?yAQwyi{aScrxy-=(gFKFcptmpe-GQ+HOGe5t+Di-W?0+)ZER}U92;A- zz}8l+v9o;#Y*DX!TeZZ#Hm$K=@xIn=G~T7={jPQ`vA0bN9BJ7a+uC-3RfqOCfBrll zuJ(CupA=Bb89jP*Kh@+~&4gka?d(@ZKI+2;Ui>X#{V1rQjGb1|t$3 zp)TS355D}}ug4sD<3Ib)G=J@E_?s_BsAJSM67}HU+Ifnpcl7lhvWzqDS3lOwWTv{O zJx3zmcJi;O*PvnV?Ba>}i{`>%{YtFfunM1k`7y>$8jTH`)*&V?K{Nc5k`fh2If9Qr z>w*_wdl8eTO}@TF?f0>NBM}o0^pD#A=^1{k>PMEoPHzv*5j-}gtaV#YteTGg%t1f*pXU!2< ztvmuppI97EDZsF?v+>XWG{LW)`5m0RB5tT5(SXdsgZS#Jo>;WP;iiIl1#qhV_ePUJ zs+nZM>X$>M;4n^)dE~)I)me)ayi24YgWyF07rD;E;>y^8++CJR!r0@4XDWd@GdL9ZxTj4%2rfcGLTcZAONo1J@SdRP>dJMyy4`PVpevDtg7N1R?gcqB=f=}Q50F#^i1|xKNyW5;VVOl(zU^a9OaY! za=?Vm6=Q-u=1R<{T-j~dU=V59sL!eHv?ES1>^#I<^!zp#mCb$bmu z^|(5mAVR6fVh3UPxrSi4#!?5NN5rE4x#EoFctL45mU>J+ zOXBfp&<2~+Vejbk0%vmY7hkj18DqgtKR+-oVK>y|IC4NnRyN3ESeA;GmW+=N-QeLU zvgndaY>~vE`W1YEoJ74IJJ6(0BXJI%Z$w=HSE8Jc1La}zP;mI!$52B`Eg)1=p z@R8(Tl3Lj*{NN5tTwJO)8@m7fx49RapX%f@kNw&Yk@s!1D`bAZ*^XA2%wDh_h_otw z#M2GIL?S_aKOv|3e^B&-SIGbV2ptP$ovGK7@AqP3$crsR z9&9_;$=6tnrd19^x-qHXTU+$plk0FiA{CXL=Q%(u+J$A^ndQ} z?>oFGV+9MQr&Z3sk?#Kqv_}Tj$NjFzP8oA6c?z}B!p?1PCvbv&*35Fo5gcVTaWiN7 zJ_KtbcEmD%trIkFB)^?qkHtc}XqeE))SoGcMi^F6tyM>G>%r1b z@j=oj7VPQpllE-1Lt1pN*j{LbM&)vdcw^q|?P=QR?JSz8e!S>TMMSaAqdMp1tDfyK$mNzBu;xiMnr ze7aPvI8xBY5vpBrmuKlG>Y`jlJ+QCWHjc385|+Sdifg;YoBPS2v6RZ zhJeMPYq_yc8Z41C8B*{&jjNkfW zo80i5(BG2zQ3y#OU&6%3H1V~i{XFj232=A?_PFrue1 zAmN5^&T)iq@urdrGpXkvYsPliW+jS*b8|&NXK!|`2?3fw5u6z;FW-ahlb;HDc zD>pe`ZRnk@+U#O4%Y*0#6YJ!AG^Jk}Ac6^Eu$#$;Tl`Ve7L{g%rB4jczIS1qE!_^@ zo`e^p1oSC!=WJX}`v}D>Y8B7qDvy;WT?71tfLrZm4^hl#L*cM&&&(|eQv8y?m7>3Q zdV5umzOQ@}ErcjtwyNIb#bp%7G1dS`zy{iZw}ov9y3NG7*BRA*A2?^OYq3Fz;+f5< zD67mDcw9DlP*j1MyB+wbJo(i_&U84gHgR7ZIwMhH4Ei>bFS}b537Z?N(28-&x^x)X z#6|O#3iSl}$`>h5Ts-c1mxI@&-YO6`7WeHPY8V(8 zOE(rVF)^AHOdhd$TBS@n|NY+@{bFKQVyrY8%>QuF7NsxqqS-kvBL?AP&^KsNFh}_a zXcKvQ=@5jAxb!X2xidN)gJTSQ^=s%QUY$(4LfXp~H@(9$A|KTM=6vkb5U_HCi9WpZv9kRdp!F?p zAU7)EBXZR=j4wu^!-X|a!TVuX&l+me7ajhd$M@f#u9f{G0)#(;pj2Xc zA<&BS_`#$@v3fe}^UjzAy#COEQiN!qTwqztml+?+%oEvYIuMH@>#4ZjWt3M=JfrB; z2Jea4A1_q~KU%h`t`BsW*`{v#94Jvg2`P|lAUbr-LS1CEZfmOtc-o!<`d4Q+N_oW~ zE|g96#ybgTspTxnK}_!au`OUjKWkNtQIeI99paM9;b+XPNJYfoDoDtB`#|I>UV<5!i;uyTO5EPEw3XC@#F4a!*Hd3 zTyr@RI!PUB3dg@1w>D1kUgc7oWE&)-iW^YOF*s;?)gCX8lf~$HU&U7B0J*$0xY}>h zlc=6Jq60^`x@28PbLkG-*0&rVmF{YLp@?}+yXoIj19sXE$qohxarbgRx34)ZjG%vw z!n!M0mrdIOjt~#527!$D_$vnyfQIQz%DasO+Wb)>;N>Yx^lD`*B7`UOeATXBW`0nl z;uLM32EWXV*=FcwiesjA#;)b^!{MUM5#Fw=rrg)I-9`n^d|PCLU!9C95gJ`nz((^l z027Dzj%O&-CD*3LFre>k{QRsVx$OF^VXR zmwRTo_X|}S_yY@)@)zqbPFHty6`3*|$WTcsAe`hiV~9Q#f?mVio9?dP|8e-# z$B&KMDrMJyX-UguBZxn>$&ttV{vy-~OWL?6uO&SC)0clOu9-r9L?Hj{R4y|LfzCy- z)olRWI04tr?$WZpt^}DXLlkeKst?wj1TUMVVQG6)B5zeT5z7mUr>OfZg zEYm|)o)Dgg9(X&9t_psy6>w7dNe>Nf)CvqHmhbAejC!2u)U$E5TqQ`u;JvWbceN%P zL^%y<+ORJCAz_1j0VWYBaj{TTC8PcZi2|#hJoTgr`72q5V*{SbpAB?2hlA50Xib*S zv;Z}sQ{S6+Ogisd*)9LnnQi%C&Zt0g9q8VXZQv@}q`aE1RhK**ss7k|S58>z<)G_X z77%LrJ)Mnj8}oZtI}0$kbbW|sc%SAJ&^PxvdKV+IibwwTzF?KWRw z!nj4^juwbFCZ`ELx{>GvD?@L1j#6##Ie(I6Cgnz55Z&;I7;TU~rMACu16t8fd{+%k zg;X}{CN=&pW1KckEfajE1BH>M1499mSx*fU?O2HqjVU06k8cE%X!!d!?&eE(c&R$G zfC8f2u+ZSt@fC;Cbvb8;2@R(o>$ykN%{<|{bUUSy9VbfN;bd>nfXnqn$X7g}deXnP z%>PaK7i1}mowQKFgu!iXZTlT9cCoH7{B&UVMAv=o^0CsD0_lFH!?Wl@@&AhN+2N%D z%Y}Eo1tNt^Z5So3o7?2nXf_&HAUkta>h|B{B0_9~NV#HMI&j80ea!05o5)>Z&_eae zV{=|%Xn$Fd_H3}C{kz#rn(Ys8?+9apH>A5_ESsf!Snv1%U&W8#<;j4=d4oP+b!k2Z zxObNqLPV*5(q+2CK+*=z)W?u}{qw>uW0pOh}_WDhq>YOL? z+PL|@x@P0L&ykE8X2hgFYB_O^N(R3VZ>;>HgGB}2XepgzhMg^qO({i8H~?$g@$4>7 zwB_7>qFK1ZGg?xgv-Ab5pWV9AM!d2$rYvZAiBBBi{vs#8?R}VqL!ffJSVuW}FIdBg z>5MiL?^dV%S7oA@7Zlx*-2_$ZhV!MavC*G{i;F8C7>8uc!_Y57zUd1?TO=tZCn+|X zEOdM3)ndFYX_$YDwd*S^W0vU?D$sBk96{1S_x46(F&oVL#0}^F#f$pJ<@T#yY4n@i zz1jV`UT0wS?WEM^x=ziw1J7Rz0kYy|gz~8n!>|6xsQdlKgY6?r#)3FH=Fx*nHn8GS z$fD5|+~RO({TCjqMjAHUIG?+PmujhFOPu}`8e#ZeT|S&Um3Sd})>|P0@AsNcL(hBi zNk;|BgY8D%dK-yvd{>;h;4e~s=e=laXM&xgZg>i z0x8vaCCcy(O#%_$0}ub_vCaCmBO+%qy29at!1t0`Aj^Hj3Vb0m59hrlMgusJ<=i z(D3j05E4?hhM1SoB>tx8*P-69mM#24_Q$bgYGd3d?*t|a`i0`E&Ado&zDPgqbqxlK zYFM?MiNfK*T;6xR4qBjN5$-zMPo=E8SL=SI#?Qw0N?+%5P8lTHw@+O4cI%&#q+I_+ zE)Svl8^~{u^1s;CQ|mw`9!%&Moo6a1>@C8d&XqTMgnKXaCP8B~x4~1OJ*Y3%Pgjy} zwlOOaMt*c$F(S?T4rVJ8kk)!ac4Tuc;VGpUo62sNCpi_I?a=o1^>w)f_gqr4_j{bL z6m~3%N}V%mC9lp?z`Xv&38u;v46V~Z+gf^7M2J|9%S?45zAjLtnu==PHe1@QIUByxfJ+g->159G7y)9?djGA zktHG(-ZhlO@0vzcr9dLS8mfdX)x6z7_l?Z}KBjpF#%((l@>z0YgGIkE}f) zRxMUzR3sMY5ugwRu@VSq6UZF0zPNitbb8XWwM-Y(ywkBi-Yq$@(TNK49s=uScnx5d z@8E4e{Q)Ls3NU0$lFrNHyi<>7$kLR(7oagZRauT8BS?OslOf<4r2_#RM-bdf^E zJz`z1uCK#Tvj^v)e#}p)`JUUM=rB2xVwbt!Emv;T+856Jgg)euUhg-nw(oJWu8iW? z@fK$YZJ8c&Vf ze7`uv6Z97X27@=g$Bg>Nh1ceMyrwYWQ9&dK`Dx|F$|dJcg~rP{Evgg048)aV!kYm@ zZlqKI@7Ln_P+RVMrZOp0(;MEz+-8M#LocDC_D&z#%9gQ=;@8%}Prk0-AUKvjcip2s;&cys}sp=)<8qjtSz%;aTLUrLUvNW4Jx@TNt+mCE%N<3vIYn&WP_>US0h}+nb{|1R+e24W(2WKFpzNC5& zxH2O8SZ1VZ{MzxfWxI*2{L|iwx&KNM81Z5)CdTgU>|6Iq=s4FXUHra-dB%T9FDu&X3*wSaDa0_~i5KyNP_?Z{Fy}-({98o1JP2oDXXj{s zqV6_M5a*}vjDDY& z7yyJ81%*|!w6}&NmW9VQ(l$P{Q8SR2jh3$M-dfa zeK~G7f?mNh6NQ#~Z@uh*!#UNOTQ)H6xVo{S|LEF;?F(cgKhjx^$>w(=5iHnC2-Y*< zvv3rhMU&TGPEUJLao5YZIlc2^()iD`^)|;<=Y%9tR<|C8x7&EgL`GrTYD8={C_Q1M z<`p-Ck#-5GU4tl!+P>kWAA9)io6l;tC(tM?#3@f(wfm) z(XyO8`F+xqSI$vWSKb*UN5ZzrFSd*uU|R(3hG%5I7nA|g_g5XwsrrG0%Vlo8Df^z9 zr&E#a)AAMB-u*kx%`%zPAkj;HPpT3D`y<9?q27YPH&HG8_l{1>Fl7;4urui8}h*~j*x2to;|0CsL6t>jjz^+D>`D&H*B?W`p?Dc>3dNn-p1-B)Jxr+=vg z1FYXmHeS)AP%J?7)t8Z%Z#(n@SpopK0x|&m2G&8tLlA0CdTtuBwxMQVh|kF>ey`-O zghX>wa&m%cfQ^XCOty&&Iw><;@BIXSt}#VUgUQEvX(BjASAIcO``k4azZ zp@!}yRGfokfNlq`ut&V_=T~$n3t&Sg)Jje{Cg!SMCb?|Ck(yNL4?!wdTGfcCOwGN21(4_djTe<)l zND;9>&6ow9nb8YqXHSwYN&)FXqGbj1)~dUHlEv=Llay6#^T0*}6}G`x;uv~08l%>G zE`=PULWn`nd+P}PsIwaXQ-UX0aPRCCG#K@A9%A^F+J)Wq$c}OZIrD0;nP4xQ#R$t?b!x=&sivzEaQQhv2)OnqQR^@NVFdsU)%uPvc!lvY zu#bDy4ccL#J{;p2IMO>jF8Qo3LYMC?ChyuFODw`6J-ZsaW00I|rmw!PXa8^=xa`7y zGA>wKX}-k3b;aogPi}Qg<|uwWr`igZUsz|*JD7nXMT9(D2NLV9%&yLv!(XK6e1CX349oX91kTZk;z$1zNG1*91aY-ka;m(-;58KJxd%XingOcDPY<#&^pH0ie~nsOcd zDIeLU#Bkc4RKSFirq;3BV+)fmDypXy9=eHt--@a@yCSL%PCVL`Xy%qZZ&$V2B;s#Yu=RiMc*nFss&OSNYAyK1`l)U zr3bX~W8mfwi!-}=<*T@)_X717d*Dxnw1N8ye_?^Gj##^yRyUn!{5izjSm7B}NNgzy z%{piHCmUw$C~#uE!>V>UVGHI902zs{D|x*}%g$?>T>_8PBNbglK#J!p2<0R?7m`Xm zD){^RQ;v=P8qk+^-Rg!spT`68N`6`X==qGH`ztxwitzDwiUzvTpV~5Qoji>^I)Fk# z$HHL#o)|k9{6q#|Rkd)q{;>jiej!c+?Cn}8qot@UV%f~c=em7&B+5);S z*0_Jz2#??Wb7vYCYEqG6_viAFRC7T@&chX>Tqwfwg^F&}p>s!}YIs7Pir&0J7j~ac z=D!vSJ*Hz$czn&IaHuEwqEXD|lLqjs)Y6Xqx1U#BNmSd`>><_BgQmRW z23P~YytbP@l2NHd*AczsQ*2K#@VnJfoVMny;+JB{)%B}EX(!t2@KZhQZvLqq0x&Mb zLD*p9tN!13T>coKQ$f@T?SPP&RkTg>3Tc!&^iBI2fyzZC*gWO5nag|fY({nllC%h2 zzs8T8c>WWe{0_(~GgznxLEpgd%sSioljn}i|N6_cKiR^Zoy4XX*r9%8t=r_`pLlw! z7*rHd-ArqI5=9md(jaBZxlU;G7}jxU62-HTn)8VJ`zBt_o5o#=6e!f!<;-iamyU%t>WO%BYTMe+H0Vei}=kO_IAvRKeE{7B3f zl}~#SgLR*~{3ZTY={+$uA&~|J+MoYMH%=dNyXF=C9fERV6!Wl%aXR%{**Nx5Z}|N z(orrRrxO*80%26?LXx4K!%wfML&NLQpPDWH{6IzE1?VdIE`J)6zvzk}k47N9H9GSCYQ5G{x zr`Y#hn~yziZ$F-o>TgbAXm-3IpvV%$dhdSCsZx%kxuv_88lYrP8{1)mTL5qutNTDX zK7BWl{E4ofdH$a$nR@ab&V-EzGZMGDnd85&z?;jAKgX#xeA8e6`@nbu8; zr(PTD{t++g@!B5zT^nZLsg;ixIf+R>D>q#^$D16s7?VH$F-hMLvg!_V7GfqYM}QnK z+vT)E0r<8MVnKJy04!Gogl(ty2`&amOe!f}y!kB)7+Ue0mTb?G)>iS|%r$u#X3enM zc}AxiYvxMRED1B%CQ?&jgsFF&SM?Gbi$g{TRqe>$JSg>VzbHNXv?W)xC^tgCqQZ)P zzT)F|qEJ0ECtDu$rf|1M?Jw!|sAShMYQn znwZy@QFuyKmNJX2*M(p-lQ8HM%R_N$m_khU6fPkFVyY8z;KAeJntNYSnMh9&sl7NA zic|(T(EQg=IwWx#uD|x9B)tK}>cPhv0sz^g)he`5RKie6QWLgiZ=s?Ug`jm^ zn{kaFCL^O?G&_v27i?X-M;pd!Oy`Z6w0KBeaK;Cs`5D>G9^9X#bO&u50%BWi+CM)T zo_r%Sueuwkop{G%^QOu6tDy(I-T`g@7GzYLs>@IpJ>-BKn&kx=G+hA8axbufD;>kkX|tdDh(a@C~1hN!V-y1tYh zq(TuS=YzThFYCphI!WlNgx!h5=_aE{{!~<(iPY4MtR$V(;XL&@1lYEZVhjJ#Wmf#& znv0QVQ2j%yv<6a@cJJ^ISA%*xT!6x!2alAr3KGGu413dMSx>eYNMnSdyuk-RzeBP@ z(y;;H(a{?Q-Db?V`aEtvjSi?o#)WOuc83WI7~&IkVU;bn$jC^i`xCQ!D||T{B!#?( zi!UJ+*pmzpi5y;^F#i_s{OZ7-)LJ1o*-?0!s+MrFX9@BP`ubfrltb#wgYL(VQ@I0* zaNacAjdP(eqUKI1m~=Zyu+DkPeWN$b8p0sVAC}5Xz*6PvOum`2Jg(>{o?dp7U~h_3TnRXg3$(nhVMfI_Cdvg(h+2} z+Tu>-@htAy7iCycxVWs~1>(;BtC`t(&b5s)jo8ZE=duU{p*y$&|1@=mL~t_CZFPx& z(cV-7`wh+ROM*%M(U%4&Hmopraj^UO^z&O|Dn~6R(V0l;a*kxyX;*nzBfEcZd0?{Lp zW&;#5d_m;=p}783#Qe{mcwr;6Gz^BuafpqlPSdooId^zbvJZkrT`OHUzE37CP^2aR zQcyN(@(KJ==Yiw+ok$BeATVv%I`NICTx-mphou<}+G)AD4MW3tn5`R~N}Nndm#le} z?!vxD4+_RZ>a^|SKu>jcb{EynUw5N@QG0%V{cx_M>4fxy-DAx^qvfErh~}l%yGW_S z`XKS-Fl|urG!2JYJN2D%FbzaGn9)XJW3u8-Y^!hoQEK%d=Yc^nQgkc5t56(AJ7y8& z#r}YFJM5A*(GfS0y7ILtoh0XuLFIjD7%?h(E`b?z)&lZOqYJFZ3T1qY>SqdI8fB^y zBG;g{W+dTVEfzULsUdtEbu*u)Z6Y2)(wZ5sxACvATBaxW+4C2cI-)GJetK-iH8 zTlz+khgf{~YCW9oJ;AkC*1w|U?0oZ`{78iH2WD@PV#fGfsajkl#vfyt86fBobqd;8 zVgUY>3}+50ZK);gd>_)au=3QQPr1i6+PM8#;${)5I{x zahTdf;9HnNdN>x0T=G%+1QJeaKabtS$pi6tSt?!~7t0`(`w7`a7R9QYV;a$D=!!J#U$L*HVM<8a!hA6ALf?Kc5ZY%v zJGiY^;-ScUXwJ{fG#o*8iY*L{h{p=vOv}4yx$QDu7W=%x;+7_9y0JrR=>mnbLGkZ$ zr+1-NwPCDQ^Ao&sbBM=RQz{yo%H)$G&R$kv9T2_l>}rNKnqZT;vml)7b&$D>3s8zK zBOY@L`u_u;7m&Ia#FUEW8!N8Io1gG>T=4UYbX`?y#Ew{N>eQ zqWw#R`Nb>ZLAO|MIqFzvY>0Uc3Rsu{w8yC!txUtaR&yHuNG;4gTfpfNp1C<}Pn!B{ zGL)+4^N{+rFU$wbf09EV3W3jII*eIrFCHG$AC{AE{;-G{ej9KJUV&8F5@b%s>35AXMOLS)g6hB%;-qZ7QDwc@8O0z z$ey3Yv-a@6AN01jwzgDET}io53NUtY;1VzM2txcF{}FK-p9yhVzxs08j@xol8Kp15 z%=%c?dY$h2>zB+Qb_`|MTzJm6KOgg9J#OR8?&sGOou*(ZfG>i-kO>+2dkl(<$A8@w zGQx7r%&{xN=Q9p!IhH|wm3<=YwR~k^IxnH_aCBZ>JeB8-Oim9Wru@3m# zr+3`NwtS56xg7Q}Pq;M++p)A=*t^^kKW2nPv`l@l^I0`|UC%ei6{dUEOy?K&om)R4 zSGr2oZWkIqntxlt9o;4+`A{|^*e?@bx-l=hY*Q3TISCG@!xyVwA=ijbl*-5rTO^^b zP#3T4-Wy3e{Q2xulbZ*v=2YYJXg}NJuu1exEV^hx3=?6%w6xU}JuYD^y|CJJNal5T zBM4SV+I)JG8D2nU&{{h10>7 z@RcEEia(K3-@zC-IxlkRRbqQMd>~?-wjh^kna9d&AroL?ZE+EjzyACjwqJ4Wd)lNg ztK05J+P4aa7_8bfAgIvWTj3LMn=z~I3WJCSM?DirT^}4-i*8@o5~$<}?ALrh$i-`e zhdoBL+%Ls*jCK{vJwh|cN8}Yc%1ODiL=-vfHkHw55)4zTf|o}fIuF0N4CZ{;c|VYx z{nS`qg_2SVYO-=bD z?D^JUiv7?)eMr}99;N8;@$Gi}!*h37msF0bK|_B1*!>J7S^KZ;A7?U%ha=ulaBO`+ z$STkJJ?%<}n(E|!T1EI{{E5IB_Bn6jm#0reOiTrb$Hm&Sk-x4j8G56`rv3N7nnsPb z%g$U)CeJtf=4;JP+YQc83F7{6x!6Q6Hc==m3{nar{knkTW zyr^2EBT%@xh#ge&VoDLN z!;G(q8nFId6Me1nL_U2z(J1D5F@D;EOj;yH#X%^v#L^(;dIVjo{>_AcY+@EV^U;%T z`u7N}pZUj;kyZ%k*%HC^D`yZ(w#$!U(oAqywa+XTj6coH*?Q+h?{+klE?vG82p`$R3@mf#SlNFNNT>7%Ej4|E0-@p4_1fHtC*)@~qo6Uq0aFO) zg0f|qx$1~*L3HI$e_X_A6NNSg!o+2H-F|!}MRyM2BjyWt79=OWtfeVX>$UP@5Ce6Y__5eV$*i8nb*)Kc6m0IndHO~hb4((ndWY+*E?lu{+9Sz|(nKRlo z?N>cvat6HEAJe5=7?=t;bUWKe6yg>Ay=|04NMgaMV!BJ<>bTNVN6_2L{jIsB#!Qcw zsfhaw+0Z6qkZrR%|IR-g(s*UTy}?U-;q2UVVl~LTXREr75`&NI! z*Ca&7M<0nzxQI~9`oC%c9-+diA$~ctBY#}Hx3=fvbyrW#4&9yJcyo#~ zj@#!SGOM__uMv!tJ`a@_Pv1F(z}cQr8*Ro0zfWhVsw@c$k|~SNUEiN)#>{=A(;N=8 zP3H$2RX=ySP*fGs&M-{OUTLnqPsaOG7z|&-pPEU73{ranPus>9vkR=kk|1cH9Jou6)Zc)oDk!|qlGr&V1K{ivrW z{51+6EU4}mYb}SXK#HhR*&2y8E-S)LABp}v4r#0>NnoO5cFJ5-BzkuKTnbIWE^Oei z%g5FD&o#9vH$t9{_fR9w#R?iG22rlht4o)+H4bh`CQc6EzKT20qNA<=KDxB0wd*g= z33yk1Gume0HR0@A-_*q7 zCJNVESR8j>Vo}Dnvl4P4VSQX}?e^|L+UDDP+@q}Ub>2)1$hF8ik-}@lQo*4Rn{+Tl zX;}AVX;3uioXJDyt+`aSF!CXkf&FW4*=;X+s8JL4#3NlpBgIaBMf_c#QLJuRwXBfw z&h3=QJ?>pgjV2yC@*F6U^4s^mj`;slu`Xhhm;L1A7846C%E5q9vX;LqJ zG-owD3eWXcH*+AkX1gIO3s)@LLIxg2_7WuS3)pCIP;0G= zShGWkJaICvlSe-iCdSvQ`?k$?cK>~UR(2s7$S z;LOuFkHO9h&wejf6_WqA3xDpARuJ~+e@Z02W?&_xN@g>v#OJqXTh%iGdJHj zS{;zrH{GqRXbNEqDsz#iLwJ8%n;AiIPu ze0%3Vt2Tw8!~kO0ugi`8^9Ttid${qVx*RuTn)-tHqq;pkUjK0uSJ&BV^E!$~L0^Xh z@pw1+k|zLsxEwd!>4HVF(j%JK5~^cmNo_3KSCM%IEK$d+-F$sYCHd4^u6SS4OJJ?V zwmfbZugG$jK9T(jO+gXPB9N2N{L#9|NZm86`ErD0AHFW09^SyKUoxXrHud0b300=V zB_(LI0p+84po-RmaU;US&D}6Q0N-yg0KE}61p<%%HR#&VDe9$S-C7@JHt0vgrf4il z6Y{F1<+#ebA~e!KejM}1FSP+67#m(Sin4}%p(v$O!jD8S+%mpPh(o^{P4c3})(zv` zPDUSs95;`u+vgbd(QmBJjJ!_Q!E@!xu{t%Z!e+8F9b_Ro1D%iei?t$Ivl5q1KCX#3b#Ig;=eJB(x@V?l z6<@PA!ygE8~i0os$ZD*3iRka!M=v zo;NHeVjbX;-i^XXph=4(!Rh>f@e;eD5xWTv-QQncJ6a9Vk_Em+l+U=&%i;Wl0l)kl zSyy}eE_A!=WZy}*zw7#(hf}P{b!23+9#$@{>3RIOWe|$jFFr>!)#00~>@dylcT`Es zW0MPUWlAL>MVv3RfX+zHRgsG6QP}$J7Y2*#pnzk^P-kV_Hr4qOuHNRBulnOTa9BDSpNuutj`yiE} zH3L_eZCJ5aCuRa&A29S|bat25cWk237GEyD(po&;q(>0IFb_{&GXUR__i)6EPM$TNN%GZ4=0MekG(3(?q!L~9 zvtmJ$zckPkvM#l+tcpbIbwDSL|0)PGw25?~!gl1M4vXMcqK}RM(nlBYpF;|2ifBh# zMN+-peK+w|)NBx;l(Ah3m3gi*#8Lj`Vj-s&&JT$@g%RX;hUv-t8qS`!WMM7`=K1yt13W=5%`8h9maS3WdP;33k0 zJE=buvcl}_z|x_rz*73+%txug{wetr-b2sk$uS*kG#Rm zlAvM4onM-cZGJ~bymI2)MEUA$z_sQ+P-<+8mCPqI>j>4kfYc2ku<;PEx%H$|e#3{N zk#_2r5eAm-Ks%He_&To7ukIsQ&4_iBmLk+h)Ofz{c>S3i>C1n2)6}m-3Kp4*1Yd!9 zzgQN4f5LO7ZTepBGMf@#Sae-&={F^fbDt$o((0JL+`g|hxC2}9FiJ<5Vym$!K5)>J zNFiW{Hmd}(tHVfrd{sm96LIZ*r~*@0zHN;K&g!@yy}V6$Y;3;Y&3-)nP>*R{eXjRu zv~!mA{5ff=qvg|amLiZtI}qUhrJ}=yge1H1Zsy#);WnIzyELkxs*;$_ZEx!FDol6T z$m>0x@uWq4y2_xd%;jKQ3;$pUn*<@Ys`F(ugE@=bS>*l6gwy>@(?Ld8C3}a0HJnWj z_qyhLS>}eDjxU*1^MwFpDHbU;5?Jf!vOao%c&jiI>$am%-Dw1erI6)H3Sml(*pAT@Sw*i@VXst|JlQ%2f-AY|o4P#}n>w|F4mgW1%F> zAwLskyXaf)qR@unSjjNu&$G`*89;m%`swY%UI{nih49x^9=dMsv!qfR?{6E+X!cx; zU&4u|j3r0k*Psu%Q@m>=Du4Ys`g`!8GX75PPA*@#z(b>$es>6jt-ODJ_+%Psc17>o zVv9-s36TaWlfx_$*LgsQ2>G`>M@ts1Dn>$jy0;?`@*pDf8_W9V6B#lmaFE@$@?C%B z_=9?%Ryf7ng&V>qePYn@Uwu!4BwlpFbvfPfpd<_mJd(f9h?VGe%d@+AK(wg%&=doiU?#z7GuQqekwp;0IbnZLQ&oCdcc zuV>u@mT8U7eR3W%2v(o_#8~S+cl!t(x|;5_EV6D>KgW?UMyDW1&akosjbA+9bcMKv z518orPU|RF3A1YHH&Qt)lsU~@I*>dc&y(6`dtN5in@ynlBw>+ABc6ugia3j&Kqls$ zOZIWp+o2~G+eswF{?1(L$SVx8nk{;xAtxud+8a)|j)(vzQR7IvME!NR9X8sD0mUB>)tL*b|xtXI>k`#aJTGJ=~f)=GIi{-Cp&H^8zYSz~i4F4GAn9lNT zvY~MR-U#GQ0wKAS@b4d_o0Ui#y62jSP#8Bk(85fQw?`Y(`OxTk`Suo;*!12Rnql|vcDlcIe?-SIFCu~)N z&+U}(3KDL(ETLcZLCdH<>0o`CuwH%6?@?}_-g(ox^eXsPA%K#@fA7&{QVFY15HEs_ zx59YNi;dmbJgv-)O^8>ZY9M}=lWo^)J$J9P^qU#<%kca6>z=Wsl#)m^DXSnEj9O6# z^1P^NXx4}4znlSHK26E@tIRQ7b|*apaTgpSAQPb}83-#88U@LPOmg0s-?il_(T(}N zb0o0vm~v|(_r<{&C5!pvtAlQfdXG^D6B!>J5@D#^8{VfC<(s~@6W~pM@Oes`$K|_w z9Eot}`$>6KD4;=H{>C3`pBm5)1hp@bB~G%l|r#{&<-jHvU>Mo?k5Ih7pkzdViUj&xQOfx*Q(y={nA-Et8(w zR@>cpH|^(SZFqiKA-o80Y4)xd`tUsvAt_NU{6wYfQ$Xh9i-w8!T4^l)5lUywz+~$b zNY18iS~5-cIck@j&lB>RBkvJu2L*EI-kz4o8qLBCm$bck{#L96{d)Wk=O!;ycl+(n zYkPDl+Q}f&7s35sWlcivs{uI~E00AzJ_jQ8Bd>RBHMEl7MT`WxbSafa2|qi-%FZlb zV%VUoP}A)vgqJP;dXQx?nSB6E^c5RE)AObUVr?hknLw87*G)f9m(j_p! z(5ZAIAxKMyba#g|1JX$MxAlJBk6!~E9PE9qI@h`4y14_gPRcoebxh2W3LSZ^tZc~R zcXyQqxS|?+pq6-x7)q&jKUwbvI+5mL8$3@f>1w_I{{7|te6@Dh!0WZcVmT(Ct?uO( z?@7_y{p#}kRxO_~l6IZ|Z&c@!PS#1*5kANDyfcaWn=Ff6)V1qUjNgW2ucCIS#g$iw zS6jbse5z2$ba+nQewyh`x|Wk?05~DU=~dSCA*nC`rSb9Udf3Pf*mXR*y8Z_OoC(5JG(W1XJg?cz++(# zLPGyMlE+#w)!a*-->!EN`75Gkk(<5#kBlPq5`G>ZO&!xDp ze@3KcO2T){eiaC`pg~CROWR`Xj5}6kP3EOye5Qk-|d23TXyz3+9ed|zH2 zHXWg1lk!^M^~KQ<_4f9bD*&Y+ZU9>ZO%|$(RXDD7@G?*tR+@J|XqV{R*8|@2T-g2a zPQ7a&lXIn9ZLZC~Eza3BwrVjG2bTWWklo2De4_3)<{kNJyHyi{yNRmKHS%K;n@}2b z$=$PJX!7ND+rcUCUv7hsj=WLmN>@lLFF%KfBK|D0h)3kX2}&T1=UzM`AUq@&ZnIhrgQ60*CXd? zgL3el+9x|l2hnq*3^J2&IcWO6gy^iEj|q{pxGa^omI^tHWD)T}gJT)J2JbP_!0Na3 zQQ({hEx20mRGsdTKXfC>z2*E(2KM`&W$0*{(mR6AD>S^jaJ%#cCGNS{x5oa`boUGTNViMXJRK4rJ0Z@DyU`LBzfWf(h@?2^^rMLBpykC^M z#z&G&{H|?;{0XQMF#;7^Z1u1MRl7s!3N0{iQ$hs$hA}%_bMt=swT{2m{y1sux-LI6 z$hM>yvkkblRW-FUDxu$D$4i8n*~Fr5tw}BceZ*ifw(pO9%uU|dlx;b;ME5BHR}@Ccr!I*hn&e%-S>uX&j=YQ5?_UhMgLe>~?`{qUR4IPPmZtgRy%UN9=m zdm}!OO`}_5vcPB`=O&k8BV2UtdT((JOqsAt7^t8SD*;T!_Q$@ z?>IT|nN`36pqV)GY$-%MIC=Q^&SURmnZpUO2GsWnt1l8OILCVl);qNWHrOR%o znYA4numAXqa+htp-d_&+S?3XD23zIRK7$Bx2w5$ZoA`{$+CgzI28O`#`k%T=sxZQf&P%|>qxC^7l_fxT2yH@F3po|RWB_zvB)r>{wO65o> zvW<&?CD|mu=(;;>MKAQ=Tu^VAXGAb>+NRDsTC1R0fT>rj)_PL_fVp)oHOGMkJsHgxsX=#&HBO%XgAMPdv zRkxZl@r=W7`9hv`TJd(dA*9A;fqyp6r3Xw82p6G7wJiP{4Lv$EIgDj{8E- zPV*$2Rz{^e+`fiy(XQP*&7{b*bX2t2S58`b>T1}*PxG|g|Ni~3%ZO0n>mRn$yP&d0 zgX0M$4k#HB(d?VE0pTp)i}}K}gDItfi*x~t!b1<89q?du{ui;c`GQMWIQS4Vb8V^Q zq9tH%%u4jKD&)=lsJFYy-xCkV@MStR-9j1+N=D~|Ay+-g2^FVBqc()28)y|(tR`3h z@gF8*ye=6W93o>gL1hN5y_7V$;rCqKa)`jB7iVFoew`@iT|@l_%nl-cmzsoSf!GS_ zTa|&0t#%`ygeZ@lqK4%~dpMzD#0=a?PMp@6jGg^4OH8TK#F;{O{dZtl7X?zv#qI>O ziWBu84CTt0XOs7ae-u)T@lUb-X=}TCNHj3ZvTv{lq_4GLJ4&fu*{_SpcEeufQPPx6ak#3q zOuE%G7*drH%tr6^xo*93X$krxZ7sY@(6E+>SF)^8*F!~_$+uGwm!d>9$a4Dbd|EZt z<o72a&IGhSmOR@DHq(XmCOH`=VJ$Ud!8s2T!yeXn<3U zV|kHvzfy%7I*T5dl||2*Xx9e#cI?C5KgZK-QnSgR7ufYovYSIks|a7ZvBRRP ze1WFU2UfP9Ki23oTv|5|!gr4aD-XL}2E9Hmzb?@cqBT74yEjt49uUk|UsZm0 zHWZ<#y`oMBk5bxGA*mP?3{Nn8_RtWR()Gk8c;w4JFu!osn&dB^)h_@3CRPtnDmERv zoLqAmRLt|d11Vu-tr}XrK-jYa^I&f=j>`BfHReb?^_=)5y*1&*DwB}_m%{WZoO4?- zMsgPHyUP&Km3{9ZRo{!nS@q$+bZQRqSSV)~ER=oo>BJM7Rn*alR3f$x2`Q^7mjKi) zqq!XQn|Pgo9FF(OsAydQNp<0v@Q`rK1E{tWl9@X01`%;AHAo!*^BNYIn78zK9HjI% zwl~hX(Noc(NwG$HWVqkuVt zU$(C%WtxWu)l^*V=ReY8d^IZNg}z4jmMe5#!{?19*D^}6rtNm)x#skJ)qys0fnK`S zN(-4#az$Le(1(=m$GOz~m&qv7VY2~rZ?9ii4k_tp!R2-h=_$V@j0_Zl>(l$qRGn}=e0?{>z$RG+>el{3&Fq>{ML*$WcF`Cx&%#dgJzpug7GC94qm0_ zM}5;q#>Mk)zxx(@3cq{Ysm%=ZR)-%D=-lYG&moV!mTa_My2%8LbtHQECz zP&JM>Ccq6*3uX&F_x6hqM&;$pco*k0sx226D;M_#1(&(YX|}a`{o5fCF?gP7HR|RGli3>JI+(aF1vc z156PxMzDyUr@AC1HAeH5XU^#aqT4P(`T#56D)#7%ke1T}V=)ucc>OvIvrjU%z9Ja4 zXVB1F=W{(%PJ7~};{!iQM8s|O!@UtNua3({GDlOHYKj!rR0~3jvr?&& z%sJLu+O7dYDj&HsN5f`+_zP*ggA6y7#jm9`61%xoKd2sm3=i(#GWFF!=MFmfTXeZv z{Ozlc9Q+M5s!=0MYW`}HIVPb&&73h|8BLE1hgf@VkNcNu=UYm1I|5Y1hixp#&Q` ziF9;=pu5d^1gJO)F(0 z!U+s2@VlCF3q}QM-%$I1C6oSatQH|m}9 zP8=gpg)~ulPP&tUHaV-t^d^3EkX(`I;b!K2-mHp3Uc3}NO!2{5poV54kj`N^v@O1KRotg4Jr4^6~lgR)@i3{_e0~` zv9KDX|{pYt=d;hJ?Uqw>a4aam-k!KPwIwhww!mE2^5kWp7l{yYe@H|(yi&+ zux808Y=N){C|`B4FVfoX$Fh!uo^JRs2gR$-QbwTrlMM{+Z%fD8G@YhBlH^;86>{E^ z6i9aS8}&5WjdGnYg$H*k#Ch{*&_<<@+D!CHTUtg&5hs2z+zRW=doAKHth?-+SFzXm zH!8H}Xo#B_-c-#bRousGtLJn`nl$??aJ>IDo;oVX7+t%ib+l*7n<$AOA zUt)a@FTRu0648*4&#n zMo|{(!K1LW`-$;VK7S#%u^S|1HGk)o->)2|JV;C>v?eb3E;J~QmURDM?}t>dk?~)@ zjUM_8^ETL`&Ep*PeFWwsCULb%>jP2c%BRPs&PtreAG7?q2cfD4aPb}ONI)8$PxwS4 zL?BqBl94-OMJzx`i&i;&yjlxBx26w*4C6KYp|X0AO&C0JqkeT9Sds1uDA^cCbg&$n z6Kp%iWyZOl-^eq^o`+*{JI(n058Te2u0A;#pLckaLNA$L$`;6`Msh)Hes9ozp@=NM zxekb9T&`km$J>4e-PRD&{qKR-JNzVyw=SxN0poZQwQ%I|UA-v-18ecXqrv8u;)Mx% z4)<)6?;)|hGV1qmV|a@Re9n^=Cd#!V0cg;xNRDMpL^0qJB&+vfuFpr|h=^n1y-F+^ z<9$5mP{xqc)n>bLbOg}xnNP2+psb1kCihH%$0>L9NkizE%pCL zuU}Xx=3J)KYA^nC=Hvqe5*&<+a7Z(S&mXcu zeWI9Wx8^IbMn|6!IVlGgOl_Wv_W5!%MdoCEa(_Y`u%x?brvr=QZUa|tBVW-Al2_U=Bjf|g2?MRS#4 zGqTU0wXR0>W#A$AsGiav9Z_H)V@Ma0F@yp-C>B|s!I-=zXBK z*7i8{-?5QLYxBZ?dAOaCp}Rbbp^jLz&lRTRjoP@d;5~@1%`sa%pd+i9|ET**r=&l$ zLP5%c4)5Vq+d=+=Im%Oum6UoUAL5!as{KfLpvhe!sa33oobrnlyKb6Ia@qV!ddTH?_~ zgW#w-acg3_=dX&0D}&`f0766`#*={08ACd%!E|t}j+(13&A?+*qmIU@y>=(Tf|4u*C zU=(;^Lm`z&{krc|yrM#7?6@%*`1g*2mAkebd4VtqeLY)^uJEEZDlDtb1n*u#T9yl= zw0~jRQSi&yRTT2x(_m?ZlxOkS-aMo=D?h$UG#xNwy{+ZyNRSL`j(@($LVLGev`zIw zI?-@`P5R{ZY$ue&Mc|I zG6vfY(f}MLpt(5x=WhXz%bmB(y68voONdX8H}M&>2d8AU^FF=7s;@=Z z@Ch*IpYS)-ea~(8_hXU#gG)=A`PCQ#Lo>$aLwRN%?D`qTeBA-0;=!d{kRK`}2=A*X zGp}Cvl0To)pP8qTGouIu8V19|!34`os%7_oiG4vqEjM1M*OWuT$nOHP z#f*r&g#(|05BmtrT*|B6%~&o)!9*V|EnM@gw2PT<#QiF8K<-g1i5`_$izQb8xZ$6` z{Z_+1_|By*#VM{pipSwhpaY9IB);^1 z{Lc=fO{np^zNO0Czvg}4liBQQ*Jg4+DttBdOYR*XD-{C4P9LTh=Y zgY#oSsMYiOt+B`l9I8yA)vr=KXl}1WN{$#qt+4mKtr4s0z=zjDyl;P=bylPKQ7!ux z)3JOws-j*uIk78jmzq2qeu+2jwjBdFOdPv8%R#7mW!etCwzEUR#~Fl$OvZ=J{5BWMEN{9zNpP89Vu^i0HNoojhn4P?2i?__@*=edJlV_1ud=zxdINVjlGU&!a(q zpmg>#rU^n0MO>J2#MK^&ToJOA*WT@pZxL8L`c*Go4#5ec-W3WNe0_axvKPKxn@3VS z=tCG;AByQ3UA&%*mp>077Wzc34`vTPpfB3#`X$QoV`+rU#gU1NoS5<^f`sbj^MMXf z!%cz3G`llPQUupC%7pj)V5!Je46}M0*?_lC(44cUZrkq<4l(|P^*?emOORR0bfK%m zpvhZ4Fplbo9y5}4Q$%dNbkgaqv!VNy2PX&M!=BOl)DTe z_o9B>4W75yZ4{Mf^FhG)70P~*9+Ql);Mh@|3aMO70==>v~lWsoL~ z=a32c=SUst0x;9!%b<3W`nHDhbHBfxAb{P7foK!uo&{vkNUAfoEIv7 z9gei;w>s;6EbJ`kndG77gjvR>r8yMj3l_nL6O6%;2U7QUw zq7Qje%%P(asUWBzX@&oifQtR-AE3)IUtNt1fQg{uUJqD@T0Wm+>Rv}39Gu}7hBVB< z8r2t#P6OqAEh>8)$T{1tx`91}p*gR9(@dM$9$Y^y;$ajgC-3MZCu$Iq$4~tH{YcZb zAssDugTFGZ>jQo#vLvyN6qjr}?PU<~e?zD+26N|*3Gc^wfBq$Mvhwv&--oke=Tfg4OsPdi6W&cgF0=2^x& z29$`vD$e*}^qP{JAL#=WW=-19Pn=qa*K}dV^Xr`#KJ^u>|Fj`IpmP$v42SmQ^ECDd zamA&3+o^Fq*oM#Ri7Vp$7m0879P&A1oNnIVfp~%%f1_yT)THuDSNDayIyLilLlO;U(1K zWRKX_C`pcof6<4UlcROd&n<};tyK#FHpmmNg|_g$P81rusHd&M#_>RvvalU+V(hNu zB^v*Sw$p3iIneNK6-_t2?=ELJ-YBTct63DiUhh)SvdAajeWnVc(FcM1B0}s1pKdrV z(eg1nn*xD^l}EGL2S++I97lwTMHJLzKE*2Ayx!1TJtDTCog@6_KQE_9j$U|~mPIPQ z&RX(yg!0{MkrQe8kHZzfV>DQDmsNM~K%_re$7F|?5D-T#91xFMt4nmXauXY;O+L<_ z5i*BEwX7((b}>}pBLw15NFY!y5Ps~;fzb^8fvKo`8}~j?LyG%CT*>}dBkU;*U4Nvb zEn^$_SdYlzaUt%r@dB`6Vqsk4)EO_`dIJDj6CgIP|JvnbH2q1t4>fQXxa(KzGZbS6 zwDxG+jXI^S9fB#M>K;j=-LK>Xb=%_L;&NWXI`>fg4O=dGOu8*KRXBJTgcRsOM}%?| zI+D2GCCB_$X_EAjTX&jAIBiB*%u)Z~vq75HQ8i8D4WIXiQiZEXtlbs)B3D!T?b5B>qK5tfu0-5g{_ht*qYHivsjAp|)v7!!yXf0j=P5)* z2I)>MH_|uG>`>*E@EN$sxSHSC&q+!T=b$(VHte43zeSdoAW2EVw|Vo+TM}J}0EX_? zM7$n!n}m%LKYVgF;gsEvxRBQ^Gx{&6KL-MsSmjHGN7kBQV$%tt?zFS+eg;=F$>Uc@ zAyG{&bx3UD*j-qrxos}(*TOkjJpXK*m^7No!232wL2u<8QOpWyAN?YF#|7ymL=ePG&0TUnDnBgwJThpBMES2IX+?C>|G@SdH5@nqABkO z@*^;fZS7S>f{xLgHuGDTkHbUM<8f*Bc#G^Ib?>|vU%o_fnZ+!EJrNYjDBG-QI zY@VMiuM)1;p;jl+k^R!H7Y;&jR7sWX$CcGPob2xIBVeDo^Nrv3}fiDKBw z2dAFFcvL)S$wN_^Lsi=kHZv_(!qugNt_*Jvc#qt@TWYT9ly~pq=KXk1LsJYmN@iul zFN)^q%t7F0>a#Nw8d*I^*ftz6__ODPk!oZvk{j6Gv$8){NR;6F@xeZ`LDXus;I03y@Da~lS zOU}Rgy_-q({0kMeYzFJh10r4EEh9E*^)D3D+Cs2|qjwgg6Uh=DEIx-iaRW z)asvxq;4NIJg_k@yfp{KhIStkY*-BIUBQaLsp3b}96L`VVnQhVZZtPuqa!Q$e&uxV zi`j}ymP-Dd)wKf`ni`cck0n+Syo^cSfGcCX^-fqwI^2SozSV_joG1I<(~w)Wsc5-)lnDY!j|9zIcqNEUg) z#E^pzZwB*?)o1VK>U#pekMkMpPuIu}%WP-3=Y~aXks`N@^xmJpRw|vSGGru5C$`Bg z@f_vpkZZ6yc;}K~SkXv4%7@r70`i zK&ZwdWM1f;r+RaKCGGR*-TX_hix^9r5~ZP#FOOU$CRbwBhn?Qah#L~Qy3u5wuIBl> zwb6WQzms-MvOwT^NFHxG(Wz5)>J#<0`?ABR4VIHTN+<8(m9*v=ov&OJ z85_wdRs|O>I0c*~_K~D)CEK-faG9s2hj>A+^67%#xf~iuDk$(@;^5}w#Q&cQ(G%pX ze#9b>^nvflXYdTY`=D<+;m*z*AuPZjVJzI6{7Wo($YNt?L4s{4HFGpIXizR?3hTtO ze{VZE_&Yn_Z?TcY1Aoy+03{CV+GqZzmyz-Td&w-LD{O=9B_qI8FveKrD4;p6?a6v) zI`yWn@z%)YTpA53P1k^`x%`{puAS%on_Zm!)a#vF-ih27yx*^dJ92?E)N_7$@V$3t z93K{YL5t(Tv^BCHjk7Wx8%^#-dwyRGPmgTbC^?yD?6v5C?Ivq7R01FSYK5};<47&pjt0yjU21*H4&o(d1{^~38@wn{=L!^ zD%a}DL}Pxkmfv>|dq;z-_?Gu256#3`xX>D=P>q+UmX9OVVov;aMBLF@{P5o@A2|y@ z_Q(yw!KNDBitgCLwmKx4g2y{es63M{a0AEEDdI6zn+j^`HhS=$dnWuidHJ!=3vk2F zA+#mlZPs5zE{Ur7PV5s}dFgvWdU_LuPW>9ZZC9&XSp5a=K#x=YGiM{}lW`_XgW&=r z?x%o1s;K`}FmqaMC9e)A(>*auAXed@^}&fBw#Utrp3H%rXnu?ux!4RO=&qHSUAkym z@icSa#92j>g5LzgO;Hu+?wc9m}@FlA|LgO+G}FIwbnU_Z)f?8PXCuWvdz}SbqQimmUJzp4n9a97TEh%Ft$}?M$xvq@gYK z06CM>W)YDbndQe>JZW#n_46HjmNj9k=U4rUC92_N`cCED^qiSLS@s>e86;nTSwI~4 z{5o>r_jP3FjJ9pM50}+ZLGr#|E1?JzT~|MYzqWb`P3+=CqJtK_lHyL_e1)rtHn&`Z zn4tb+k||5shv=CO9r(RQ@!~GpJGhPJ7YMR|+91BrJMcdNmP0A zaS3Zp(5L+iq*`{dj1cMdX^rj)D;(|=myo{8^vsa;dFpD1an9-*Bb90`>F#hVf2#tq zTh(fj6Xa^Qi{z}?wDFbv5n|JeQ7SvamNUjvDLbiz2A4{qbd_xKN|Ki4OonbrkGb_A zB7p|1=28fiRXE@#_EW&hyQ~oh{2I?COKZ@z6`s=}=3azQYVGz!B?Bj*Q@&j8Z>zE4 z82f}t^{w7=*pJbOI8E5t1Z7`b2bpY>I83}1LR0%hJ>IWWVo-*JnU#{dIgmvZyzfC( z9||(bPe4{b!hlsj5;m4kzJ=KLxJ3~+dg^t311Ng*p+q_wZ5vO36lEa0ktt2|o%?I@ zB{}ht%e`ZBq%6hPlW$zyn#8?$q5BVF18DF<@{ga`` z6ni`|ZW|>$mwg9`$IESnN-zar+a#vajK(uCCNO_aSV}`{cAj~!EU#yY^S1X?%yk^4 zmIws^JvJ4sZD@AuF{HYpqUuOfyL^t1jz49n2NZFO@=|rp$<|qOK zm?%)amjt+|mt}ssR`uF$6y5bxQtXXc4KwVCnOY>d9Jk;lAua4yIrw4P|GsU^2*=2H ztD*hi^_8V|8+;yJR&Jl4$0ai{lMg=MTrKq;}TID9Goyg^Ojzq}BKWv2^U7k)l2oC`^v7f+4v`h!Fxz(s`ZJ#5YUeT&&cSXMZlen!?+Tz{I+ZBX zYcAdYP~Y-hmP5;U$&K%Mt7oB<3s0eaqW-ZgUG>93f#p4>6%ZjfIEx44T{eARQr(>3 zGJgrj30ai!8QX}t`b3Ve=))VicsIH;QXG)qTBVnv`(-?c6yN!)Ldh%h=#ir}d1Vq) zC9Us7?%F?nVzN@F=DaWZ8S!%E1tFANFlH$&I!WrKvnr`pnzbdV-m1{ZKc5Y>9vRZVG=~a zTTbVfO#xNPO5XW>j-I~Uk^ZaaKpp9oM!l#Z(YcPZF$>x+-@X5!fs^CSC#|&RlHsT$ zEB5*w!^t8EipkdV_YB|6pf3F~+i4Ojz;%)=-LGKpz7A7ZVvmx1;NFgjU2zV_Y-Vgq zQs#Ei3`zd1iL1Pe(_iK50flw0b6L7ga3%=uc%M#ogdrYo4>^g_FR6H3q&ax}_c>iE z(}BAqd3nfM{l{N=9a35Tu70$dfj*-1YzJ2lwOhP(A$KskBihT?!wI|YM(6N`BT0v6 zO7;ce?i-p+M47w)BA4D_jp{z&w_2Ht3M0B-@7xO`$V1n*lE2vY7R1#IpBt~2eR@sM z{xsVs@>GAaXn|G;deG094sWBG1-X0O*f4tZfsZ9%mwN9x66Lzlm&HXyJiQs zNqyqfa<%7@2A%h`$avtJBgMeOAsq!^$WjoCEayY(NogDG@V)ON#)03p(ve^HM$Vef z%h^~~Z)-d0SnQ}ML1!A>{}3h-z`qEtG9G(C-?ZJ8HXJWi4>KAG6Q6ckS94lakO*8E zB#0(SA0g4w#w$-8BLP7)Ce`3W<9Ln33-a{83m@xS;`~K^WtOc!$vI#C^p50OP+sg_4Ic)4y!n{gzNGJv&GA z;>p0In~Bci^QN=5l|g1>cG=t2gz+)zCfM~V4V_3#?K+jwZ#}GW%@c`hCdLfH#561T zGq4EtlGGH=C~+5QZf30PF19MFd30m`>uDZI^e2HG7tz$xU^3#%Z_jWJI8CWikJ_D# zit_&v4O{IwDfgE*7$P)k4mE!Bc&JGNQT&5Fz{LPBhb*t3K%Q(2cj7>;*#)=lTu!dH zQ+Jb$Y1acsBZiV`R?-0Ob728UTWpjKr~H_r3h4Ty!3a_(D1 zBtLTN&6pumZ~ayX*^q&~i2xZQ5>g4V*qyH5?6b-swR}jHpbhEpWbjb5#JZ4{+udIs zFRP6?YETLfuA`Ip0h^<6Q8$C)Gh(hd8KvDt$$^Ly#uvSq#(*l}SadaJtksA8Lf%S# zhEmHr46K&ip;w#i=i*GHfst02nP3>`nwUivd{Rn*OWD^ghKNCaxG%UBxJT1GT6rR&PlyrU}ed*a)$_zM{!| z(r?Jw(R{X~iI9YlsX|Zc^=bC(Q-pgy?tkmeJ zAuH!|Uj2D3;#>_)@TN*M=c)@e@ewcZ7{~ke)9&Zlf~~4q_LcRR&81D$${dwE5Wc7F zD=ic7gVk8iy{xN*)~H^!g^t83bFkAP>V0A~dJuypE45AL2=Dxi+lYjt1kEXO+ur+7B)a(dWkn*E-~XIyCC&OT*PeBbzEI0$FS z>YI^AW|;52#aqH?k;a(2{nbdM6pfdCnz2`(>`o^*Vy~=;>*^q#Q)qEF17=Obo^`$t zDfrz~&cQ?=NjzTj=)p@S#F;$(L8JAmh^+}B-C7cOi9XKxGtJa-&OOUxIr@Eh^HTGzC8Nvu^&{6& z%lr)H=RY$M91kU4=@kGX<$jIz^3{#Ug>j&NUfZ=+iBCKBv-VtyL^l=9Y59Hv8do zt~j-}&#}OI(5Cj|X5d*5T2%6eTF2Z>jjT%ZbBVt(!#m*(BHrXa(7T6_YDoaDEn)$? z2me84o-w}MnAVgPnzn=F%KDo6aRsVrO5|ojgq1NRa&q3J3ItNOAIDR_(kti)y3s91 z@11mU{!7g|79|Ucy!}a=)_jzfWX)c`>Z93o)4jYzc`17Qso^X>Vknr%*i&2c9Zd z%Te*OnfSI(IjF6arcgS3Xxkt>9m~T>X{iqJTBozvG@UG+r$eNTdXr};-2ZGwIlV8W zN0(Xi zCcvydldfD-;5=KbXbBf^IR_558b05%e2 z&v+~q0vjHey`?=2ty{0x>0FMW?x~9oH(5aK*lK8M99bC=xF5DwjEOgV7j|N4omD;z z8xI;jynZ`$D0E`EJp@6FmC_(q)8i0h>2&=FJ<{s*2#@|6#518kx7igtePa78@7s?{ zl}4a@7R;$8K48(@^&n1w*2gU*&o5SA%*f)BlLcxr&u8j8{Z41mMr;2%y^2$)JmriJ zj->UD%GcRxfZIX>h>tml^uyp}ZP;*;%i2pJC<=Oq6yC@w8OiVwvx_}q+p9t)7*vo6 z%=d@b787IOzF<-0ydQC%(T?doVR`shzG5N6Rw0`MFbBEJt>|FvuFNel?=hqa2K@ z=)OeUAgr>jZTEBOB+2r2IyIWMB;0wgwETKIp4c6KigFA zMu#q(nd9k5fua!JV9AX?&;d|M>eNH$#gjiK%eA*vZx9nE_q$F)G6Ynl&R_cxzzV9A z<7rJa61U8%jsUMeY0p4Igmf(OcRfd?d5b%K|Bn7Ir8Y`>UuMHKroR3KbdD0`o3@BTI*kzpi>!?ZnCYW)8`F;yFVG?6IU|JC8Vs0CFDYtU0de9Mh=fp*P#HRyY?#e$@B4DPei3+|t}LAi{YA02XlyQ! zt3n^a4wfK>{?ugyT)|UZsynpGiK|__*N=PM{zA7i9BGC(*5i_9(;seU7>u}8 zK5lmgNM?(aDs1!OT@Ui``pBL_Ylz5>VgOP5$%3LT%vs|;uIJ&K=D)7vFH0f$YjJM8 z-)+zgeQKfHso{WcU*Z`$%HdhtyQ5qZeqH+NUtLfT9~-^kvfSxqSWKtJ7k6X7D<0-l zHqk>OAoIduhd#h@B%`R+7F^y39RXtrBx!3LC&^&14)Bj8t?ynMXAX}#doz!Qm#>pZ zN0ljlWltAisjP4_G-_Ul#f8|{?w7ndmmVltm)f{=?bCX^qntwCs+KAvPkCupT7EjK zS&KQ2gZpI5<}bZZnt78}xP^b;j{q{aJHYlrN4_0Mmi?!LbOnQ6QR1PDS?SLJ%6A2DCi4bKOA3<7u#kraK19j5%O7|grUx+-7^b0lB)mJGyhwW1ATX*ByUO((c1xTnv}lW1%Ci-j0J zT_rW$6C1rvNT+-{O;}Q6)Wu?-rX~YCUaNMgZF1&&j{hZ1Ga86bj0=TMksIV%$l+GN==m{6Y9<2vmkaE z07QoWy5MrG!5x`fjK`nn3w&lR!tpW31FpnjbL+@C;(d_ypyRl^F7$WgF;Dimcscs# zHxcD&O8MpLZe5U6OuBCOp41aydq$2~l|fldfO>pahf_b-%S#N9Qla zyXd0NcDiaZV$EDglz1euNIy?r`7Hsn@f!L+eGLztnh)X*`rGT$aNjtbV9wPR$|g#! z19tR!=%4*05BSPY;W%HUMy79(kb>$b@t%i;CQIxn4AAF?r9bOv5+pQ-Ex+y1P1Yxu z2qdm-p#ucKrFGtw_WJI?)td%FH9>3L!fn+4yr{ayEL9&P`0 ziIwlq6(f`)2&LUc>`2?%U+&jl&DoDMmCV*viBjSSZz_f=1J5`T_ZL#|u5{9;CDB%u zHSXqTm6ds3eAyu#u9em`sC}$jD4-qs*xI5HmEr7F!*z&ro_LZ`Ydw0DLzj2GeFVwSvU*I>pMn^`Ht|ICQfudmS0b+N>qUXm-!;Bo}}(qjD@Pnh}NO zX>o4}u+h65bn=Hhp@9!%rp_f<&TTFarIW~c^Uw_O`r7?%8Q1gA<1bgsjKViFUVh8_ zK%3YEvC3YJzYLUSP}^tq+|;-0xiL|6Fg2~A@+s61q%yx&l>8aZ(>cQb@#M04&-iYv zr)Qe*LsVH@<9BBBY@KX*Cakw}D<^y-Sxnm-s{DoDX>UJ`yv=kbb(^1k@MlBF$OEsrT$cK>^Kpjnab8Zr`3U z8AMV$Q-3%kPslGbM>ztROI$A!b+{Uvumem;2#f`XoJSW~p-AKczeLNrlO6p*+9ve^ z!nLn-3I)r;#;99)VX|TQbO~S4n<&(`J;s6gjD+fZvy8{J>qjqF_4^2`()Wh;iz5X; zs=AbIuto=4SMH8XQZQCVAR4M9_OGE90HmVJ8-K_s9Qr>~m(LQuO2(xMEx=L!Y>pa+ zBToPeCw7zk`ixfeQ@pdmC$QVofPA84U-1_Z+Oy{ykjie*nhMNX;)=$JoQzA79BK?Y zk90In705N0K9&7{OnqlOTwV8elrZWHqPH0Y5u!)0qeavpqJ*f?MehWI(QEV&B}laB zB}y=Q57FBoN)Wxb|H*yle%|+d@WF@qowN7aYpuQ3x~|KPHwe;pWugyM7Svm+GTrve zMj}-!uk}nbW2F#XB)#85jD0um;8YXLU`{dy_PCvFziYj2aC>%qsK8a~v40_v@KfiA|%>!_IgtJSp@$K?mfLU z$v5`hJDoR0f|cqcz&+YBsIYc!*{LB4rXx@>m1a3eqLV`jnodVHjPzCn1uPpvux~WD zn(hI2(zvM{eNe)OCK93_?GUyr;`q)y*&Dn|po?P2?LG~Y+HX5vqZw1!7k|U0qv6bT z>oJ@??76u`aC>;(enH7a!t4A-F)F?9$cLa!_Zkh8V(_ z4+~uMKws+Z-j_pv0Tl7qpJ@SCyq3>O4_Sel*k&>?kioYfWp|24sxWhLvs~rVdvS9v zF@?LpH+VYo|DWRCrICRfT3|3zkE*J;aIgy}!_{sGk_bx{p`@j$Wp1??5UC{IDj1|m zazo)*_Db@ds&9FC4(Cha`qNy_J5*%*yY)R#e=-Ujebc*X5ApU*;Nf5GIpmV;)>svS z#F^v7$(d03mKK9qiO{$nZKWt8! z9BSM?(#nqi=_w90k;E3Uz_dGE4Ajw&pVGSj@03^x3;2Dzf|@K%6WYCf{po-{=k1+6 z?DnP{R@)mMGYUc>OEi-Cq=S7|EGY0e^_vDtrVE`G{0uxu=ehUo2m|*-b+^@VH_88N zUG!FipZ(Q3?Q_E23fIxMrxXLf=iMg89Ys~uuJZks-+Jg1?;Nf@y!LUoyO~!k%|5HX z*79gQZEv0gI0kDpcOI1oJc)dIb2+?Ln04_GJ5()B0sP2|9vO9sy2^_6>D+*YHpzU3 z{)Tviq_CST12JF(Rsm7GSrbaGdNd2O zn-c1FlB?W)Rd@H-%X0on3g_Wt6qfAl>WuY5tat79xv6viWrYMYh~zlRs%V1TBh%>u zkdeO_PC@T_ibELOd)}@2Kn+Ris%dBF?G-vd|1UDjcjQoGv8JDQ$a5lJrShM>n#qKH z{k}%Hz)|aTI}o^aqQ>~ed23a&fAYR>i~0Ts@Y?X^;qQU)MOOx?iUDYBbx2N?GbdPpFVkJ38)^-8%h<59w?Na1h_f)OF6P|4 zTpP_+kJfGBG%0z_MJ*JUriyRZDujfG3&aW`+rL6yMRVGu$j9*hPdAhYpq ziL%o!UPA-EdJiQmGz($KtQtDRpnf>|rP$-LyNO-UscO_bzy@++p`+EpOP7` zw#+g!(j!O=;-v8f9Z@GSQ(e29VH-BPHObU2>;@ZdHJu+LAOB2SdYn&;MQaFw)=zSP!QO zG>*<&3dW5vgHXmy!r^&AazXa~CJ=M~idVGVy@Q~S&pHUqXiW^Ma^dhMq-|kc%EGGz zFF|zEi{(6@-H_MKLT^;pzFt31cffj{af(yQzkBjhr1|OYM~HX`=@k^H63@OVvw7_G zkscAMgzdvctstfbn|DOs7$AbXZL zGrGyg^i0~SiaTw4BU9nk2m_e-#&n1$Nk6eBb0)SkE?SGvh`njv=e%$pw~QAFo?T#U zT5x6jV!4$ekx~mk0|efmDI%;ZRmI|qx7 z%4ewNaPkhlCU33?v#4K8!gTO@Cil}# z067A$jwDdJi%njMh5n#R{#_QRtevBfE_6Ks4oqzn_#kXm&S7TxdD;{<`Q#5w#n1Aj}59fP+%O#xlKxjS~te} zi6)^p_TH2J#R+2mVu=u{xC{t8=clT=D%De3^Am3id^1_L{QC+=qW6q{rul`(Qyxe( zZFq+HsczeTv`0}e+i)n^@ydo_*w0Wf1Ih9&WDrD(3Z?1Y@w`jI4WdR7U9Nk|H>&^5 z&tpi&qvw4UI^4x@6g)(eX5=`ps@hovY|aDSpyF|~Al%iEEG=(1UhlU{j9x|TDNGr8 z%+_M*y+{N!@Wb+*Dzjl;Y%HfuDh2{V3aDLVRoT~A2K%Qe+`yHQ9w*lt+f z^lG=e);XA(R&;tGLLkkovrEp>LN#VCK$zE5#>Uxv627m)EmUE2E;Hg)Ob-Te2)X4I z>~vAw2XavN=yOH6L$(UC&maHntf!hQ;-MVTWpy*dzqO*^j{Ts1(cLS1?XUDJv>sC_ zB;){Ev1ZXC7r?u1)QTA(boUb}F2CwKyz)chNPLc?P{NnUN0>`*@8pP+fNW&`Y&j~a zSV<%20}}@P&$bKP!!9T2RuJD<_44F~$Wet?Ao1IujBm7kR7{EEC2W&%QUG~@Z80rMRVg}=@FB2C?L7DIs~Es0w))HMXa^B zJJ|1w)Yq4POHXv*dJgwXN1E#SmJd#IS)A%`&Nv%a(APO}nx?r3Io0q8)mK*|_AuT! zVkABSaRtH#$r-bW9}-})sIZNnygONw?Mc%9`JAy~d2peB_`+%`HW1)CQ%LZhY&>&(tPVV#^_|#QmckxmN`EmUh_<`^ zLn?bk0PtvvQZrwdtW(_ulQV4hm-+m4l4jJ$W*#@CCbRUBv~`Q`;cuoUgdNJQ$4?5^ zEy$2Ts^Vt@(IXdajwRjhkbBr2_d)1tWqt2zJPG_Bqwl`l9fivqTfpvU*d*`FTXgwDOO$IrD(a9 zJFH{pUUyXqkE_oATor^;FyVBuGhaiadfafAnX{&+#9Y^OD;8?7-RGy=OPGrWW{h}d z)csB6?&1|J?yQH-|67CyNR)H{5aMpTg45S^LH`x$4^yB@R(kMGf+`H(UlzUFIS{SF z?qwnY!pFqMEQiq`F|mWvx$eC%x|aiCq0r_jg3<8|DGsWqjH=9RmvGQb#=m!ijtX3@`=2{bM5AYSFLIu& zA4vzsrvL-;ljF8EYxk$)>DAg6XST{&#JQj4Amn@T5Db-$kr=bCw^uJA@gD-#SxLvC z@Y)AY4l=R|RnrgnxI8qb4?DkNJ#Uh$*N%I`{=~ohU0V% zoXZRHPjnV|{Ev?UEDgUP*&p;LTxX=kDk#vVr*Z0-gA2{ zyO%;eR@+gyKz3DX8BkZ}@^5)j*!`87)wqL!tM=S)H&uzz3jVM!>|bhT8?@X(dOGFU z3m|bYh{Qi^8{T6_x)r9X_F|G7`+#o(%twwZQ^3OBlLY!{@%TyKa6|}@E=-ZIP$>5| zMvk1n83`TmxOk-QaQ(a9B`-Jk>X<_N2LCR9?XPH=pd5k0D9Q{DQCMu`K_a0KZUi(`lp5l~&@8MaP?1C3wEo@eq>UIym zo5_NdS#as}V`_1||Oz8?{~Q#(KMWxgz` zh!~A_emX)^du^RT7qsd?Z}U7X?LH+IhU`Y-JXt2?{xj3(bYiR{HH&>t^B3j#_i!w% z5q^F=u8Ce-mmjm6Zq&rXZw%pO7Lc4rlNW5bK!5TB0Iw3GVyw_t>m)uO`yy$8)J9(X z+v)_Mdc4}ZCQP(l_5t}ObH6(@oqVuD;7 zi4QxqgU(hcMS9+~*>42EBv78VOgpIcAn{R{;YiKxLH((+Q&RErH2xuaM0FsyrMSQD zaB=f!U%QO|OGjjqcFLxkWRmtVA1f&#>0JwxfuaTUK4>jZ#&hgM5EmZ|4ZeR*0NnR) zPSuuUnkQNn-~HQ)mb}g*0Kf?aGUZf9tz4h3fem`C<-&Pggc%^RUwSY!cX1_Jl^f~M zeRt;-xuibLz7-UMowu#FE~kPZ!AjnRyAgPf{;eCI-;hAZK_s)x&sbT+1V8q%vl0`M z;#iol03{~yLVogqeDEpQBot!8gYz4Ud|C8YIvMn@NxTC`&p5_LN6aSD>2U*5d=oi(Nq}dDDGih@w<1qFLX3X~dR&$_UF4Z$VDTzZ4Elx_*OrNZBOx>Kaw%_f&!1m%MesSI8my-0sTeuypEl<#FmMZmFeO?6>2m?TuhV zvjy5Oj}Lbio+{McSkc+vfl6;{%mn+eltP0*6@6@qkNz0le=e#?^lJ19cO!Dwox`mW3A(gOzo{8YU!kQpd==Pat)NfUYA%y@LReEkN^ z+OQOyReXE1S+oN*#d$(K&si;ky_SM`3!a2|lF^HyE}K4UC3x*!-#gU%PCDi>r*PQz zO{dafPg1#^s;ti7R>!u{S8_L8)XhN$9S*@Gg>}m6Ka;~^y(Rd^ypBgtaySNmYM0&n zszS*93SKc|iu~e&y7JQaZS=R%Qk03b`MUM4%W)eFxoh#-Q|gBLxG&OKG>&`rvQ4Au z&wK8LWe6koZ$_fuD>F^zWxPc`guD|8k_$lRZ#H5JR#K{rl9|4bl`~6DGs)dmil6Oh8zss9vp9VG65p@( zk46TaIVK}tK2#tkJPpK;Bk1h8+jc2KD(a;%NAQSn^zTi>Ial*iA}kodZR=lC*!~&I zweXPwiNH3WyGTJl#JK8hEclH-VI*24RayuxF$l0^>2`_NDsg43Zok^y@pS3_inmrg zx;2o({5&J}S#snCl{rlft^K3e&DZI*)USTk(wUZ7P4_qPze?XsYvS$pSMCFh!j|T7 zQ#eBay?1gPvufiI7hSQ2($kVg_J1suhNNNz^*M)jRT}~oinvzaw&4{cB-srMg^BL} z(R};URBagjGG9v^y`t>T)YeYLY<%6Ud04pW`iQch`xNWD9!sTHNseu{&Sa|r^2yyN z2fyD{_8w(axA}_Oly34{R(Z`najx})1@(ReeCgmRy zu;CvUu#uP&u%7OgYhIWYup3<*_c}Kis~y%pY+FjmHb5M1pB>M^p2>+DpNv%1f_ewZ zp1m?xLk|4$MHU3DpGDQwR@^IQQ4S-$o#B>nHy-VZ!qW# zEyMzN;S8xC4ihSB0J)~Osizc`v$o=8&g5jYFL_snG1rCJDaPGH(IfiXJg>E}{k6|S z;cGS|3@q`+)0&ctRQH+8>KkfT*vW*fvYr@yna}5(F*mw0ueP4cE&Md*jkF&B+#2qG zEjG62MnYG9EO2bRWnt4iGdu44G4|7sE3vWPfPKCvWk{%dIxJuO5s6qh56iN+ArOZl zHIFf;F!R6dz_=bPcS1Eao?8~kr3c*JcP-ECd;bT;$XI*!>ZsVp)Em5X?exFm;4`cP z%|AIJI}96RjlJdi=nJMJD+KGkvjg^FE*M%$+9seUvY|CE(C6#$*a0Y zaxl1kDu|-;PNv@5M-)-Y&0=AqhASO3)zx+NVGpH5D~)?@^L+Pl zkM8c#%K&8=7YQ8I=~rbt!tI6&yrY161A$XtGxc9z+*7|)CdM0t3*0Xn?&aYAmCS0=9esKr9Zc*i& z&WtU))@4Xw`hFM?LM59d!jpQ7$$iHZP%9CEoXk;%9Qd27hKt|(CmT5~Z8TKF8qERv zW)Gbu%Sg;NtPzx1j6PG=ecpz3et+*heMIDpB$NyDTh&EE#QA{hS%iSkQkC zmD~fuuj&+$)9oMZ{I7b3^Uns0C#MIf$I2l@V{bRXmDP_w&^nS>v7>UcY zhEjL{w}?2fjlAtWMqWPV3HRa`0;1xxAxx_nFzKGa4-)LKNevd&_UEzES;9QOl3FdJ zxmwL#L~1vuFA&^6wIK{t3=q;G>ir0``vdMoqAczc4_?_p*O8Ew+WCLEHiWhPfyQBV z$ggg@&3WN6-)2VD#Q}lBEI;y!J@<|9ookIsFT;~N{37Oc7{zsW<2_paL~NoP%2t#} z+``um+=H9XMFBU-k!$wlHDMm@kIHQ8k;+!YwZ<^lmj@G=G|G$_B+U z8xaqW!P?>SibN#zKeBJe$31_Mxr~lUs2n|P9-w4?9$xxxg*;%wMVy_!C9_#M0)$bg z7=WLC+0GE!FtW@n2y-^~R{jEzZHQ%3rFnII%K7?J`#|}zZoGU;_onHIm819K-@1da zwy3lz)E;uK5u7^6{N#q10>{EErP+Rf`&J*z6bD`1%y^?20L|mQ;KUr-I7AX0Xz%a3xZv#*So1T2CNw}WX~ht_DJ31 z6!LK#5p`L?;!+aOm30VXvL>yKxkJt(iBIQlQK0bqpZF&hreK#i_9bypa5309VK*== z%oluMu{(ZD<0Gq6Tf0TWBc>`R4Tb$|7Bc9-Ldzrhci!dg{;K`V*K5SxK z^3xQHz^(i<0^a-lE~8qjuD-UPB`!aHx*1q6m`RivxUcTNjTifr zff5Z{&buJX4xf5qJ7A<4o?(zS5UoyIRbG|W>RYinQ)eXt-96H4Q3tj)EN(V`j)L*m z`5wV2rjKM4p1gTX^Z@8jmbhseyofwAQj_ohWW>P5<}%MStg7K7^$1S%HxHPy=IQMPiLw0OJC5H^ zi1}%Sh6NU5^=xPSg?bGamkC@Jm>JU}vwxdB^8cmfQUQvM%$9xIWIN=u?Q*ze&@osr zSfw&iz=ks71E69D=TW^=Kjx2AIGav`<_npD~HfyYjHM<6hEj10jSNqh74d;4^ z_X7&;x2%%6XiY=a^c^H=8b;<8&uv{cnRn9&7%owUBimXozdIOH`;E>PR4zf8o@8#pZ70jddJ?=!fSYsi+03{a<_=R^U)|4 zGsN&?r{WR!urC;(ipV^_gmgTa{fSzEw}g3nfVjraC3;Rr;vRCX@Xk;CXAod%E9gF? zfsD3x_OX-_ds4o$4WXtnab|kZ!WFvY6>pH`v!0lP5_j@jNpcv_b zu!HV{dyGDc3fu8xd+R;`$J>tKp@h}?uX&N*vV{MAx*xk&SkHS`w8Y|djVtN!X)55z zQ$@=;U%Ge63kju|$+SS<-xxX4du#W;HUj7*V$IT1fr7uK7SwCFLz1y(sOhScN^2!e zUFDdvMKDGDwv?LJ{yngFWxW^s)`_(r8+xaX8hJCaQg(-FnUibwMJisaPFxiJ{OWsi z&$iZ))|8k*nKwcEfFUiaA42Lvf;9{A|x zcWurz`fB8i)h@DxHJK^}Mdu7jRT_C-f8_rDJlYh}c2H-?`$U?W`4-L>()T*uGg#jf zXUuSO>7QNR8XcExFLI08$y)kIx^}(3IBI%ftMXk({a)2?T^Nfvwtw(Yw&onk$LRLlr_W8;p}T;ih9H^gX+m=4oAx@=Lm=P zSo?S5+5a4wnYd4HCTxa}zkCo8^6s)Edu?1Dk_RvM!fN`^SK*)5qKqWv2h_m5ezD{8(?V?JKK5GU^XQa(mPeX|y- zh6!_qD`mNEEv83Vn-AytY}1y9cv42%HmSui@brU&&QGaMhasaFxmPd9G{^ znyQ0Gi4TI9Z9Ctyx^&vJx}4jy`gOWl4qrGF7~BeCbb}wSop>&tgHtzW9SBY~)V+7` zc*u(}(f%LNKww4ALR1GnKenmMLoUR= zU#k>~{&a&n%U`_tIAd1HjZ8LvGsQwUim|C3i`%>qr=IX;^W3ujWxFQyLpsu6BlWfq z1p9SYO<;I%FG$6>vdi4g;StjcFA2GN>cDYqgv4@)X4(%Xfr+_?xo}h{h=@B1*nXqv z5*?3-d6UZL5hE|0ihK3_t9Y~Kttyk}&G}MZIu0y998{-G7!>ov&)OXY#0v=@FxX4a zB6f~@?7v_Hlo8ZbX+SaXmej09n{dy~NsgMKVQgk@ImM z3j=aGe{@bRJiLHQ6q<=@fnOj4*oK3Rth|H6Ps5T%nN@`Gn-_01-^PeIPt+_P9Lu1Z zzdSbm1%%UUa4I(ZjogGx#G)k06ni;H(&g^q3TvIW}uiL1lybaiEt zYy036X@j?MiEm38xSL4Rt;!IF%@`rgzoqJSnJ;s>(3-GpgnQ_S{Lu)`e#@IjS$9bC zN|#HQ#2qCoY&ItT;U(C?VndZ~=vdqUbR3*09K7w5B7IBW{PT^EWD6s$8t^cz6g;zIO8F??=AO;u|Cdr?c6+PAc(LWz8vq=9n$e1EUuiq8?dK zjD1>p`*-moV`iiEoWiC`nI1V%@H(YDnLmi{RW`Qa(^^j*SAD7S%T#Y2mxKWs(>a+@ z!uUwaG?JTNFOsHzQIpkH1}m`PRXKRHCET7>ay~*PRF`o zV~a!UgfMmvw#+;>5G|ld83Hlz22Y_aL>oS^{;*X`q<`)?P~-Ub{NaX>(xVj3wYBZ! zI_h6;RpQ0gOR#?KSO`uLkN>VUAtNCD4H_F)3>`IDcP-lZB0)d!ifGzg60AgpW`poL zi$k+mXf8v#d3TOI3wQg@9IgqZ%sk@;^_%AM%jB%)EckRI;$C>?^%}C)9tE)4Qp2<- zBVJm3r!=xAF83Za-+oF8tDMWX-!~zPMIrQYToZ?p#K*2*q?8yN=n*dfL{uud!~)AAX{cLC%y!1a~dE^IBw!*#@Ft?FY=9CKCMDLf6#@!r3RO^jHYj+&L{PKmXpurY>^r z3IHH15h&?)s1f85k^+!J4}UPa?14;vuLO`5qhO*N`yrmzM!2hBOiN&q-02S6v6{wg zt%30ya)+U)rYO0+^QS4P9sQ0%dIV)WX_4imWH1@f53uUbU8}^}E72;OL6$1NS#uXp zYcjL73Enh=EPlW45+R^kWziCC?3i3`U_-pC#3yB+{z^g3z^3so-9twM3nNdnS55aw zM$zDgXX-~aqGC9n+Vfk!5YLg@iehzt*uVWUA_Tl!0NA!SE@ ze8$GxdYL7t3q`t{<*tAQ%V3f&m|*T26HcPtt4ft=!}Yk~wYL{^`p$@R^6% z;FF)Qd7{Ym>1#=-yf!)zO%Kl}t;NFd_XH#jlEmUPH}o3ZYhV{hp`YxQap9Ga2dlccCI;u=7+ zdZyM|_ZJ45s@i3Sv0DzCSQ|NA|D+?_C3- z1(6O6Imz}w9bDzOW6F1KQtj6N>z~O08;lo}I?7K-9sHJr>F#vUE17%%^CND0bi|}& zrydrnD>H64iqTNrQLO!Db!}6)pm%E4PnX!saioz`oLmOG<xC>>>M+pCCDYOoYOWM8lPxAS~u054lcIu52fW2@9B6 zTShG6)tS=L530h;gekeo{~b*T?r_4m{~AcU@ryR_3*eOUNvNnHXtCG#T zH5lhqJTP$o>0l;fLB`LF~&LXU9R)#FMz3T<7yo_;q?$Ujb`TR*VuSLG_bboKo7*@a$q=}v@et$ ztra4CialG&O|KoeVmtdUQTCfR!VVu$Kw%+{+dE+M_{ZKuahjPb0jR zRvk!^K}rCq@f#-yGe=cVK$~C}>HqmO_L%*lZ07Y0X6E7Fvjn{JD>6PMl2uRwc3Y6J zOg=PnrnsLi2%$j=qCgRhVo+-Zy~`+s$Lhd9lWqHK+14rznUNDh$Czr~6)Pjf3+MjU z?TQ^jxMWxOc8tWAquEw5lUM-w(27u5+5rOdM(Scew8xhvP77NaQ|L=T+R|1>uN42h zuXMEl3}okCGdJz8L6z7U7aL;P*|w^hx!Og_{%0Y$_l@J20GTp~>D`>~SueevYIIYK zj7-tjXdMWDZAj7ilVtr685`5p&=THwR;~x8H|W*R62#G;ly{pLPa0Cj&#M@J-3_w! z$rvh{U+VhB)yV4KW9~=TJzE;UgDzL181via6!8#S?K|;~vr>zRdvB%YlWYF~#_h=G zU~DWnq^Q~n>bj24ph7b&wP*rET(b<)w-SF_g-dVd+E@+an33cNJj{>HjiOADZ1>o* z2;v?fmD}kp8)4acW4anxZBD{yy7?f!D=JnXZH1`{;3zIpQ;nf>hMuDgJcv#Z@BD7` z8D{YbYI7X4eWf)%sVj*X6%eS4{1mEj2q@7ye6+|pwRf|0%p|MKCIfh_(JzdH^2cTV zPll%dtTvo%kh4WN0^bGH{(^irOV_gDlqGou_P6|L?A|Lh-ow z83v|Tt}Z1>(8#xKhL_1z4A_LuAF)f@$vFA<>k2KFjzN*&){l{&sCW~ZA2R}I$xUfr z6#u1yVwU5D*Kyv6GetpDi6T9KHCpH@0}J!QIJ4s390kgPHson|IP(YozfZcxqBtbymb)MoK5H zXkt2h}YB8 zVmf6|E)l(zmi zWAJOEfZ;JmkDY`0t5QZVvy8+GNYXnJ3ioxb_fknN@Hc183o7 zJcgW>G0mNw*Ll7Tg+vp0d!c5^GCo|O6BqTsm@ywZ^5i^e&jkqQ`}R7cIJ-caDn^Qu z_~Em{2A(?U!s^e(l~kmuDs}Znf<-rdtg)Bw7uT`T(61YZirvB3;%yPcGw+uy-GaSI30b{cj@;U_?5Kpbyu<~6a*YKvPs&NYdA0w znNe?9Z;&s54{SiH?N8t0B66(VvdG(0Tq_lu@O5ubP6HZ_15+f=z8JLr&?EGsWg%7W z=#lYi=>Kw01Q!KRPC^)2(zl}4M4KMDv_Xq{tYJ-2mCr1HDQ>m@tRl?7Ce=^j1~2lf7X-Y1J4+YcNIujeuJ0!_bfQ4mGK@~6M? z4^bKv3W`-^gAaT@+QI*esKg&5l^;I70y>xHNFkKN+qdj7_OukEy6)u+gsKB!R?M8x zS$}n4;JS*gt^EXXpCm}07-R%NiowU1@nF>N-*76#nx5&)ff#TsAz^#QKFi$xPCE}@ zhO)WsR9$JDVgLh9aHrCh6qm`~ialrS`|137A`8@(0_6kY|5C^P^Cq2eePy}fCWS_h zh@v*M3|J3D>su4O}E4$2Vvuog>ZUmKwuD$_6jO4(Fld?Pp|zA|8Fq|H``mvliXB0CHjHQ`!nM_%0sORPUL2 z`gYbH6XK2$o|2F(w&UG%T2EOB35WD{7J$p(mfcH+%I+avts=f~%SEq+Kmjg2Bb@fk zpe7hH?xDK)e$wsy>D=u6;%2kmr4QC5PDEr=$?V%7Yt!z{VSO!ou2V)}Re|m;87ivo z!be3|Vxx0j693^O>0-e7v7ctfqX;12&g$sv&qGP`E9Y-rR|3D01yV`hgSh8oA{GKr zh)`phZ`YQQ5F#L#jT18sGmoc~B^A2t`ufcYB2AO<5q_NDlhXiOc++gEt7H4duWE`x zi^6TIj-&W1G6GtGt~=R`P)s{5Wtav$&E~iFw{Ow6)4OSCH5P#pi5AzeA&Z4D53=~6Cn>m2x zrWDCg=_5`E@kL4^7%^kmFfoF{WZ9;)z;8p1rdbT1h$Lr#M&mf;K>0?^u?G=s5$y$y|TOi{Gk&TZqxPkakD}!wi_x98uXCV_WDQW8T#~jn};@3Wl>M+F5^Y@VG*mIf&n8!d3Ax8ZB(#z# z;=z^D!5fu&rg2;QL=nV2@t8M>#%NU|G_H~H!{oQG#LlVUJV@W>$$*ebrCOeLa@*=%B|f9WBIJ(9E9_ z4*^9KB5N(<+4qDmJmddF*^aEyoZIy9Hq2b%S~II3(Um^lw}PiKy`DySlH>}$Qvk4e ze?1gfMwtc}Lh;AF4%%G)q7@<;grQo{#b7MT_4nD%mEfR$z+v;1dll7BIaiJ6EnE3P zcKs|!B(3-(5MvWBgnkIP!7b-u=6cC)r0_n;N#9A36+*Ehe%lE$jk8a9PJULhN`!cS zcoef(4AGcw>&sN*V zfi^#kN>bv_@p%_t>Ekob25Mk6o?Xskk-(@0wP_>2s3SubX>-Xanf&b>K};-G2eLl( zM(vdl$|O9K5KRS1yt-#OA)YxUKp3q6R5jZ~to3-qoD~L&G*n^4%x25*ucB)BY4sI~ zNb9dj%mInCP+1m{+HA@RUH0lHgsKN*38^TJ{yoz$KG}hd5u%-+>6Tw9p5$b=N74iO zGgB2gi7QeucfBpeHd~9-Re?lLx!qA0rGY5Cy@16K;ZC`d+*m&X<5qdHc4Dx#7 zg_$&BwyiD!gZK{ut8L`~g6aJts$k=mgKqw@Y!n3yk)rt+P>V`1AKESHxLAG1b5y=o z_eO=%Stk(Mz67fn^#2~0QKL$Mj$5ihW5VV7)kRJOYxkJCay;X<<~joCXIK#oAZ~Yd zp!N!1M`{?exz#;zuU@Bihb%q#SjA*O`}7Ti8jwST<@L~!RWK__-|K#s$W*0v`Eyi+ z+ipK+;m&Q3`iUISdO+Q+_m1Q zFGLp?P$Ci+n1nYoq+7*oJczCoy+?}BsZk}gKMaGDqY$sm!#$;?DL^~jYjcX8@o;Kc zRJYwF&C+xP{ZBV(;d_v}V*;I;X2rOjz1$TBUc4Oj>vM*KC@;3AKdu9P*0o@gbIYF? zd{@qCTSN9wsU}Zqx?@PTk9r|Fj`e_Zn+_yK_(|Y{9HSO&`82c$ghx}R+YIxx8>f|3 zO7@0>`rAPd^P*VF6XETTSCgSO;~gta3_l~uOqbygMA{wO*FyB8@pcm38oedb@N%|h zqX#z|0OQrCT`HF}3b%mcb8^}_Obwu{j*(b;{%b!{HdePm3J?)nJ zD1DhU5+D|J+dzz`=*!jXW65wD_qyG@l(Hr{uW5+mPvRCfzS?86*{hS1mImA(z!aqN z71PV*O8xi+b1OLyVDDFOnl5fLd6kfXuv<7mNv&)fD%I zv#*P-9Xl|n8*w~6;U&Rw$FwlSpDYOy0aGxaUW$2Q}RosG+X zc(;jj_b~0I{ZR~Gx)X)>K2DIs^?R30P8B#h#`j1=_Q%~Q|966{FJ7#^-ZTZjr1#cw zw^y(425GFq<8T9Y?>LwBuCcsIDHM{vd&e>|?!z2JE+L@aNVc+P{ew8d0;X`bD%Pr{ zfK6d^@1*T!sxAT?#)p6e8`zt^%7C;nE^cmx4;jMR&10I0P|Ka3<*KWAdLCK8r#xEB z8yIDkJmNeT^(JbHD<)aE)?2g6fY8|1;SLq|v+U}_!MwlFB-|5l)|q{C@1nKnDg2h7vDG7aMs;lO$-GiABf}xfTjZ4xwtx z3$6=3sK_*Otu^sE_D-tl5&aEoUlGah{Or|wKO~EwJeh6gOrb>9_a4i>A*k2LM+_96 zq4{+iHkp&+M^81%*;F(@!Y?{LCP}F>Gii(NB&TsMbF>uOJv$(HS!}hjMB7CT*8JDw z!>N=Tb$q4EVEqV65(eV_ZyK+qyaT^*idX3UYSpjAUt@kY-QOt7Z6vE;{EQ zW*Q{>s%%_!wC zS}ySJkW*|eUXIY!lMktJqwtrZ_nPYTCKg{g4oj{)6VFL|=DMW|YfI&kEqU zmn~9UidL%<65(@mxb*Co@2}H!vOJF&dHAW@&WM)eWTiba#130;hul^#<9ia2%l9I>F@i{BE=6(@y_H>eJOp#n>bE#CJ>?Ovu<|ER?Tb?nlfZlhx)9LHY_i|IMU9lpq45BA#0&pvG``r>J! zv@wY&rk8kaJG=&SDDE4)t=>T{3b!M#6v8lbOK|CyuD|;w zbr%EF`h`wM?N8Z z7Je=?O3j{Ays6(@!EoN`nsy83F_Y`vTXqhFj2ia}dK2ZKDH|1s6JP&)#jP!@uH-W> zjT?2kO-uiOT)kyflwZ_7EG0t^Ie>Kc44`zkgfytY&?zAyFbvHQ(kUPU5|YwLcXueA z(nt-R0{`*%yw8W{{W5FTtb5&O&e?VCYoBv=3B^NWN5{JvK7J4DjC`%=IT@J0Cose` znTv7>W0FjeORwf)cjC|@TIEfNT^8{6TSQCY*279rVdby~5(+ESLqyb8q4Jift+#}^ z-7y=ks1nN5T)vjzo9+|Ba9nKGo+aS<)VmdIFpp0SkU^}9j`4K_Fl?xoG#EHJcmZTa zSeuLe63#^+c`QvNIF`=6_2z_`u&Y9L*RE4eo=)EC>Q=3RXwu}V0xQX3zipyk_Aju7 z&78y&Rv6gTQWHBU%n^d2u#fq5AQB2_GW*|60U^R#H;bcQ?=i&c-Lo{~;p1EjMj;_R z#ew6uDk>wpTC>OFy-FFAIsBJ5b!vouv`{@3l{-lj)JgTKO;qy0Hv6)C-2cY!^HgsL zuQEKTg@S5IJ_@0A|LJ3B_HNuOe9;ODH?SXCU&Q(3}d zWCc4cEkUTMxnWimFfz-+w8JaMa~Q9Nq{;%mrG}O%$ihio&+Jm|=ZA~goGff##(Ho# zLa*HPRMkqEGwf&N<#xjA$jS38O-^1fpiNH)s$;dZU-Kmngt4 zg|aCI%J|SZ@PLA5;LMmVQ>;p*i zuJ}A7uOy1zGxW#|&8a}EEASX^4WzJN-WWxSSm{X;0fjTJy}NVRyvOU@!oT##`9QO9 z-T=T{6jrA49@#)rfEh~eW;^goQ#KlWFc+Da27V^nY^i1;r!*2g&=6ojB2U|$L5>U9 ziA|D!gD*0f<*or>4FzrCG_rvPnw~A*bqPu4N(^SiNI?!%W=@Dyv{}HPYV`+h@xcm$ zE#Mn*?iLZ#T558!QYTeAxN}yl3~3PgiUbg74EJM1-gQNtBEBzHhe-c@(XpHVG3rW8 zJc@`^3~kb;ewrca-I8F7;>WM^-?j3WNOjN3uJR{pkJ);IjYD!|LyE6?dDJPN40Ptm zp#|fo%f&Fu94p979S8o7WEBnpy~xoSG08c5!@!bOA>RuC!;P!BR3Hl2OrcxfhwHp0 zkG~hqhFH?!t#{{qnPlTU&wVsM2qlX?4~yY*uYE?_G;`_unS&R5FR$HI8@^ zje@>Tr0AbQy>yS_&ptb43sXS#tS0Vowd<}p4-4iH$|}Fwi^P`;g?(NVEA1pYA?wbR zPG2;7x;;d7XMiZ(%IDesl2+FVw{RFnr0v;wQDVMn=C59@5^arqIJ8J?@iNO{*lLkK zLegXz@wBLB#a}=x6{A)q_(AjwEFV7eIDw-)*G;0lE8O{k@q09foctalEh4~ZbdLV? z{Z&42lI>OO@wQ^$K8k!C6!g+q47|V7Sdce3P>35Qd*;3LO{ykzZres83YxN`xaXrkY&Jq<#@1gbY5xUhOQXCZ7IQyUbE)k+#JQjNE7wBBV zMaLE+n8-xQj2ko{TDwVe?z_810OooQ$Vp7yiUaa5XFCCpm!RiBLf8rf-6ZHq)wpc_ z=G$S(Jc|f83FKBVwWtk#!se7aAXk#lxbth;nfbN1 zb^>t{eN(SqKFuT-rk^p1U1dxHo%#u`HKt)KS(cZ(Lj6#1owr{CmOG z?nDG8#5`o0-PozsUK^G0c!hgE!{)aX=MCwK!oy_Tr@wCHb#Qap*}sX0pSOOE#mU0+ z_TQB9mUccKU%_gKjXw_;`&fkkNCqgrt8t&Qrd!|GBF>TSL#0q>Wk{-VaxuigE2?A&busHaKPfpv0|bbi`mhh-UwsvN zLX(g>k-u}MB`wxZ3oaX#&sOW$!aTxpd8;5K>b71ew!0le{ z%@6kR1M9ww0k5BE583G0#)W&mIf|gAb@MD<~aJgMKLQB(rHqWg#q;hh_h&_~!u!0&e-^O|Y6^`>V7fj^O_8;$zM)izIpB zr(1z4q6J}I`W&@%#A3p`jqKy2F{j2YRi>}KhgW~(^N1c1jg2pA6EoZmZ?|rW4Ydlr z-U;kV;yGl^;5aSUCocb3yFYsAZ}+Sk8P^>ZC+Ghx&8f8~IFv>#nc3TXVesQO8ysji z6|vO!#P_TZx55Reqhx?4x_&9p7_Ul1ks&63P8RAK1k_zTEZ#36{_@|8j?JV!%az|G zkFHTFjucI3JkY86)IjM!!#QN%$Uw;e7AiKj`+ic#XFAJYX)PDG4r@q>1e1Pr=clqUikxXy*v6$ z2N_4~|JxLVNBX==mK*@2QtjTsTQG|~w>%~Pw~=R@I! z+ya|fU3u|Nj~3#n^$liB-MYQ|6pFO zBVTGE6eOyrm;CKIJ{%*9C_zTtQ;n@FRm=A34Cs_f+9}# z-|g%}qhURREjN*;vPkXU_bFsP;w`F;vd|~Z2kwcfBJ#Q*+*5(0qkyU*H9H&sR+~|u z&FEiY5E4>aD68Q>%^zmCxQ_?b5I;&x$4L&waUa$cL*)((bCRr0=M!Q4oU5A@jVwC# z(L~eL@Z9MZny={i+;2a{pA8uZF}{=jXUsnhsuQFai{f%O83PS)pgNC}euF=ZQD_o; z-0-0ifj48YptP?5c7bRDv}rP(#6_`*Kf8p1c5r_LNimv)By!tNUPjHk?>8Z%96nKdt)%E8?i` zjrfd9GL+NjsIDS#xtwM)I+$eioMMfdm1ums}@l9`N^)ob+*pqI0A*; zwj1LukLt(KELiR=%@TdlWY6I0JqF<@`Pd5@9XjP}>`-QMdMfOaJhpvv9Cmy5_H%VD zHI0~{=j*Zb6YIsRgL{>m({nPPOtzDptq0pw+d;R-t%N7eA=mzk!~H)JZri{u4GI%d ztmmffGKqC5ya8%QKi*urWp$RVx2|2DDGujxX$=>@&Ic*RBoXXoOfz-lsj zIYN@ncyBDg%Pzpn4xv}2WXIL`35wgt}tcR?S8}j+R z>z_Y{@Q`5J8vW!*^bx-TY6f((4!;2Yq(oT@iaZ^+5|^6Ii#NB{p~pDzdk;ooYh0D@ ztuY78Ms4Id&-OVy31aA#ts1}yALaSnp!1mYY&-g2?-tuLQMY%x z;9Hz6O^$)cn$z%p$0M0N)B3dU77#A}K zBE-q;nHe8+ypArLWfikT9G~XKtaO)I%E>n7v6R@yo=|)Qtin2oq+EWR&E4fiz%3ID0 zUqvCLu=SYYT;#;#QaLGdo{HW_vSltOH;<=RIVvZo%1uR%-&>3LF;dPN!9jB4A%*Y8 z3NWf}r6(t^YZw?-B^S@zfAB-~cA&racr&_aI9;wGDMk}wmqAH=)LyZ5**h_u>Y$mNN(V=85n&_C?pby{2pyuw7)e#B6z%B3r#Ba=d0mLMH} zb6acLwSo&@36uO$l75r4<^dMVhTv_&l=Y|baP9KC6D-h_|A1g+c&l`UF%v~slp1Cg zv%K&^{>+`xkX)Oh%xgR3vCR#7`Br=XHz_HU3#C1!NfxlF=sy+>ogE-`E4y7-)UiFp zix0?;IDt=-$fvI<-pFANd>rQkd$T7mm$z85B7_j2d;G5P&3QX`L^09LVbn1-VG5cx zrxcWm@-s*HW={V^WGdp(28yo$*l~-8vFWFv*IYpPBw2x|o9xdILqsAx=T74!$hNs=Juv$wVK%muCl}nqS zV6TBFhD8nzRFP-&-@k)WU(JKzaT2UslIt4Iz{HtpDWV=_XjR{-n>aOf;2><1vX37O z`SZn8#9Yq%F5Hk4xGBLlw+NTaKXoJokAVO$0xC*op(Me|0B)Co7vpSnyS@K>#m_n) zYi7EWd7Q5Y`xNlim5VoIG<9p(7-ZKinphNhGeTJ}sb*1d0M~>q)ZZy8w33~Dwvw*r z3$H;#YT9FT^=2pc?5tp-5SNjh$G<$R#dm#{95`^uoL^-&0Dcj@1H%MmD&()6k_ZXd>n z@|`G1f%n)NhVq$sVSuqqM~b9(6aPXFhX1^z%lzF2HT~i`Gk9^PwqX9l z8{QgZ^#a>rq?paSB)3BEt120PO z>6l_M-Bi`cwI7p`J$~QVbey|UrW5@Lp4-g$8M_hZ%swky?s9jWE5X?BtytgPC3&iW z%2Ki9^c?xu5~i*vw$^$@e`^TYmVx^v#RdYGh&1W$P1M^+{j?nCOvu8D@FVQ-pvA4w&z`)uQ%gn?+aaC)xO0@ou(iK*Dh@dM7DZ z$_3*oaU`c%5n+64VY_X$mSoA-5Z2r&4kK^Z(2&|4N1X2#&@m-{U~uEy%Bwv-t<8^f zDpj+jM)c5RZifE4el$FkWyu9sZyBqI^FTV!Le`QG{a|$8C!yYM41hN^z2P+C-FJSD zyH?G9)!FsiFpOq0yy^<+#q}}5s$`^SQZA|dA67;QGG67d@=H_p7mcgG(jM7b91<9u z&Yr=u-5&0oIyaVAadJw#OF@9mfE&qKr^Mj!;vbB`?29VCD(ECZ zmZcc=mUpl={o&jw!;uA~2e3e3Qdd?~AK3d%K0BqS{r$vxk%RvtciCy(#1lEN0irlZwS)UX*p^sH z)Rg&!<33y1b{L2paB9&uxB?|eoGcGKQyVzDTJ;=fS;Vd4oT&Vc3qzB(rGG49C5yI7 z#$M@DNP- zmy21$4(YuY;LiK;4^`phmr=y*GO85p*R2@w=f~B!Xs~(u%5hB<0MiT8iPAJDaoDSW ziQOrW_;mJFykT`EO>=W=`RkxF!rhp&xcA?-FL2{{=N#uyWi5isy3=ajVajB-P^a5Y@+84CaD%HEu5FF42LBhIbt`mV>@U@ zb3bB<{5Wz0LjA9d77@8yZJXF~m56BYx#nl@^9CJuCSM^kA$oEC0S0;Xgm*tBLGYbvYchh)0)T@Rr{D$S6e_6x2eLIQyPR{6zbS z<2xNeUKO6?TH1z|*gqfE0tQA;G=U%0mMNHC1tv3i!*1ZAo4r~^AZ`2ZY!6=WkT3hg z`h1dQbN)mJibc-Tm)j+7E+h)-J7_~WV}>5<%7sOM(MgPFiH3;#kzM5^^=l~a;CkKRxCn{G|#O?de%bm-=X%Q8*U?hWI9tG!E- zVRWnXckKa>Hb#D2QBZq**?{Yb=+OnU)&4L_9S1)6kFrapEtSRkUn%J0#QLxyPaWx) z+6T^_UF93Mm#>Yg(HxS<3BSxl)?p<$C7bS5YRW2`B;GF3)Y6Z`^&*VywaJboZ}jBtJJ>Wz4=(3Kt7E942>*$+%t>#Y)dm*mwjwOg)%k z@h&ONJ^RlL;#Fm6obuPcZ8}32dB9q`V<+01s$uPkmwyn+#-)qicP|IveP+_TCznpy z<^e7ll(#7N8jARm*KX^n=B+JMOG(}|&}K08L3TUBteRikV3o8WPY#8IY(sd&QGIB9 zc<~a18D>|d$^OLt(Lb>m-O0D$<1E~!*TLz=Q@^mFJMnWw@pm9 zZU^kFkMWGf8~wh)KP4mwo<*~ps@%8lf(RW}r0|ZTQ#Jy2ka{>^F7nMj*;cp^=ee%< zyIs3*OU!?0Rbu_7W4{w289~Gr&@~-<-Jo~i$j>f?8A%$l^RkxQWMvt}-#@`fCo-YGv0 z63Bh(+ZW0rXZqAK{d*!^s1umjWE#=ieEEP%m$MOu74blePfqLNj1t9bit|rkb+agC zyNn%_GF(_x&8#2J~v5=jk-NCl9y8o<24@(R!ZQcb1b%qp3c0<8tP`d0b2 z3ZrBe4{mhE67$!duvgf9{&f@`6?o#Tpa9h%Ou?hc-SDk`rt(NbM50YTy$G zU;j4mDKdQJONO@iSuY^>Yxe=gtdMYdn>yj(*C*aZfcD(NH1D@^MnFby`M*gDP5XxG zn2~W7(FM9c<3Ss%2a_%kMy8vwuiX2z1O%Ne#}Nu({2DDY7TU+*QVl6VwX>zOF72-U z8b5FCEVK3|f>{NXnRf@nQf;7jrh&&##EpBIKZa654Kd@FYn&G1@a~oOe7`<~y?pkE z4%#XwSN6qcRu)M{1lhcwaem`@C9@j9xlzuH?8{u;#2&^`R7-cM(3AToaX zfZ2q+%2K9o*z>-j-0i^@fl`s;e(>McDTkj=PYE=+d91SMx8EEe-6tQ=v2KGBE@tNU z%_F!OlS8SsayTL~NyJQIvn}vEUNGk4-(++D-G@`WS_g9gMVJPvf8Z?`pg08hKY#u` zd-U$7*yJ{#6n|TO4-gVbh zVYQFnQ;G|bF<#s=-zD6Y7+%|kM`E%|aS8i77$0U-lhE%|>u0cpvj~UhB;2qRCqij3 zad7JDo=i#rz3wA%8kOBQePzCMN2y_zx#MW!px10ItnsEv9G}s`O#o`7@Ml9DJqTO5 z9N_*l|CG6hneJA|n6YeiiAiD0->xXP&}92Bel)Ox(G4#fsk$V%BqIq@vfC{*;FF6c zDqx1uj)UZ~VlPMJ*apIXdokwtoqI*onYo1E;!E=_5`tp{6$T}CwDe7@0jSM{&@UKnZMK-WpYnq>KdbhK)K(o} z*hdWhU^r-zsYK$rEc#-~mlEf+*K3>*%xC(tC@VZXh|=ipwT<+HOX* zrTg-*6%e3ugU9kSIFMb;`Cxp#*aQt*+Lgmn}A5^xb0iynDr{(JL`1Y^wpg8Aq|HT8(cTWM?sKDW=N+#bpA5xMRG|9# zu7|{z9Iw;Fe^8p=;lkXu)8t?orl6k+jW0!&hcJS^j?6HFFP7z@pVxXD<@Wle|87m1 z3vMCf4z1lxa3y$bVX|YQMml9vCzJ7ob(V6L2iDcj)RKFsIIYyYd2l9FB;sqWvpai< zG+s4O1mKb6dJe3_p}0clK;uHSd|oT&jGuHU`g#YiICb)}&LQ4z+W}Bvz+}gJxX?B$ z`7nvi1tibHK4F|5Gz_+Zr{Bi#y++;`nufmm zw4ZI6%t_3Q)s}?_*aox@GkXx8^6h+C9!>-J%gtM{)VoE!8+PwUMJZ0BGbrj zGY?#%XB(fh721lUSm3ya1PtqY6sHr4?xdZyugqSy)o2_qK_BiGNJ^jb%qaIA9}x+v zcbdA?+*R(QFGsjl;FIV@m*hp+-Z*5eFKe=*`$RF6 zst&Y*j*Ef`KzN;llk%C~`NC4*S~}X>3f?CWnEkdGIGmnI!siywx%Dj*p4f=hLY~!u z>(aj(k%J=Z<3VfcM&1C|A)isgs4*89c{t3k86tL6mlhhtF~5*(NAHa8XXN|isXyc%e|r!?k{r^bh78Wf;TC# zKJQKt&1=>%%5K4flyjqA623@=GZ;}O#Sea;d%02+hZPLmmKhJ9I(#_hVtqP~T=s0f zP_dL+_P%na+6?S)J=npQ*X`dDz>bLcDSQYwDMRff_3}~jN7PV}5V^tnt>N8?TQyPpN<;_eHqh`r$(8`5Lwn=eEamR*hpDgPiY^x_T+4Prq7j~}(82N$Sf2j@SUu=8WwP)u1& zsmp(2y5p;GdV9Y=UbYnvd?M$TmKO?*RSc7BC0@!CgcC9er`^QlFP zeU1h2E|qMdU#h!w3vbaV=%u6;Gi7yqliUH}wIsKkmfJ`PcRT!~SDBX+xu(6Zh!l2Z zg)arPy47m)&wIsg-mc4CW;i`{ACF?8VQLXER55CuT%8R3k+c&wrJs82z)E-|C>k5E z5^JoO&XciabQQrGDgcJfM5@w^z1o?R)C*?-PvgZ9F}40@B)LOA9t z+n*ls#p+R9WhfmfK9EDR)}y@DhoT67h4je1T+HF#OKWPszvy;TDSu|!=YGgwuF(VN zUca4}XGNtU!4W28Vw0~N3^o*hGR8IXpxC8zWRl;375)5W#+LxMJObFs_OUM@h)XNC z^t<@b3SrV2Q#}W;B5ERGOO!3!0aeOAc-@i1L4Mkm;ef>W$pNl@7N=*Jy;*puz2_JZ|WMJ~fuZWvomN4}mV?5DVtC)2wvub$Co*9{@p^i}bHhE>B#fX6p6bl>9728E;}KJRd< z1Dv9wz)MzvFj)YKysg%>Zl6~W|G?K?|4&%e{;@2u7sVUVGdMY3RKJ5inC^pa%Y2b6 zPTV_!dg_-KmeMe1xHuon-@7h_?_=@q*Xlht9K>|k=nKY5Q8=RV(VL&GNuyVqKElRV zz_VQaJV>1}iPlC2XT4n>&MV&lKacn;c_@-o^y+{y&pZjvJ-ftEUX@%{n9MqA3UbRl zqh%e-`SMSiy>*Y%cNej!MrgtRM2cd4YaYm`U~x2`-t}t@0)T8ESuji6UccZkr_T|4 z<(rJ2CeD1kvfi1oj?>{QtNFEsMk)z381xlXa8M}ovRp{v`t}IFsIYD)Ddy2; z+HlO2aArg=zVJ>r=aMt$aY(eCqy2Dz5m33Q)%RHAMPcSjyZkKs>F(?Uw`r^CVX2XW z{Su==YDHpGGkk#($YO9M^dWU>y_5BbFJ1=Vx@0mIuri!!b?FA8sK&$lVw!aobWrVi zHMVp%mM-{f!X|i3CZ}bYKOR(bTR(Wk^62@flWSlVh^({?Kgm>x1dTL1C1l&DbX(?c zI;H5$Rpig{i6}B0ITE@blepHt$kja8I~Ahkq#_#>dq!?@nCf z&y2IO-u05%hTxnEW?S9EePgQ#cpAmoqGnREDzx~nnjY>rJ!r>hO$k|_q?tpUo-#{2E~+`PTm6ZwKeH6CyCYV{XRH2)sR(NrF^f_x3SJnKBEmYR`(zN%R| zy`U9x(id1Y{2`G=?hW0TTfC=jD^=mg!z)PBoM-r%_Tb=0XwrA*^jlo0+&rPLgX0&4 z+1aG$Aob6UKc5!N-h0VhNuIJ!RvwOoXWdK`nylUFV(mm{#M3@JT@~ z+AZ{Be@n4kBlG=Jp_yOVq`D#0pP8K$pN3rs@x4>Ijy}y5@AdVrk=>Jms3y;~K4n1; z+kJnk$S5tJe{lj~Awczz%3hsO-|On7Wp3M+r&jQvy+|$78xQH=(pj>7D4vC|8GNz7 z^4Detk{qsN#%%3)z5X;m<-Wa)9g1H|_XBqHl$Bmr02U-NS+>pm>in~W290%w>$LuC|5*0} z$@VYW=d$j-$vzc%+;6QcSUJzepDEA{&mLwm`?j6ozYvPkpG_>ljgxN{${w=bgsr_6 z-^tzF5ZHw6)>)3%K5>*<;7bo_^84~jEhA6cR+jv_TKxmt| z>XPI+;taU)B~Mq&hn8aYMVQYZahO-Omo=0=Ur3+tRNDm*#5$(#%rC8e-Q4NN z)pGf)xkh4{+xz-m9oiu&$|MLfWWT(H#jfuZj%R#eIAW6+8gS4b7!MILW;P|#z47mS zE_J49jBy|R?V%S!LA>sF26mJk#e(Vv7>AUIE5)S~xlo+?F+DqM0EUnbUK!x)I!Yzm zt9AIc)TmAknB}x&QAFT=J2_L_>g4dvD)PP8w7ftQKMS%Kca-`(u+k}6P_M9!@szy{ zzN2uHcztv}5?*p6(~9sQsCCaj<2%S~?!4h$wM{2Ox5FgfIz`uIae3@{W?<(4`2L)f%qgu& zhYAsvAuNphsZYTvq$Q0nz8@)gb3bLIT`I}kZp7nX`Djd#95&c8%*^m>HaTVTGrE%5 z7A)#giz~pwLG_0O2zX6C%-|W*LLatTHgI{xvp~zTsG5E}VS#>nMpiN_8z5j4Th(P= z(@95kdYwOrq@P!I%zDFNit#ItW}(rywS9ASdbgtW@v6zaz*wqWfo`X2lol=Z&?V@` z_(S5j)5?$R`k4r3blWKZ7>$5)rRY&2=ICDb$gQd&S`*>pO_Ec7`r!>1tB7gW@XfQ| zJ~~|EjW-Q+=>h%|13MD>S-&PvZzjXEu(8jqjq&m$F_?S2Hk>Gy%@!y;LGDXodR#M^ z{YTTOs^(*YpY#_cYIwy7&i54JV7akVMUMmQteWZ@30T~sxrOsxeLbTJ85=|Wp*oR_mJm@nWN1_)Hf}Q`Ii}S9lHfcy;b7C zk1(f_>$n@!FngihN(Ri2fJ=Uh7<)m=PAN@XT_Q+zOcYwM24*HDT6mBQ!-C$L>wwQ| zLp7c4ZZW6u(Qwl0r(P~ql2S@p@I90Y4)_#}V7EzAPRQ!C=9_7m>uDc+&mekupbT@x zAp;F}kfgs4v)2yJ-8&>%`99r``Z*?S1Y4<^KQ~635HmduH?UX-AYsm6CYMa?s(5W= zEfIeqa~zp)CZ#i%PiTW0Fp3QSP~XCqVyWyeqvW3>UCoYHIj?t~ZDXvm;>wyURS^R} zd9*0tV%b3G=S;}c1%>GGyCKnrf}*Nl9G3H)r)Zcj%_;ljInII@h&!2-zVqAC+rJoD zlh^wAn?!MKK&J!JA<}^`qb3j5G7N3+--tiyIQxAANx{=?g1E)bcJJ@Kz@TYasPyXy z)IANm{9cQS+6I@ukMx%x{WeKYt*3RGhkQGtZ`I6?IDW1^rgZ5^l69X5H2?b-v!pbf z&8(%1~g+vMaS_ za7hrl`Y>T}?#U+h-?KAa8E}YRZ~H zEr?(XvJmq}NQ0a%ynh3B?CTAk^7;KiZw8|xF2VhW4(f_YihRyAEq{F%D^|ym;5)>0 ztiy5D|4vqxpm0n0Rwl-Ssi@P8h zlCUSt3$`yiSpxlr(fRC#g0uYB zr#HaY$UIZ1?`6aMGT(#!o9y9Fj?dn2Nl``~bV_o1sSt5dE<~N?Hx8r(zZ{%U4<|Xg zD;>rP7~1Le;I@{ke4F0Zk1g;zO{kCp@3#+a7|J5{aU#jG|MX$t#t2m3p|s}-fJC1G z4+9+|kby*PCHD#KuN*UAB^tx_MK|QRp|?a9_IS7%c>zX6$gFPYkc7huWN&WQhIo}2 z|H1!KW@o^M(cd)9qhGXU$iiNgwWeNDDL1b*^s;H69L6&jL)B&VGI?#%MlT zI9!zsKz?;5zxnya?5$zwlr1RxtjhOG$(0tj$qC&*3s%oi`W*LzaGUwZ0<%P^fVt08?LYa z;12Uze&cR=>fn9+dBCCbb@h!IWte%(=MK9`<`Er7Lc!A>vW?F}5OusfbR!iibU;u! zdw!N_fJuS*IZ`>D2=ie;>TA|hta}bjWgB$0XO@v<_!yUOJCixpyMw2~65<8eR3X$u z`9-TIUfzV1)ZaZq^@l5el0!*#|3EA--HY1{ANZ(H%22`lz8uj1oO{_9!FGyrUB4EJ zp3HJtQxGb7j+gc{JdGufWv#{^5MnqEN7MR1|N0I7@b9ibGkq>A*~)R;0=3TQ4jHpX z(y5O!5KaeMpTCj??&fb(xr7Xd4{|-Rsd&?f9;E&oPvLV6RntjeFjKF@ zKO1RzLayQ?r+(H^6>=lKPS6gx~AEM)tiPxR*POt8?EJR@eM6Gqxl z_TgyL|s ziyq4LA$^Km2f`BH=9)kKMFzr-ni@|$j;Bc`nZ0T;Mbv=*VSn3D zpi(ogE2s5#2mjAv;nz%VTdnLiDxE(Mt+$1Q2cl*sNWKR=xUmpRfl;b?f=NZgUK}6D z^zNQ@XZd&(^&zsg?*4c+skpOrx`z6=eF(K(y?nKE78VY@UR{LKodpa;epSMJLt-UR z=|dikRiKySjCqw;htY*>pbaSWEa->wqUNGoPS~{4eSr6G9({Sf)w?9>KXPS?x5TA| zU982ZZLT}L#nME=li}M z|9e?3p!-c8z6~NcOfY3gkuFm9&(d?2iTle_?56|2Z{9&BEKp69nH2`i2Gi=;V>FYy z?5%$L9fhZ`WlMz*{_qrN%K?9-U;4=K_RnT9)T_mXehDiNUr!Qm_yBmVP zF};~mpzUm5awA>9Z1Hcg1^J*n-d<&2Pw*u2gj4ZwO&LzREMk7oTB}y<`6~_Tx7L(Y z9Lj$)yx0SB@#{-`7bYjze~G1YBM;YEnV?JNP7%z=oH4Kax+f%!^4A0(YsM>^tY^qzkI4I{=j^WerLg>!Y&eJJ>v-T{0c4! z_hjKuKM2ygwGKOp5-tQ;c!s&6I3N~`v6p(%$*VMz0^BVb#ks<6g3zNT zeZ>1|n_2hi2JK5i8->q6yNc)Z@d7ME$p;C2-3?sFb;$kGeC7-y6=4PgW;YoK-7=@zO6rRuqseNiR5L7Y8hNYd$!20x{NaBpKNFOq zO~qhm5TVpD%zOd!KmFr1mkPE}7;9bYODqTY>(ina+?(OXQzs~EMF&#Kz7H3sAG3PF z(!dK>(X^Lp0x5g60^vTtDRVzzyr3(|!sw^|RrC*pe zo0)8zS#^`3#mJc5lu);#l9=u?y`znE&JsOHzyK=uKKhSrS{SQNxaS=>Bd+h;h_Zpq z?9X~WkqtuF?t6&@>n_(mDZ06RjCylX6H3xF2^z~ZB5MhW;Q!xjDAGO2IZrEE43;=e z3B?^O9VTQrzmH7Gc!8Tn!6HQ1bgC{yAETBYHxfu^oi{FZK@8iitZ5YM zn;WF*r)0y#dKBp!@Mq}W)Uw>b8Tr4uU5mJ(6f`7*(lOAbfQ8lflsMIiy28BCbR@r3 z;t2~i%ku*ENC?+P!r%QIQT}uGD0u^e9hgZtC;p7%H|T8A!~Inmf8W7x^Pk6ts5f{1 z?+W4nD&LOCjq-`w*&M#t#HET~{03w&Wez3wQSX+!#JHeO^Z5X8epuhXuoFeUd z`;mFGs##W5x(~u2(w7$bjown9fKqI(#}vD~Z*`BO=^k)xC5|KCf;wnP4D zWSUUi|GY0f?hK9_J;cnQWYUG917R9Km~l}QU=?>zzQFl%^Im(%*9y~v8-6@R8oXK6 z?W*5@?aWEDQJN2FCBS+tx|5j{{a+m?_+K4I|8^r%QRr>bw&bUSInPPneUFh-5^}_hbr!_xHShae_O`b4 zPE*wX%l{0){0m_j-9%(9HT9pM)HA;MEYlXO9hX+v(c8-uqz4Q_)Rq5}Tw%&cf42@G z(IrLBY-Bqx{pV=EUm*=WQ(UG1y+|K~evfj08$*rytd<*P(Ja#$*@oZl2pAg7nxqPf@9e)R%OkF_fqK#a7H~ z{4(WqLC03Ww@Az>5f;}{;XRCY#;AdVnkL@AY0?VOI~h4jQHK3d(c^9MZtpC5>lXqm z&HcocM`VuDI$E;-`xGRZMb|n%{UTnv*diO&k5*!UIkik5@EwMSdL!2VeU?Lyz17a< z#ozovN{f{}mFd%m4_Dwn7AsxwaV0aT%|V1c|=+fGMvX=63KxEO+bkJ`kq&wFV95Qlmk z@$d22!cpZkd#N!mXDJ}%tRQ{qeT7KWsPcvdYEtUTU)kOf>MLbzTi(c=8K86(<9{NN z;zv~J4>PpKM~QSB4>uCnyEAq8KDL9hZv(BkIp6scHP^K6o^SD^3N0(E!PSx9+m+u? zcvSd#&PZUElTk=MPeG^2|2Kfx&9vACqkhf4(f=7B^7^G3p%qs?mFs{pWu)`(DSmOcUPZC!luP?j2EPCBnBU2`7Oe6KjeU~HJh~H&B>hL_fsve(B zqPx6#zfLMeui-Pa(_No^0lVr>^=0#W@l*IZ4zfC%yL#nkvo-5aRQUJEOVj!LxQ2B* z{f*sP&CXVeB%Ep+!r%kXcrCQVfG}cSA6YQj~`~EEXV&Jdtdn$RoJ~NA|WZ#IUojIk^)1hgmiaF zw{*9F(%mWD-Q7sT&@l)|#{feP408t0dw%Er3(lwWmFpVzv)8loUiVtNRWrk*w`6mK zUf~5Q0;1`#wt*mNqIRushW^MK5SFBRb0T=e;DA8z{OXH(;if;WB@{~uX{)m8FmRbu z?qVwTEHNmkOf&T*<{3RyZR@R~5-HocomHPWRMp|>B5aUm-TO2b{z2&hx~nWP*_j~F z4;H10cuW>R;F1QC^tPXA9bHP7h3|^3v;d{r9z1h4enag;E>_p~qG~c;Dz*>GP?Fu* zqx*zX4Lws6hf~2mj*|f#krduuy22MfXqa5`XMZb`N?pcKymE=3%~Zy;03`IzGHN(O zw#~zfoanvlELs3_uVG3q#%UVYbxdOV7MngLT)DW``tL@3PP~^_>hMja@(kYzs%(`0 z=Um{2MsAu~5tsPeV({q`wLuy?mZdg?N3I26%lvYFddGlQ*5%y#oO37YVEWu=PCfma zUpZYsuMW#tfDi+XLD<(MUq?J5JUar@@BELbe>HI{vs&xOvj z{=NFqLWNc8?sSH7sLklkOiD8l241ZElivBbi5}-Q@8*OG+QFrkjiy zG=!%1z*1geQ=#lFC_r)UAbqUMglxwUnJ^Vb8u9>!zGSim8#W{psppID7&j9I>JUX4 zFX@uS4mw|N@BS>pf!0iQLTx8Y!>)77%_s6MXgVy5xG4ltTS0764|sE_F*NlGX+L(z zUOXC3y@pkt*>B%^Hp-3KulRfb+gv6CFoONq-lxRs_DSh@)T>gq+_Ve6hC5n7=@K;W z*3j$9TsXfJ`5_Llr++JPtMe9}Ncb7qF)yDyy>Uv^e}oA1&VP~cieLCM*66xx{CRS# zI+n~9@a07evHGSGkv#l{v81LOt!>{|dSxv#*dLXWi;t zgbT0YuD2A`SY}BSsxC8UIqg^rf^p}xdDp0?npQ2m8s=x8(QpBpk4{?U)1N0d6C}P&+#(e){NII!5-QKj; zO7#=%Lp)5onXO$45|N?Id!UX|5`7b7Y;_s2@aWQtezl(b%W8lYS~JsKPGyA*2eLAT zApluQ@v1w26tQn%YlE>UJwzf3bNSN0jRoMMe_}<;~JL9 zvXPtixiEXdwhw!e+>E~s<)T_zwB2JKV=K{oFc!{PJ`z{M^A_ggfJ%{{>nD z;s#XC`~2t1)A{`Ta6iv&j*jc-<#4U!(zXxQQmB1YtstxJ0#s=WjQx8F_~T1lT^Bcg ztGMr|RL}PuE!#2R!~wCXREvUxL=l)41H@N}eYg;7}Ocn))PC zQoPiMCBDavJ0Mr)*-qk%_ZyDjZ;5${U;YzJ_j+71k{eJ5xx<$OZVAC|;+*zCG82h! z|LVdXYN7kl%KKDJq~-#l*CKwlb{Y3t8s7SKca;BqxL}eYe6OM;^hov^4SrQ!1r)YY zdy6-EA`b74Ggt)?H&K>AGq4j^q{y+ZC*oJ#-bYJOVC>G;;pjx(dS$b}nM+5?OE29o z)<~JX8plXl{nw>Xk=%}BLmn)x{`XErqzbv;*u#(->!C4Hc%H11b8*aLI){1b(Id_D zhrVCunBSQN8<9;K|3h>v+PMLcxQ?@LL9k%8X7= zingYW9tu8GW1*hZwxmuWM%pz0viy|jG9g>w+nQU<_v1r%Gv3}~k7Zw>L#Yg23T8^Q zkIJ|pg(M$9t@5ZzNr(RK$d7ujE0ZXV`5-mg0^nhs<-y*^Q4#Q%smq6_Aj_3UwGXj; z)nF=!N8~q}-Qa;e?nP0=bk+~|;fxSBR((se7*Wl&^9`!LJNq86xZU2k+@5TdGT;4J z5hHtH7z6*FzhuY<9kE#RX5oNXW+1PaYA^h3@!V%eIBHgXTV~7XWD@1GTO2+c7sMrM z&RdoB&=!mY)UE%akbOISL66xx4#>vJiO|%*YTl50+FS8<0(J0nsg;sBGzwMK-p3dL z52=1_kLp76K@EGt$=zoB%5BUGd3M%+io59TuK3RnrOAy~R^eR~$?*WFimzqQ}PPg_^&cZ-l9Xl$fPL-~5Z(3iO+2nPfy!v>B=jK~POA@*45AbXK> zI+B1rh4kiSHR=Xc0SM8M?~=q^S!Jx>O8pzhvZnU8fHL*XxHUb~N)LRbRD&O-ikFU$ zANFX6vUOsGA1CE!ZTv=&Uu{%<*YyhES9~kv4!rd`+E8uq&XKvKZdBco1}R;GOOssR z+nbOT^87=o{_hEZ4Qi_7ZV5Q&g1;Xw6idhDI3SOf^sm7Gp9dik9NBPWxQS@`A3-8v z9nhSW>%S83|NpE1XR?wdl%A~2E$U*;18#-w zKPbqQ6wbE?oiSO3g%`7YeVgbl7#!Ah|9xaDZ`_N_Emp~}F*xR>=T#fmV>L^*`#Fh^z+mnEh9E%62{`Pkc`p~1D}58WETElrkgxR=y!Ijk4>thuHo zb2}Y4A62!`g0y9HuI4G=CWZHz7}jL(?=2Gi&jvuDopR?NbaXji*Y9yb%?b+)k>+E$ zL$CWDkSzs0Yv2ZSNkchh(xPvL54ixp&325da4Zte{97!fmXup;fOuhTB5ZFEr>)Qi zKdI-!=cbHm!`M19aeAsUC_7$L4gA5VZ1%ZK9)zYTZ~ID~wkmB8y6n&|lVGlf_$f9b zgg)uGR}ypKy&?Vt|7(4CY?#Bn?X=MNEzd+~V)=r?^EjEyb9>j3;>=ng64sIN6j2O1 zJV&tKD@rK%s7T-|Fy;xGiuiy83%E72@O|<*g9QdWo*H9qxUEL5+j};t0vj_P^z}bC z9IwWxj>z;IpQrISe|^4oXIWw+LcJ1@x*-`f-0ao@?!rk`O|%3L)Dt1Cs~EnsCBpqs z@05SW9}bM!*-{zz9*f;E7K@g#%;W~>Afpf6_)uq$OJ0fA$NUzHPXZsk6v2v?z^AQs zw-)GkSXLzp-{8=zgWm=EEQxSNJmHU53lp(700EJVSWp8ly>^(XZ?T^tWZzK4!7&**Y7i zsXE5p-RVe&S9F2Mx#|}qWLa4GiL4dcQj-G5Lw8k8Q}7Kef%3nmKobRS>>t9B;fx9< zl@`s;E?jiAFdBQ?9P`r4mA6pOmVBzAa)(}&BIXJC;_#ohWlEPhy5y%vmk@P__1{Q} zP~S0N5$)lP1Z|Se=53C3Kl}Ejew(@C&vwmP=qbs$zQ;(9p~*$d_fn8@2^aF7uUcj| zfU-kO>6g*B!;PpDjh#smK`)oZ&9F0~@qP8xAq}yY3~alNQ{X+p%4V?Ju{3VX?liVY zQhF8GSJWrxK_FD_U{PWXMEUMM+zD}Wdk!t+EoIx4gI}IQ5jUMsk1m5-NS{HH!Tv{O4gkK4z@UwKtmJXnI#Guv;2Pw`?lRnvfwe(TW9aZSYw6{OvU(P{@&M1-)Q!z5&@dJ~v0 zmRi4oH@#~{!TYV-9m-5q-0M=5<_5mD9Y@nCCC8J7JV>~K->^$7rQwoNpCpvd}nMqvoGjf0@*<1$y+O*xd&~+H@f^qRhuox z;7>~tB8Oq4a>hy=bW`oSPk6}hB0Qtv=q8%>(5yz}J_)DyQGf8S+tTfK)aJcdO@s<7 z3<<&dVjYt9>5Nrhs^H4-l3t%zc96 z@u4v65=cR3JWLzehzNOx{#xq5r6f5&E6G#&z=6?(BaPk^$bp8vv&Dpj0NMO|CEB25 zgZ-H{i)t$C?ovJ^EAkn_mWU3aBk~Ehjc03@Qz1W0? zIQ?3LV(28bsH(><_5C?QC}c(43u8lsYjS?t%Y<*WW=}FwNCEQD@2h>>VBgxLV2?|4 zH&PSXJGR}_t!jiM9sbj7lPcdalXVpvq|#ELgpMwX~oj$~u(%+NsAp%bdjZAU)Ie4%^^~;mosGz_EYE-J$F_bbuuE=Dm^g-<@MSw;f?micqEUy#|_YeabjaK zFIoJbvzr3-DZz|NG*&6NCPJMFy%%Np1>iWWL<+`&S{f$nGk+qSPbx0iM1?wQtS;%Z zxXM8V97Sj1B`Wz*NtJBJ^bf%ZhcxO#Y*F@>uqn^Lbi0}V~0wlM9j`Jx)a~@jB9!T+wKkBkm!5Y;G)69VNWgVY2Q!jsl%FNQxrB(-b#v^~THX6)dZ?L;duSE^J*b8J~bg^8FCA6jBUcRTrm$OXY zU7f_H7Qt4Bre*i@D4X4EB>10h9-t0YB=pag{0K@(3i;pWK#6>bgix4V34T5}-c!e_ zohV|+TA71p*x4|RNWG|4`oOc~FpW;=M7zW~Kjv)jU2r+Zf$&7k2mJ%7l8*&bdw8+u zm}Ul3g&tcAFpxZlX=#aIbnkDU#CJbxSp&!gF!%iu@%Vl zC9%iB`uJI=k$L3D9s$@F1v{%2;j%%aFRZ=@qfW}w6}fpxajusL>wDfRH8bj}0N2|0 z3&Mq^s*Uv4u@CTUp4E^8^`~WJ!~&Y9$NjdYyu4e-??e_JCK>%U>yk#VrnMhMeJ%{N zXQ{BJd4H?lve@2$Ob!Klyj9=a%zYQ~9yT~v?4m!Ps9(@6mVLFD$mUm^r z$04oki_57hAMw5Q&B}f3eW>5GBYblQ>OH-nY`!a8he-yXuh8jjQg}g1!}#86?*V$n zjm1;#k`%Su;nWcrNh=kr?bGc|@PP4$i*C8+D89zDhM|m&K-Zhl0z2%@CMjbFgt_Tu zZA9x7Nr)^%uFLqUh{p^T4 z+)7=P;rd;~7;NYI>SLilTf$S@3W&gn7*b?R!Arp)3Z|EFNSgI4;7}VO-mo{~npN0y zW-PaJi6i2o;h@pn#?r!9vq5r)(RfG0JJvpL=Su7puiwbShjay(e5j%3oQd++Ce?(2 zIJ(VgSb;Kdk4nF?+iVm{Z=;Kr3dNg=8`Pbze-c$yV(eG-8*G_PhY^sj$u8zZZ@z)% zDq+H=nq}99#&?~rzVZnga}>J~mz;~I<%*jPGFK(Pt64Gt_R<`O}Ye4=?%+EKhK---)0b)EzZYWNIFm9kRoX3HN z1_x1I%nfdO$e6g;jNXnkOLYvh-hXGw&?Q}5#b?fYEaX;*;MsbwkfLw5a#hjWa1Jp& z8GZYhOjW<3ZFg^a0N%+leQxisM`tw#x=vRLm=nIiEd43m|4W`rG1R+08>m_)y|$xQ z`krh;H9VUG0EJtv`<}-D{^kyLQnP;%ei!T`ge3Z^GB=>mauG9N4q2(blcJMB>GL;r z&?9&ti58Q?$QPk0L;@hg?#27+G(0rjN7&1_*+cUHTk&_{+fv8X>AwPLJLjde0aU}q zIf`qr`!5o(mEV|DU?@9wx~oyOUH1=yqn&C;uZCEGefFT79o>8Fpg4n0k?H{2tJ~p` zoYKp(NS0yWErO}Uup)0m;4e5Ku%h?szE;N;BcMS~r})GVGhJRCr~5oTPWNapF)oP8>v%8w8v)5gv21Ec zDg>xy3XC_gSf?3S?uhuBk{5Cn-6fjIT{HjA+R(^&zgETX7iDkML)EqUll|u2c~5$? zAbx@*PXQ>|?l6M3S)jsBqLA&7>VA4;_x0v8YQLI>E;H=1MMhWP!qVX^l77Hr3NiS@ z$sU(vm%Gp_|0IK9;$X!Mk-#+TEIRD?2cfxyRfwumq22HPq>kM}WA$1K9{#kD!#nYh zdr#wGF*1Bbmb}BjE-YTXwuD~?`2Y2TBu%ZH|Kf5|BOZ@S$y0?Niz85yUC08+aBcum^JT$cl((R{4?1% z;D+vsEd_SQZWa71f|@`5wZQ+ZfZIfzU=2PY z(Td3Aab91s-UBzO&#c8K&**JH_o8y7T3!AcID=%?XK*Kd#TS5QczV#iXRWXe#S#Z+ z;tR!URmDsioP47@p2lEeDGlM55+Cha?CnL9<&mEqKacT4cS&qLkLe0^7BM+cTkEe{ zxFA^vFDiInb)jqqZ9Ig^b{5>x8L|7l-HA+Pu9c7@6_k`C6qKBJAt*6Hv?4i4vNAY9 z%osrMN`T>u4Gk$PZ&Ww|rTEK%));q{n-0!_uyL{2uWQ9p4kfn@y(Wg*#J;8LMjuoI zT81JqIPL;n(XgzKC0eF>$~+bp>-s#!#3l7SPeEb0`ZqPc7$U0ZIMBFb$!{_yhNc?a ze#zlzkg}Q5!$_*GD;bc;n7vFXRTQ?bJ+^A4!C}hw)Ej$tg$N!*t#QD(d2%XL`+ET)j#x0AbtNA% z?uuemUTo1_Z$o9)icC^=p~e@!tkAsG3d{K|lb_V8VgIG0L0r-OSI(bLd3Mie>x_y> zIH|Fa*6wDgC1K4(EnXD9EnX4uL0#BEBcO3jz9VI1dn6bQ+Iu-fC&l7S_os&;HOMli zcP3VD8`eaPJJn#{hznIpY#i6z9BNt99i-%&E<+XqoDO>?57WP`X6bBZ zHTv7+HC!2`;5<<1cwqD3&iA^>5{SV+8_WK5!O=GQG*g=fCOKFLY@xaDypPYz?dFy! ze`SV-E{PD_+i{EC=0tSAR`3N_gf9jan=3xIwdhf@y3p}72!j>~_{gaAg!#i9dJcJm zMUvE~MMqmA(WEFwcC?BrH$R-Ipn?pH7>wc!t0m#;@(@YYspPY$U4V1s{mIo%n=zNY z567E{ieBxzr%r7vs50b&eaNe%6Oqh#=tK`DH9imoX(QQv{t>r@8=sYfiC!d0 zK5TInBT}3X-hX|6>21X5;`J)5(*4xF^&%^~7)osbdeh`1Pr43c)bk#FH+!qTXDoM) zXd2FzcaFuF^SIG)HtR}u!vw6`|J}HoAaZ33CAihZ@^Uv^a3qV-@b(#aui!(M)X^fV zsQ8^5GuBQ$A;+O6@M+#BrEd{?Oa_F-C2Gj>`%~aJW^pFRt6)>sHIza{&E%s2<vP=%q4&+N6Burc&HEkf0663z#$$y~`U8=);* zVP1~pH*%@lE-@)cFa5MP9CUd-=XP!;t75MGn3*d2a|2K~0J*o^-*ibX0d3*1_AFUp z16?t_?1(&Onk~2)tPClL95uHmXR1gN~ zUYHr60~-A9yRKlok2)H(L@yw0ScHh)OHs!SS&52ekEyU<%ypiKtiXQh%8*(O@+bAM4Cn`>NqziJez#J+sCac0ENJ6@dT2qnvS_sJz5agV(ifnrr>K zAUh4XeXws&m5n-Ro|Oz44DUTZTB#CNw5ep=?Mxrb~hhPM$?v*P!4F- z0V-Mi{aJz@Qlc|vwYmFKN}`6adQ4Ob3%XDDq7nS1ov97z#SAys5-)kx1X4sZ-f2!O z#S0-6vbG)7M(f8;4&XjkLJ+twcrl39P6ZzNF6jNYf@@y|x}*xuUe5VSL)1 z7*N@nWa&J9n}LBW9%etLMJr!sall7JQeF^pR(vi?iRQ2biXV(gt}iqxS0$?}H5I)q z8O^KPKgW1TK>usr`nM8dl7pz2<-2Olb8%i0?wVRc$!h{Q{+Qf7KQ$Uj1Rf(R1lhJ; zAkAPsvn7zm^TfJl7)du~P)>^`{}t*jmqVIy_<1*GD0xvW#Ye2|?dc@U^4puS6&F%L zM=Rn4qHkx@8DaORBUGDY_kzQSkycez zRFlP&B(vus1(O9cIHqZnN0~zW1Ji~~bU$uglt72CGGd!cTETkOc7Q07_CC!isn z%17Yx=$S2H+Vn*t4%VWkH~b$@4-UM&54qnkfNQmr8}>+TCv|R3bGM%0sY{-7L*vV+ z^$B;)j|KjE;zM{40Bl~Mt4aYS#}<}j)G3F&VrE>Mz zs|rpg*?v_jd;$?ikHw+?wQoIoSl_R`^UWJQfzM49=>Hl8z(OZlnVeVXfWCm?zEDf` zsZbYn(2WS7CfzA@r1kE*sTowMpU(YYi+&}*WJz*i}PIz~CjU(*+;?8i< z0n`>X8U02sy-s6zrH&bguqq1!MdM>S^@RSGrhTw>W#Rd5EsRG;j`4JGmH`9x^?F@r z+zWJ}i&&3(dku*)op3&L0X#7GJ6e0Dpm+RN3zhPj>8<$>ZhQxB3mE?8TINTAU{%Gx zl_D4id#ku4gwqD7wk84LS_dwI2MW@6(~)gMZOG0iKZl99C4da?G7DXy^qZA(3dyg6 zaU_rTX)o4qKV3Xr%wUT&oaQdaIC-jMZBg4~w^Y zXHz)rQ?jk+XBHo>VQxr9hPw<6kSL{#8EuPGA8T++jjyc|nAWE7LoznN{EAg$?ma3woGtHwdWG>Y$tda?_t+FT zMcyFcBe{J*ta?9AG~&1Ak$2TMA2YmiZs3)~v{0G9jCH%#h*D=1%5&;Z?yzfSETeK@ zF6^7U(80aC%LY(fK0au42o$f&%q{w)mc8mEt52Yt{)^CjM zK#(iZGkTF0cbMtmZ1v^A+0oO3hYO*S?;nH{Mc1;zuCXq?eHr!KR}xGtfxUk>f;L1O zQM;lO1J6VUQOg)snOqtmMqj&SM8e6C6+$#8*an< zDQHjuY7;X}RSW5C$zmM#xz~s4|0*4)JUrm6zYFiW9cy23am@A^-ViVpDphVwxo)&A zAGP_K&?x}A$S~6TK+@x8T&5#{nqIyiU||fZbOr@EQOGFr1t+c?kOqA0Vs(Y1vNQ={ zNF1xpo6q13$xi$*&~a^*aU!!LPw5Vm&w8rGikwI7qM1<8IN+gy_n!G|-h~o46CXOW zX1J*&^ZGFT$`bBzy60c_0g?Cc#8a=oTTU+X`jd04X^!&erWLBahlK=&MMd2mIIb=g zA7u)^;l&jRHOXjiv{raPQQ@a2HsVBKv2%Jyz;^8Jp39%=y~0`Ufy76blP>j zPr26fXHq9$v$;7jLoRmlAIfgulF(1WoOrn5jBUeb4PL)#%SzH;f0ed@UnZ#Y_VgRZ zqQh%EBfq;~K$CE9(=ZCh_907xM=>Q^8GY|p;nBUG5s;g&A)6TF5ZIBS2!8Hnt| zJW#e1qg?zrMETj*K97YQctW6%x88uoMRh-x@78o!_m3gq8!c_QMW7uJJvjM$iW@T0 zhNs~VbI=aBxBzlJ3Q>ONpaggocX89Dgv{Ch{TQN$bds zhitHq^kMX!r4faVX2*I;9k`a1<-?@(U{!wMb&?4BLa#AzDe@h9@dVsv86jo^kO30B zw=M|zl8g5&c#nfNB_#N0hydBHq{;Mr)N`7{2Vw>W7t&a3YIaPrrGB>2@ol?NJJ4dy z8o4H9{loGK5y@+fIhhUSH^;WW!p~^uyjiK8|}G#=EE)gm#U$wpMv4Y$Z(G zl!2`qNRN^N2hB`QdbKD0p#(fH#<$O^s4#FTJgW}f=J}5ppQ@}8&D&IotYP$;Ta0|s zsM8QccP}+#J^~Dt57j2@0FslQk~639!=c3^9tDfIlPhv&ra?|@E13OR+}g0^8# zcpBKzx>y|VPmIjgq~YZmhr9fpqbC9LL&;>RF-gdd85Jg(0qh{>^q01AyqKjp`u9XU zZpc^da1uU1j1h3G*U3`!{-Yx?N@v1Y`^U{-(C2_|i=QO`)o9)3d!8;P4YjaEWQ_Qa26SzF!J=gb~X>T&Bg*1aV z99k4a48fqQlGro0Kqk1CoqS}>`|?z*dck%xr<%@%V%!Nyj~eofhb9PjE*RD2bw?nT zfy{G|a$4>6^TLC@=&s|S)+b6;XwAo{kZe0Njy35?Z|=DtEh9{nTcM&}OS}vEGJaIt zo1_bOJtD~q1~#Zx6Z+B|Log@9FXe5b6`>Env%AfTO3I#Y5vrBKxHeLKhewFiRMh>9 z5%panm{TZ)<7TA(ZN*n0?YO_;IzHkBL({|$vXL68w0O^^hIVv0rlQJ8HeJwf2!bXt z6!M%gC1xmp)|vU)UCN1b%`Ev)7X5>;S>sI~Xvg?MR|yQ4FouzW`+StIrRcCx-*Y2t zH~)-x!6h1!GW(+^p3jh>bivS5jeT?(5pUj7mDSTaG}sV1Yr*}=EO+Z|Q1c?6s^Q%| zeiSJYQCZta0{_tMg}Mi}nhvjE3Q9^?;FQu%$HZ?M-^{HoB>UtyzCr5svPx!_nT>q0 zNMQv@(n`QSx1rh@+n zmOWQ7FE5)DhM6+L+fPL|gups>*!Dz=x*W$+RRmV01Wv*G%+#dB{-=Iak{X!V>LSIw z>V@9|96iD`HJX)sd!NV+e6WQG@KM}(i8xUG6;GN}tG=(gBx4qy?H)|Z>V2f;70r!d zJVUMZgWyY15PUp9OxRfq<9gI3wRTi{BN;jPqkR~lvu2`N8q6E}*k09lvQFZ;*Cp>< zNhHxHiB)uZy`4M2nzo1XjO~2ojlt{oamtYW$7XBw1>4nwA=Duz-*j%h;s(HX0x{}v zM|+sQ$DTOFr^?1o{Tb2>QIXtIQ9M}wOj-uHn3eFf_v$JK2ZMBmJ3W5n{XB&nIAb_w zE}x%!f{Loe4406M^sZusiJ(5}2jFhW-MH5>1}69tLWc5N0ee;DMYz*sYuA7R*Pb04 zzV<MIXJ-86TSilHBz9` zAGYRxl9P*~j3nd@Xh0v}FgHRp+x@6&A_`l-tT}{NH4N)&I3*1uhfR!^%-o*Tm73>p z_&|oxDuvz5#414LG#3Yxtl7cu|4omoL5+$l(UETRvLKak%ly!KSm)E4J{NNIOE3nG zBzjjz%l3^cf6Q-{A=e6tXD5}ckGW+y^vuLes`6+e8k-8*fgs|=c?*+~Q`|*gdc1S? zGRB9*YAwRIit#_3nA+)rXSBP+BgCD$SKWQ&`PuX%Z3Eqp(=phxZXzm=gmhJOtXafL zXhQv8Dd?|W>;|?69vmRW=$P%i_99^-OWppGxzB$r)$U;crCM2C0x^nzpLtJ>UMO7C zZ3b<;l|He=*5n-0&Y|2!x-}fz%6G-7@ zHta0;TU1+bUJ~((3P?c-DAqBIDt!J-%T>ns5N|$z0YSr+Ut)n{@}Xi$>TuV4x=-fa z%0Ch)2)5HloLhH=o;WqtRB-F=fi{K_==JQDgO=k}@wI4@Q4EoK$_I^u*M5EunugzR zI?%8tMv*h55%E>e37>uZe*JwtHnK(giyT^CC%|fenHPZZT*BbeiP+32Jbj1NSW?S+ z7icaAmGI(xgePh#pqF6G1pEI_o7e28ZVSg^mL}iF|rosB3`A~EF~yts1%O4qYl3~ zgcum`HVY(-^a&bif9{aw{_a#$!fa_&^|k~5yROmd`Ziwl;hV0lHrBESy*o2dXIb&3 z8eV{~uN&z+@e92Y=Kjr>nv6<*R99`{Iy3ftzwlTeXCuH-IHfE8x2H6?UKl&ZZ^kgJ zgpS4}{S%l@fHlP97`2?&U&!wwrS^AFDe=zhnfW-(N{xrsH1uz-S}i|WHQ-d1?`)Ob z6sF_beBJrB5l1?RD@f@V4V(E@nGzlSi>gRqwUW3~A2A=WLT8_Int6s7@}wk# zeE5MFn=m30lRCSM83|`$%>DhVxRIVavq&`@^LN!J{&x5(7zoD@f3e4=_`=#2`z$?; zrlj*CZ;Q%TXtzLlvZ-9O|VB1p@cT?>wY2$w4@=mrY#RnmjSgw`1Y!|A*jFc zdxP(QrfB!&#~J`xQWYUnBxL5pIo^hl?s`A`r|6&TsP$ZCv0FhWCh7?lUHnGV`PnjR z^7;P6QgGxqA$2)c%^|FxDX(mX#vwHB`oqM1hMA4UQMl>~v-W_K!C&qg|Ka0Kb6ck3 zr{F)kncxCc7y+wY8@K=*5))$>=D^kOJb%OuH={~WY3p(d^}8>>5bjPr)D}Oqn-fj8 z20kpiM}+_v%sGki(Avog<|Uo&>sk1IwwzYTiQS}lhUBtXHG0^CigoMaxL~@QH{QzR zJ_U@^g|5ekKAdwT#K@@?gS~b3*$iTzj2b&hc;1_Yn`M;TN_LLBX|2_RL%yR`_@IyQP3>QoOKs}Cuu`}E%P6$(BA_B zHcj0>vVI0p=!_!)W$L^0C%0O&5`l|+pS$q2dLQ$wgAG82PwOr77H;*eMH&)Oh*~18 zx4ux4End;Qc5Q@ZIAD@L)41iTtkticODOQHc@_S!NX@Ha!BOQiHtQI=(DT_&I&7=B z-lgbbJ*obI!FC@YB1ncdJom=wxLCJodES4IDT90B{_raF0WO{b{>xTAS}VRty`lz; zAMCTzM~>8iBp)5WrxI)7X}NS0AI_woed-~5&}IV85NVD4UE1zfY7|V@xLb=a90#nL zaul*!YA$^S!z0H$gY|E5%=TOaTVvp4A8Hbkv|u@fj?tzH`EP^Qq z3Ir;-fAmmk97_7TC{PG>a$*%&N(8iXneihkcKS5YwJDy#TL4bAs@|W~Y&+zP&wv-5 zG)wkyUosaryYG(`R!#N;AvBtryR-gTI2vx6W~05LCLQE#64*il?7@pScGaojg)ziZvX|*zU-}kR}jL&5kvio%0r{c7_ zFBlH5fBw0F5UUMx2KCfZNa^i`ev?O%LOvA34T!FN4sIT3t!X0({A^xXWX@y77pt%# z%0%!l#0kS{D#+0?bVijk{f3EGsKSSH&(2qC0u}PiH)&;w>*W2y^$paj;2Q`KiwpPs z2O6sI!W0%aB-#CroIBU1;~^`e1gcPe`p93z<^{+RrsFSgBD-SPTqyIK5^i=Jn1jnU zU}s5G`c6$0G?~4FkS7Q1>*l4V&l));vsP%kz92dvm<&Tjb2TZ%%nS`kVoLL|*fkn-u$qhXsG){R6#P!D~vh zd?YxJ1XO-)Lb~$r7qSX7Bv0~JLm?boOkljgPjFrT)ishALRtnNs|u!_iu#wDg7IHbi%0@2zgIiPFt@WCDEO5t ztMGn@lDznPkS%t}&OaYL?1ZsS4P$+_3|rRXXyHj(1qQA5-R?xtF5ke^R>?+g00|r2p_-&|UE1c>G-RLs?PFgmN@S zu090bLVOV`q!HWDn6-Y>wI+~UKjdI(S;xLNq2gQTJPHb(FkV^KcQ5k$%h5yck#J zAS>1g1NTy&H3e7qQ5JYAy0@R)}?v0$af6pF|M~e?uktGKwT4x znpu4e;*hzeMb0(Pb>9sKcX)ut{PQlIEatq0fgNT~_H+}SsV*H%m6+AvC+)CQ3CzzG zjCTjG%Jf*S zpLxmgs8rxunO&fRpbt_fw%u{i@1!5CfjQcAP>&);8Vpyk1b_BnG{g zxbJ&JxL#MdWphf%mD*F;Z*W=M@0(X)=m+|p()E1x?!s-?HYUXs#U8ctpF-qm z21mSKINNBWY`d=Fio8R?Ym*KHvw+aazav{ha+ZHtLJil&W-v|Gx%(Fpd3znws{C{@ zNQf%7wvy7&nxB@XL+5_U>#j(hE-zMOQ=rIiJtzM;)5AULmPdPP3U1Oqi837*gCif{ z6ZZ_s3l0HGY_f(yAm#XWVm5_6wmW|0v2EZ7#zR$7Av+ILkOk2hSMwYI<1%h?PVw7* zS_L z^sRC?29gy54$^yh^94m%3Th?T9Ol(}Y3sG9@{;%!#!vgYMam6VbDm>#_R+-`oMo%_ z2JeEO{I~K|MBd)m{xtVokYq_$=XvXVrQoLmE-zrNxQFQNk{TZAMtwEZaNpv)3y>s=7vaJTNF?Ksq^Bv@^Nx3fYJTX-!Bu=G|Led@=rkCYO9yrx=6crWy&wTi zAL-+5i|2d&%xqGI@EEV$i*m15Rh;OywRf-Na^-@NKkp$sG4;YDP)4AoY}ifJL;>>iIqzqS|j>$?mnp?Nd#1#$)q z&e-4jZGD7$VU;GSvXKohclIT7ZR$p7Pj!=3G}*ZsZjV2XkIZ0;QGt0H5=DwceBbC3wl`>*p1m<1oVz5$;+g{`Fb#AU0M6(e~P+ zcRhoqpkDTR7~Z;`;D?p7ndoz>*$5lC7=#n zJl5y)Hj^nr3IUPtDqK)nr=mOG7X^-N4_R3uHlLr;WL2}g^xv0X{9avRkMHslNg3TE zq|`$0owWZF|JA2mZBf)!!V<1bOM=XF0e07CB7Ed6}u^LXOqM zEU%~;$PG~X6*w+A8r1y}?G+iF(*g}(q8m%6`NbYi=TdJ<*ykjs-@{O`-r<>C+lQeS;dOKb2G5 z9N88?{iY6aQ!9-65lcB2Wdn^7_2V|gsKpX>a6A7Rdu(~hek`j4{`C6jSj23yv(wnk z{DP9%FKQ`s+I*~X46mSDFBKkCcV6YqMAsR=Zo~n=Jf-9Yn16wCx<=hFaLb!SWHKwu z+ENNj+EDW7qnl8Q*IdffGkV%)!zhqicPva4Bmtdd10dAlW{jAYQNT-h#=flAMVBow#93U&-Q zKFBR`L|X#M{#tk?Z9O3~y~bzfE!?FO^*IZ5G%k1>BB1$igwRu#fxpwu{mSx@Agt87 z`TM4BqHRBD!W`edWtTA-%yZO_UDa`X?y!+y??#E6To$c_`9dIrf=3h+HRd1Ua9z~hhya<&mUIe1Kg97kQo^c4MHbp3TyRPXl&3`@6k$I#tU(%lV1 zHzFYjsC4%LL#K2LLraG=gLH?4C?QC9$9w#IpWpk>vmO@f`~hpunRDO!-f``{uk9ZW zkXN9`@TBbl=`QzdqEIvF8AB_W;eZ+}g3A8A+Y&SKH!52Yo1LU)qNwVgHXD^G6Y`S? z{6D@6+bU?3DBMXkW9^+-im#S8XC4ysX^^g=%4KrstqAzPM#_H=!~E}I?YGj}F^;c| zu-Y1k6vv`e);J?xQ1jol;4uc$9dIP=7M?Ou;wM#Mh!0FuL;)&VgIqa(o?t zo$8M!+a-mD#Khk5Db;u19=r2US0Gzd`;*P^T5WnCsqXiZPmoo%LY0Jm_3q+_?5oXT2oLu zIrt0E0St&D#+XB7f}lG-_{R;h&D%qZ7P{Yj|5j74&C1CN!VREKf8^QJQTqLQ{7y6f zb+`VbiXyWwKR{F5<}*pq@k5@etp0@{o}y+ z_pn)=^6KixSxS99y>n81bMr?pJG*TuVq)T1RW&txB4Xn4kv3cdv8xq zx86yvau5H8{r9<3L|@cJ8VNV&KWRw)UuDt4|CHfikAIONRAr;BN(3tJzUM2ng~>L! zQcE`dlt;Jnit}RrzvunC!DJ}1;stz6%vSiV;gBm^or?dQp}(#qmoi7`%~s!PCeCZn zn0d#y{TO17hp{gM1*pmNWMtFx!}R;Wz-OSF87EpUbl4#S;Af((LDv*xre&O6mtyqN zeRgjXL)Bm{mf4IQmg3BRkUQUFqwRz|08`_TWIxp4zATHZ+1B{q;r~x&d7<~26y3kS zFKN6!W_iz5)Vk%rBCli{qc&1JD8|9&Zt5O*0k3lX!lg`kv0y4iW!;6GOlw3Vhk-$W z-Xa&rBnPyQBZM*xC~OwVJ1IA^V#SgMp(;l2D2@|lXd2T!O+F9;Ok<+Gy}76fS`uxR z$_sHw{jpLPxID}J-XDl@vh+2dtSX7R{9hjY3yEV2l`zMLG+_)82vsWF?eFk3Cx=vs|xURF|9?gDDn6~j(M(|0IOBl1k z)GrnATY82?zKUta?b)7_zT~H3&+8PPh<742J9lr;%+Av;R;m{RJPvmx|D&$^-y3Cy zg+X3MuVe}{zWsO=f4ic3NJx%Wsqva9BULNbQ(xCc)%rBY&KL_n(y> z=QD=!{Dn7=WC|i3BnEMjKHm3#Hoe`qmeBcJ&8o_A;)PN`26W^E91aiSGKKC%icej7 zKP7F)s7@bt$&2<+Dil{x98zG_%PMQNE!LI5TQM6&I%zvhFd@l(%_GN47F!AOpQbsO z<@2^dK_MG8qE`RfZ-FFt9((`oYgxCy594b$4W(_C@OR=RPYL(5f*7()3MYEqfA$|y zuCe|nQ~zCC;W5Npqz!EMr9P&yqXf-F%PidD1vgv%S@|Zi^~1Mm`1@Bi_kQjpOG$)M z5=vc6*q?Th7}?2-P!;s)2TaI|aAQt>q4x`<@O>OSNOaJ7HDSEb9}OQw$BZQC$FWE8W>46_ZC*#b)C=-38Wjx~K_e(3hH9<;ZemW!pvH z|2wv;3fd*!+F3VIiWB^Z04GnTkjBGar)`n&n`cPe$RPm{7ZYcF#DJRF2N@UO$fS0Y zy7>8Rg?mk;xZN?oZR689)3n8O;AKgf(_{{|H5n-xS(ev!@X5jOQ{n5;tz%+@%~)32 z&P2pM6W$-zU?WK!s*GHZZMj$PQ(aHJEA&b=Uj@m2QGQgy9JR`$jTk^rrc(~zB?P%u z8!r0Iv$%nJ{vUmO#4MsH&Vu6)D7)Mw5Glup(sUHXSohvn0}6V>=-+d#ab~IkeqBc$ zf|Rp~_~p!RulY*93(-wysV?bCpXTi_>av9!cspW2J8^s9LZJY-ndN3XlmqC0M_fP-dl+&AM)`}elhZk1Kba?%Z zY7b$ya|ZM7@)*l20>L)de?)tBabNt%jO! zJafLJ7;U!(0`TrKFuot|;NmM4ndHjO@-sReMoDdLDi`8@EoFQ6^&(&DiOus@bgmc! zLTE4E7~bIV-Hg#4t%@8H)9NHYRK=PZ_Fy7cv~5b<^;-k}|8bZ^Dif)atG53c&#R()6lkYd|W`x}j?A5M!A>V%($JY6ZB zW4`!*7S8ddjE;@Bc8PL}n*S08653nY5|gakoPsub8Ogu_%GrUmv%mUo@%aX`@z0ej zZrwCfE71T&$nb#k#4RItTLHgk!!?U!l`Q=m3soJLhxESH&m5kb_Z!DP!kN){*fG1& zc;DFNaZ+VrwctnY>uU8V7FLr^PTP!}1!eywl|dbAj3RdDyzjU%cvwF(x#1GeVY~as zu8p<@$#fI2t`ow;wnC#A>(2OpF!3R2ve#&E!B{?0AEwt!3QH4mJd1<0H0m05z=++& ztu-BX?yvjF2M(x}_^NuO?9qFCCL*9CRjpt|XP41TmqkQYv;GUF^(D~1)>thAmS9;_ z0DO}=M78|6C;-ukl)N+;&`r=N85AYA#-%N%jeY~8a})MPZaQ6NjfZrdj|0~XPb9+F zp!dipFM7ogeIzmsb;CZXw!80G=7}Ev88na3&y%jr08na)>3%y z5aq$%u&Z&G&%n+~Xj5{<*T(EMrvJIsap|;l@u;%Y@JY3-&^NG4b#=0Xx_$yfwTz7C zx@+L;S-7*)Jm@tsz~}n;MO80=5mK>9Hzxyki<^6SEzG>KM9N$=uK{H>Ld4L6#(O-{ z!$DY!=wBJV^OS9!iK?<>7zr-+IM>+_d`tIACG3ikQ5v&ivb=F__Fm$# zT%72!1hM2!jSgeRd=HaNKhliWqnRkZR~IAEwzLWZ@0-TQ6+1x9jcRwER6~wG87e?6 zjWu#WV7Q1O_yA$JyS5r~Rml~5#=(>D`jdij)%rb{PqHO-oM7kR#+<6f>Z=I5$Wp77 z(KHVg&c9=1PC&)RjT3{1&%2PA`}Zmwn*qeZ>QJ*J=ov}&+?TO&mbXauDl^S-5p92I z;1%{Ps}AKyi&%{j9^PamA>iw?9@r(fHYFA<9I4&1IgRTrt_O;xPxTaFylD|g7sQ`2 z${*o%$?Ex0Wa$PqB2BjfB{Uj;o^R%lAE9`q=YKNRQWX0f2Cs5&bSGA-SU+6uXb{5X zQ*YRP)I9u+B=^yRnk?DyEvGf{avn@HtEe3_QL=cpId|!DB5JFUoK^7qLj?h?5vCfG zbRD*VEitXH*q9Z_|UwmdUws>G5;Sr2oG*8Rwd4|K2pCsY~);)XfIRBVC$&a(RUOIiCQ z1j%%SBot~AThPx8T|u{A?xSJH(G8JklyK^ht~F=H%A_61ENfBP=PJPMm8|%69$RwbEwxQWw%UhYdgqf%P?3} zCx5?GEP)Z7czX6R5+2<*-7pBMed0dy-VJaMJkE#{N)Q@%Cz_?l&P}~P2CVHd4)*Am zV4=>Sp)ZTCPyyJ<<&ks^Ql@AkG97uR8+q#6M=(g<%V%RC!Y(OZ zSMsGr4elji9r8fV0~=C=*zw0>`u}B_J|1)(PnAlE?>*YRA2#-A0O`HYrvqeV z8Wbo`nIyw(a=c{2af9~kuhyEyGr?WAqP{XM!f6_ZvYQweb%u1TxxamPZjjf*p zqp1UC*nQ5MTq%MDl2w47Bncpe+m{s^HNs^v&vzh5@zex(#Z{FGg%67K)EmKqjXr*l z>=)2jt1+I#X|{zlSJXpyCWcVj9x zkya*oD47c34yBTg58&`5nw-Rcrl6$zNk+;NBe${(&sXGUT;@H=oQAAmBH7257MDfa zD?M;?Q$0o2|K(8+q3CItaC$>H$?K9?q4(u(;Qa)7My82=W~S~Nv0sy4Nz+lXyQ@=e zgx;o&nS7SK%>Ju}dfl~mwYgw}7d(oso(^dYe7r%v)Tc?OR90kO18e-H- z7icxF5?hRig{lyn36RxjU1#&q`BwU&k{^C;&k*tp2Ml^oAQ_uPtCFZIRSI(pYFuyr%Gw4^y7KUuq>wT6{|g!a*PP`u#D^l6FLC98a&N zwT~B*ci;0>)@3+)wpXMh!$QABc)E5@w+3FJQj(%%wk4o*7N#2L~dg zZx7k6M^D#-LEFC-I=o1f+LE!YMOmMEJG98ilCS?3L=!iwguGE5}o==s*bL3A`a8{v+g z`We9(okZ44V5;_5?%8GOVh5c($`V;u_F2DY(uwLa5?S0?cnErEKfK?DqzJ1MN1?8` zj=j8yrLlY5;3+^a7XylXg8`2W%u`8UVma1NE3abF@M>c&Z-YsGu%H^H$Nk6{edal-tbm@5m#dzb z>VE!pujClM-of-yR3cYu&E9BXRgPzsl1+12Lg4{Kp!UalVVVch4)`WR&}b65p+U$+ zooCifaEVMUwS-<(`yIx#Qs5i1aJ^D15>0{Ugi>>Teq>adVZ61TeHFa5){g*3e6_m& zho777Dn6gd3R);z?c21<(T(e>Q%OoQ(v+%4%}(B}E|V&CouB%gz3Y+2x>I}i>_{D4 zPZ|FEDdm(E@L%!Cu~I4h!hQ^(SN*{N)7rj;l%J!;&Td&tE)Z?79#DpN^>FjS3?s{p zVm2${qx!wp-s$fR1K2?~g?QVt5Z{yz5uSxn#tR?!`A*wOP>jY@{RQ#W3mptR&Jep6 zG>B?2D=5tKOHDT(i!=a{bf%4ntOpY7bPc=M)#BEsjKdG+F#-j_e1Sgm(OstO8xJID z3O7$C1b>COrHW=HN|U;fM(shqGDrHSt}Mg&9WTIzPqneuWIQY)vKQF#Br0%zR3Uh? z1o|sNrAeZdS|9yYRw@2;`(R@cLx73nIm&UUz0GK5Fbi7;$%hyJj#F{1b>$z#b;>)f zh83T%mU(Vr_8}15w;;RH>zi&bC{>;M$AzN;`Xi^|?wE;9hEVGHk^gqSAYVSnaWM!M zqLqd|jrQh3GWA{;&IOGlYC%(o5g$PG?^*QYhu`>S^{%qWnd{a6WagkP@m<(ev{K1SW8k6{dj?Phac=|B2WXnSqiiyW4 zd4UY+!uaQT+|Oq8=n~U9yo1I40RI>NR%2)oOA_M;7MflDrc<~lr);21V=yupUCsO^ zO44$h4j#JSHh|xhr7PYHrYqeBniKu@nhYIQ{1p>hGGAv>%3bDZLk3qP6EigtxvXs3>Tx5@KNK*Ob0g>i zoiyfDA1~U%>M+_>gRuv!lfN1S7pzra;&mWH<{Ng0fVdB!-ejkLY}Z%3fBy@Xut3bN z1S5PbXPmL8pFd;@jV$a9`EBiiF5!^e#Tqo^A`}3j8i|tR zwnzoFbpunP0&N!bdDyVWtl=BPx=Ye{ejz$6eA5#WHJ}v6|i3@z$hh}>LsLo zvPNk#&(9OSUw=Lf%oZ0|LXy`CE$(pJz^5_K{qwG|7uXF*s{AYB#)ilSU z0|m}aD?^l`I|;Gk30`P+W<%+fWm5Ks{Ajfaj@*0`8?lp#Gs!}J7QRw+m84Z;4$sHa z-?&L(ldpHEE{fxrWDho!od?`mjOdy=sJEibQnci>^cF#XUU!}d5%)M>l|J77ne6j3f+sdJg2zh zxrDrhOXb0JYA-(_TjM4IXnn>0tMf8Y;7sXrO4Qprwni}kLGTav>P6;Gdm%$9H%Pop zTGQlv|JB0u@;KO$4RHrTGXr6Xnk4K%Vi+7NaBz1$5pdr-seoqy!!OVZg`O;Tz>2pu zmD{ic12DKM_2IL`to_Jn3uT!;kD+1#%=InWW=t$hHJl@t3Hjyi z9ty4Rf-f%~`fO@3dcOBD@8prJwb&B{^i(~wtTuiqBf7fSTb`m+Gjh){ z6aBa5pE2gw{|@6Gt&_pW2Uv*n5?f1u^(*`(2JmcGvF{USfrBhNl+lSkE2>yU3vb76 zeDC@wx!cRp-j)}EzJL`G zxXr+qvL5Cb0QlYT)U2fq2KC5N=Q*4K$Gg|KNv5IcE6J0tR`>_Ad3S*5<1UYnH$l?! zg8cKG?XT9(Z~#&h{e(Cm)tUG(L^_?OC9fgzu>Pfg){35VIUCTPVsePcT?&8@2UMI= zHu9L6&U=8Fq+4B@1bX?3K5C~L#a<%Cy)>ZsK(;vLtwWf_dbW+?Z2XG~pF+g&0wd4b z-%Og1S|S(}OTos+-vI1zhG zXoaVp#%(Lqs0!W1z(=mTQ{{ZIB~0NF3LgI+S*R9)rVkV$DxQOj)XYX%~|+xp2J zq3gbDP+?kfArE=KYQ21~!q#8o%3RJaJ%wgdpeek!@L7Mgg%3*kx#RVIACS~iBRSX4(rz_Z7Ru97?)-t&_Kk^f!Ew&jLF67(j zh>ktjL^3!JcW(pyCEt6a)4#u!qO-ROn>E=1TLr5dJQH`)#em7o9enymu%*t%C_M+v zRC~dd45Bh@3c5HZUVqi)>VGVPCf_~n_zf*`iwm1f@l#BzA@9$cj*O#iMU4a5sSX-jYk>#LV45I~C$u$H~_|Q64oAZSv#RV0c0}z&SOO zf{2R-+v3fqbWGw00mjGJrWor?gA#{AkqYq{d$0x-kI#G-KTLAt!C_H<-SHc@0C!$1 z1eR zi@YW*^AI?IzhQA(pY+f=`+$Ly0a%wb z7<`IM=#ka&{`j&!`vVq1Gs*JHf`;WN?eVYxSpvP75r)Mh^H+j&xATjk>+)vNf%Eh7 zkiDQ>pTIKebH&CRFKwuI6d~w{82&4?NPhm?=Af1mO^Z~#Zhfj`1+ohMfPQ(+;D=&g zyJ`=&1q#CoJB4cZG>gYxm$t{Epq87O)7;GtVFKC!xbxvYD60W`RO&X$vqwU@57Xgf zivlxKTX%Z1RB%-D=yd7)tgaxgw?jZ5p@;yQsb4@qJCWYAA@s*F)IRz-Tt2p&nX~TL znUY|kLMYt@lJcBDbZg5nuw4If;07?kKA~5_RB3z*Vf0L^wQA2_(*T1h!%mOeQ3=EV zD5&d)sN2R|49)_U6u-0YpBi#$F3w+Z7iA(;FSrg`(Q?C_K3bWX;rDDH#%eUrDHt%x z@}{8mR+-R8BAEa;`Zu#h27lvsfik&R(`HP9iW;)SRY>OLF=3pBNYX{?C{duH3ZC7n z^%CDl{05RVogq&4jxDsi*B91aFaW`q@D+>MKPvOXr`XBc#_Ek*4U~y?vmQ$$LgMcMckKr~1@8N)_Ey1VN|9aCJoFszi@hVyV2g z)P_xk)QHAu=)LMRW)6JX<&(+H*)CR#$NbovsCBMc(1;pbD4yM6+Xhno)~qGu_Dc>2 zO$Lav?BP9I+JiPmB0L$y``77;NJv_#&+v0pq!3=Xk2W9EwH@}yM9$^JAhUzAs$Czp z!JHc_@|_n%O?(`#%SBr%EkEzjQ9sTNP;|uLt?di{IsGj3lG*#a$S=N{8@KMd)p=V` z>@I*MFsIQ*eue8N=DpAvwf>u;s{M!n!gxksFV|w9=5V^StNoP!J?twr+M^iUEB=_~ zQRMDY&bPa{eLdLyGbO;p;Y^6?VqontoCCC0Z-2A2=zcn&>rD}*_8bc+(qoyQnA4hH zsG8q5>LOJeFU+;BLbVkj%hyp+Y<#7z*<@f;feg7csR+Uy>m|rxewjk;(_Eal{eoGW!H$m;R8BU7v^SPY?JVYzY@_r9!>6;gymmhJx;a z`Xt+iub-whYwvEzNcF~8d$gL`(%G%y%QsG8R*Z7I+T}uxdSMae$Us}(AgL?=WhgW|~10z8W>E(<9?&1bmN zXIQTy1D<2c>u%H4KdW1}j&{vRzc~%o2pn#2pE)(}9S+3u%}-}b?_?JbGV${w5@)Dq8lJr6Z}$ljUu2a5Tc>P0JltL_~tsCF-^ zXTpdl?dqN0h*;oM!&XboVsRRpz&BNzB-pgPGsX_Ei4p0QTDqA@(~qjuME2k}(n2@K z2GYmL4*3yaKC{c|W!W=^?Jt_6qR)#!y%BGDxUqO^D}Cm?FuH+VI=T~|734E25W{Df z?1fY}&CM*g@B_k&Jc-8wjU`wg&8*}V*U`6L`*YQNFpumwq4Yr4Y(YV5kpwap#u?!? z(g-u3kMbBd6ST#ATx!#Gf)l|c4`53dA%gK3c70kA&VQiUmilx<2zfOvY-^=-`~^H#alMFh>kA*ncuA5AA0w6v zTRHuZS6zy6jw11#V&vm#cnTGtgXHJn!0C@>?28$iL+!&YfgSlp$Va)>z6F+RnD*gq zwk_^@=YK7N=EnUiM_TG=<-Szm5jB$7x!M#!UVDFWjR*@lDwU2DoGO4HmA=?}`1uAN z{OAv5xuy2xT*hCHbuu-mXfA6Jmbm@xOpxK^dcqI;);n7MC^hv{yZ3$WK*YP^hJE^3 zDz_vGQZ5>*e24Yv=JZ7Dq+EX&?UL_Quaq9nmn}Djce)98x*j^FZ(;GIEa8H5Mfp?< zDe}?QnTo6lVi$KKWZklWnlcBg(B0x+1iRKHB=ir0&8_&1%2{ORB1pm_opSx(sWh0d zSXxek^Bsc&=Y0$9$l!76IXv+=c?|Dya~Qe+MEvjXXpd1Vat!?J)^aZ8KvdsNQ2m#c zxDA|Jd`eaSUy@{~b`(?jKe)UiB(YV@I>r%`Zlndk(4>Dd;qQFUS1II-C9(S==tqP{feEaOHOYWHQ$7*ePDU=;)ocRV@;z4A?9I$spzVy8`P26UM|*5< zu7P97=5fj~Wg3Np7);~u%u2@3iPQ`E;;eyE7Af8&H72Qpl=_g+Wzj3%qt z#V(7}zH#*X3&QdhmR2R@=uo_UrAa*3?x%!Zu`_%3s_y5f7Z@y%z+~16MJEZzPkh+L zI^^4=hQnY`HMjGpysMPSERG4j1y68T1bZDg8c)#HB+Ynlzs+RvvwlNab@mVUvoHXb zL+d7v`o^bc#^+mxjva$P+D{;Fp`26R%U|eXO-sjVF_rn6-nGY^UOtd26EPFH(ntHP z3^}SDiIwEV0NThv^}T;Nzxx_%fw~!!ApGtxweZhN);srsJTj|@s%X6JzaEyyW23LC)g4k>MR;Z3 z#JwBx``pw@zfS;Scp|8fcw&Kn?}si88#|-?ZI}W(qqsU$mx0w7#8!fh^Yx2x`@RYv zER`Rd=c4VVxLf>skk042>-_5Zz2KDTFT$p&D=wbxbJFP`uzHT&I%3V1p2wi>Jn!4w zS`4Xfzim_b6=~Dy6e?BU?61vSOpP+%ax2`)7$v5DUJOKa9i(;n^T2H{!i%%U28VIA z2uQdPw-jLT=7!4;bkZu`g&YuhWHSHOC3c-WLo5%u`c`oa_qcm99|i~vCDZq38#fVJQMRoIm9 zh7A5#eihMNrXKF(6&RLJ^yS-GinqfBHlG-)>;X9`0}Suldqvl{+=yJvFxC9B#9QwQ zyjwhFX&e{+GpORT?gRm-{6_oF>JO8-nwo@BUTCa*^~goSN=|-8U1?7sZT6t3vbAHC z4;xczT~qL%nx73DLv58b9Xp@-$dGl3>F@%Ty5DDD>jZTEoZPoD$>dAgIOsu7a#CNY zi^ew^*De8u2Sc5f&5@4qH@B@9Y&j&lzQPUIPYbnT^rCUW8kIu^3qN)YEWabwLF4a^ zz@Vy5tUCt=gqi)cabXm7)-^{)I_G4<_h7PQ>IebW&P>$Et<(!22Bymyzre@s%;%Th z23-=3SdADD`iF`cPIB$~e!9BDF9mP)wS0{Xe@V|ES)it9S68}~4@6m9TAN4r*DS}Z zd+_GXe<<<^Y&res^W(4(N}Tzcn;&5 zxy^qybPD4#bG|f2y^Bca`HDTuU*J-4gLL@v5cdxPk|fz&6oP`ZbL0G`Ch3F#Z3Tj_7dGxt1^)@HOquk8mq=Ze@n5Z;lDz8WbUs8(p?t%epY*jL|i1@@m$ zLj8Bd=`{5*@Gc4YV0q{v35#eE7m}8wo7Rehkd%M9z{1lj0N*5+-LUN{sBe(}Gp`lv zHLk*xSXrM2yO{#E@-$>gRfBz6g3g8myGKZ+=oK2sQu}$qu3L*>n$1wg_z_AP5w7Y&fo1OmR*=vL`5!8sX7PYH;2xp&< z*EjvD=2;#dmDOmc;a&dCaQ+5snGz;3^`{QNE>1%R(8S|RB9P_{$P(P=7p0+t z62rj6Rr7Eem<+w=kM`!y@Uv2^M##s3q5ty1XQu88f{Sy4>KK|dIYx=*vhq^HpZL@} zN;u*6MhcC`o(He2g=r_9UQgRd-JPK1Uq3wTnb*yuEN4Avm!`MAsI;q{qosd)V@6w= z9w!rRXPf=b9RNi0m_7jleI~+9oAzZsc5J zTPz<`#wcGYy+KikH97bef{EX;^u0RSoy212if`jxHv{s>@U)b%M&x_ePYl)?{sogW zYW>ysM8=i#IhUpjOL0IQMrM0RJoHEAD-OxF0(f9>)}Rx{_Ecx8jY(%i@<#IcqGoOe z5!J&mPX@?q)xGuQM%FGTevzNI2Tq*@+KtIC1ZMfz%`o~wvx9jjN`|^DrUAE*j|#n9 z3bZlDO=yfZ%4z@h+EARXg-KD0R6i*8e1H$(Oz}+a zsnCafy!OR#b>&{Bk>b;4tP?8o;ppMz#t3ol@!iv??F41`8?*_J8;nMjdC97omDuDn zCfMVyi?R<<+HTLg@;7J%F$-_dmPy&gdH;lZMyh-%H&Zh0hfxAPNkfGYnpBi3$F~in zMd7rYp3?@4#S7bsR?HECZ3QO{2WWZIzVk{oeQAk`(k(4FD;=MWt5qt*-!_Zv^%?H; z{xnaVj5La-5R*sWUxc*4vx?_e>Kz6A%R56^M&0Z`cRM{IwrggBu77xcbUjUeFmZEl zwrH≫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℘^ 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

)*NQR&tsfgdPH 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 HE%1K;#AnWV literal 0 HcmV?d00001 diff --git a/web/static/img/logo.png b/web/static/img/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..dfb6c294d3cd9252662320d550d5b76747cf1f0d GIT binary patch literal 71780 zcmce-Ral!%)F_GYR%t&%Bd&&9YfK6RV*nkAX^x3IhX!p{O9E1p@=83IhXsj*JBT_CyKjgHFJDYRLm& z8sl-uXi_xpNQ4%l!yIzK>4cTZ1Xt>s`}WhDfO;I#6WRvY3egad!ILlOh{{?NIO zHq6yysO;1FTm%-Hm$S8lY(4LI&SwG-nDFBq6Az{eehe)TSIb@gN+d4M@6om4@vB{y zT6ao985eI9`h3X6&6;9ygEb4XRdjID&NbO?pKxOzB#g@7eY8o+&lWxV$Ps-`x22Y& zO;57Io}wv&?2GThK7-3Z6r6i-Y#~;leAGl^VYT-@%QUw=cX5n6X)Z&6YK-zg_$HsT z_2+u}qku@^F?#B-8h#e)!`JUkJD9-&*$PNJr*zZ{TPj_NTtLmEY#|pP!ATPO=t5>u zjV^Tp+vW8kyh!#ao#*AbntMh;foTi6yo3z_6cX9HrG#rMC0m_=S||ngjKTtw7CL?K zk%1C<*`4QUa~{%#Xjawg$6dL3IDDfgZU?Mt;`NdWMy+!xy#(dpGp$v+1*BIm|!ub6kZxc+u!vw8YE1L0{0% z_@|05#6a5*(0@gc-}Cq${{A%I@x@-;71SGGtpgr(QW5Nb{z3%GPmF$O2d!>xbajw` z%EF#_gShLK|9h)1Pcv1MhXvp$C#x`9gIr5OK+RW9Q(>zUxttJ}lBbEI1)c2XIpvwH z`PJKC4t7-oIjyQU{%BwAdEl!RIe#L=Fw6Z_w?{Xv_=B{cK~Y3LXPsoFTQd=Sw1|aD zVhf=b)mK0OPX63$9wHoaj>^r}bk1M)Q{f1TZ|c0{-Ln{y78NxxVEfK!-606XEBQ}Z z0_VN?ovMGcf!n^ca@ZatbOi?_oh-JDDFAQzhSH`H;W3^qkL8eaBN-ohdt#CY|)JL9lVmv+{{=jAEx@tcI+} zr~mY+g=b*Ces2D?S_Fjtb^B>Z^=Z>YkyJMky-ra$9dlsjs>OQuqH6mNlzVK~XH7~O zIN;!QE2in*ICLYPtz4>D9wipgf5>*7FWvU>_M3FQJ~_`R)>1#%MB8oh>7c^0fIRqUv9BT`4m&S^*B zE+sCmDk6|)2wFI3fcKJ;aBr+z%4;$TD7cVVIw$#Id6cz|%_nIf9_5C3@`t}lETIo+ZBE7BR5Uy&V3n$<+&+-+j zY#hw|o{g?};mF-R(|a?(Zz)!s9u6l~Z0I371NqiviIHLl4m@5u0cOsBbDuMg+S?)u^=W#N6>0KSkeCVB8uMhd#p(M1{>V z6@}9rJo*EFHKK0F7;)p_vV7?qANmGpuowjOl8l0eYzoBmyAuA%+9$WtrEmWf_e*ZJ zR(vFMv%@!_I`pL=_Z%)d3Cx-@=)2x1RbiSS)}%sbZ_g61VI|!e=_c#JCb`v+d>k zD6-Awi=-iW@Aog2zpy{xXqJiMa?e-hcalKsTG4>NXWjsC0PQiTuPMSUUhC>-FePr# z?UE19w+JzD6FHnC{1md6SNzgWqZ?oD(~vOG5EQ8wmC0-TaCY5%O)uU)9N0~SVAc-< z>6#EGG{oniX;eJcrg1%;yB7sH|Mu(w`9e)mp~-n2vLf-O82)ne?VqlDgYF5@n@r#O z0jJ?&942xL6B?D1!~$3Z|4tlqNJc%ozBUkW&mH{We{t>q6-50ecUx*fXiXOqO^^#n zY98vdyYwaISh&xLqlv@8s2En27#M3FKso0-e^_WwYzpzh8@#{4SCRZjJ};T8ub-oR zBa($Ql)uoi0*_oP=F=L9dIsvdb;LPP4<47AJ8`BXp1-CTmp(uTeL<*w9j}`|V$*~#8>^aBUyVt~_PXU+0E-dg@stCBtrvAZm z+NajqLY#(aqk=VMy%tm4W=;UN{yc#I0Jgvz@-T@Q8X(8&i9#Y8p2U3q+&8%4!dJB) z?CX-`U5xc_TX6RyBrswRG9P3H3D;)AU%>{04h|pBFRct2&?&lcil5JB((RSfk5;ki zv24-{FJ5gO*`s?&>}?0fA{)g@&TU!!SR}55tndk zXxBLC!9GJPEt)W{e|X12gkzf#*gSHto2t3Gys-q~!e2X;S zcYlnT8+Ni>-%WlVPvz^*HA3bi?z+Dd7!rs+|A2~rT9?!}_r|{G8!bJ2v#QK3B=`Gw z6K3l@`!`B;c78NXvxp_fgG86x@9rUZx{w|1Szk?Vd#ff3*y-?@r`#LwMqAig$7#04 z!(L7n8EUvoq0XAOoF)?LtbZlMVMCoY0P3v&&tz&wLSDL++NNjrJja^vL-M!ZAiLjP zy-1CHe>P4&P_*5=-(?)8Y9^%G*vs|h4qsl=4)sI@MTt5Oc8QW4Fhs=65O3=GPDbQzS+IHc+K~j8Fca?4=OnCz7!Qp{LFRp zp1v6RzoSoN5z*fv%8;_AIPN;@OS9vO)Z+Yu=w2txfqRFg^DWJ)X%cvqlasSsyge6* z>IZ?sJYn^0-o~rjuqZx=aF>JLdLmu{VjqL>K$fa|KjmZhO{H&Vu_@;VJudBS^K1P% z-3-kp>t8HO%@;J@vY_SCt!N0t5&pLcH7gSX7%oQhQ_pZiI{9PM>seXy=rfG zr#LnlDYH((S?v7hfp2F$`Rall7f)y;-nmeUK@okg+~czm9PTa|2Y#5}+AnH3k6pA7 zUwy7?V+x~RWaXMw@{jv}xUmk*xVJ8y%pnWSafGP_1*Rak9L1Q#saQT?tLs@mK^G-g z$LQsZM_D_y5X2iK=BW$tw!j_aovh)L*d+I7iT^B@$Id;~x0DQWk)W@3{@QHdXq|zE z%)pUL)`G^1tLOu1CK=`72(>Nd)Bk>a1K}FEs%_opK>kgx;aKXkt%xv*PQkW6NI}tl zH1>qvIgITvSjrfJVTbLP;noA83ol3)!;CR0>K$^9-n57TDJqjwV<|GM$^#{JqBgu4 zaoR*4E)Ubs(=I13f<@5Ry;7<&78uc^D3EduSj7(f^VFso{R=G3xH=$8B|h ztiM;g{6^Y1zdrg3Z>#?rk7qA}y9r0%yF%kgxM+&q6#~_T_ED5)q{4`V66}hwO{$H+ zOSPpGB+F|Ig~z*7?L<(c1iyVYu;5^XF+ppIQlu-%9VfgbA1lC3)m%fF8;{r^2#058 z#=Ww-^c`?cT_X#92a<3|_l*M{#F6h^Aqg!Z^?!N^Y%;`>>5-OMnRl$%z$gwvoiOih zB%`n|;_`pgV#Fq~06m_`ulc?_AB>fLQJ`@W`rsR_S$&aP2l=Z?iiaS>CZS|&-iw~y z-n3j6?_R8;Zj*$P1gTBDpQ%Zt1k>31pt+UIGMRJAtd4|(LI@UZ%yW6CE6?YMR7ik{ z<|`%voAYBXv6k?y0-;<1u$^?Q#I2F%r=*D zpSn}OSEob1^&w$|li{O=*!}4O{D)TlaAfhb+!GneQJ?>tT9v^$R7;*%POaPv^8duR zDhB*)Ca}?Aa_LBnp*l|32YUnh|ETeXB-53{gp>=*5VBU1UHY-5e7%PvA5-p)-6)W|%+nZB)FOlS*_@CJl3F1ooRWCR z+$FJ=%81d3&ouCG6`)C)prCcle=9T)D9yp0u^qm(62^OF>eCPYalD2(XSIYTH23)& zmL!_cqU^l={O*IhbSiqZa&+wJx7pWMk6BZh$AKZ5mT2~eW|r5ZXo-)7uxQNUv}>vI?Ic8K>I7_k`R z9qa!<5a*EhYU6z1N^X5O;cI_e8@7A{a#Y;CZ*9z(ruVRN7&UEr?ZYu|+PohS1JQ^(Gs1 zGga{&-Cl$IKTZWUCbVvMcw%* zWQTS)+!uXE1DlcRs5izB5V{0%X=qYV}kX#ZjF-caEhKoDF#9%_hsF|pR zC4i-4>gUYg|AL*@uMv)L{cMZ=wmn_CIQ`dvLc>m(qljKq%H#xgaod3zlP_iRz|*tS zI8YMKMRCyNqQ_ypb+g=DA=~YQUoXA^K3YH@ zAB@)9n&U8buI*d20*&R+xR2H_R!nRTC3a&xQVGa63@`!QDLeU;Sg%KuXXiEp# z|5rdutYq!X@k{mV?6&G@-gBhY&1pW7F&}qpd|oc6NE`1!j3v8Fttgo}@INLiAzgVr zJGPR17}U-G)KnXZh4zo+2GUxI0`g#9peup64m6T%*JP0_b#(w69X{W9#eWMcTo!i% ziT*-xl%$8ba>@SLp|e6?0?7=uR2J_rw=?d)Vkbp_JJrUh8Igilf@dlH6}lLz#Kc>| zTY`&%w2Q*nB~TL+AQAY zEn$%vLs-riVrVSoF?Go$O5S4aRhI)Vv< zX+SbI;|O-8(g;DP`j`)rVayQY$BxTcL!E+*&A&s#AO>jF961NzN zqT#O3r6R`VzLwb0z@0{b;}Ua^5q26nVhwFyZ`oQc0#r+1+a&Y}Tcd>X1+DOAMT~PH zKOC_YcwLE5*SFE5EQt8^s;@J6qz1X|Db~SCGCI|dF9DK&ms;*Fy5ljnyUrvZb`F@$Bbpa({?3)jlL%0Kvi(jL* z7U74Yqj;SkD+U4lF{1Bd*#)DoRe}t9n0ZGzrs)EZcBM-L+xuW77dn~}b8|%SPmpSL z3w_lqhD6TLG>C_NzVOSnTF7r+G5-Pwk43Ah$=J;CDn<#Hdk5cjMh|6#h0g#{T+X#N z)lC#JGY`V&R57y199w_mEZv^Xs!N;he*6b$0U8wCd*5tS;SWf-d@ z2!Wp}hpYdn{M9d{{P3p6umGl%rqC9;CYjo}=SJSq*Q|WC*X&%i*Q~CtF5IpWd@KWt zyrQ==9Uy)8ExvFcKY!BL7Xd;S&RIPZbwxal!g(L0N#LJ7DIYknJI_7)Z&L~dKS>~o z-rfTWF&z*d??-(TmRSiDIqmJ_1~mO zsCwI-G_?~TEr&YH`RA6JVKoT3?0o$@`EtUH|#5AM7XB%4615 zwy^MU_ao%bpFM9Z5_iw-i0Eythmz9HD(=4@xxdc1_>bSE8n;9xMz_F@z7=m~s`_+i z_nm%3X)ONp(Q_|ij-(phr$O*qxcY2&x?pdc)58VgQ|hU_idJC!>i1K2&N=Y6XG4Z3 z5Pa=5{E0FJHlh62oeiy4_h@felq&aGkL1M9Q^|+l3HbaELt^f(TeOHS7X(N9?<##V zo{eV;5x9%-hb!VLgMYGOIJjH@aw*g*QcWn#2W<2JZgj&&HM-e~!oXeAE=FGq9=(x^ z9yAhpz-SpzUvAo;49B%huFx+QP$n2O28ty++01LB9BAo1<_&A znF4>*dB1)J%SPal;KUkUBZ1|bZF_2MWB%pEU;L#9X zu~dVJX2^06bx#TFiHwsS>4c^BG5H9Pm!zSp{hgTU_Ly~GiB|cxT?^?}=4I#oM7|ry zmZ?y^+ww5hQ+6U|;e)5U2I;*?GbJ5Hsl_$uLk{a-gEW^MjEb-s-E$B(9<%L+82U0f@#q$$yfn)eew!k$p z-zi3Eztugy%wGiV3983n%jh%@A>z9+!puu)lwzA=b z6`k!no>A$5F5d~>Ikr+Um%@}gEggVF3gcQK1>m{RE>h*ZYkI0hXF^B4hI<2@ z01?0GJ=z*I`O1$ciy1Z$o#%4Pi5q->}&eoX_-I-hrB(a^0p{YDc8 zGQf_v;pA?XV1L6fYp^Ts+6H^q^(#0V{4a@+`v_pvQR`6#Ud1`39--w@2n!Gsy)j1#8Jv@vPqrEh*Hh zc@M6l+sf%UEU&3UL34GeHR}MKfifpuLrEO2dspmv0M|m&KSVrp&3>^rN@`fyMlSp< zF!&hQAW#zeEI5&ZG(M{R3v#nyRhBKIU;K#%z2^CS0QFP(!mZ1;TQTcKsK>)lF!ti% z!is$5aOw)W3X^_@dMX0`k2JAwac7&tk9U>;oN^_u1p+Jr6+$nE*EyV|0!n`d+8119 zqbucL5XNX@83FM-e z3X@@du!ht8LX^IsEl?=HGWnY69Yv7W%Nt;C!1m5w8IY z*F}^k1D7oD?OVNxN%E*Sx^JWs*C>M|xTvl^D+14K78EY`|~qJgIl`qeXhw^JHgtym9*}qjCleobpoM zXTAUCO>LP!{24&^6S*Outogh0o;GVY{=fdYGNa}SbBoI?05svC85|tp8lazr)kY3W zP#ZQ!^=~AJmqF0Jm<+Q!f|-`h!M2%XzR{nlL_F?Uq|YJDKIGgFMks~wdBU?$58gWN zS}1U5qc|}n8O{%T;Pfp0Xl+y8d-OuCilTo~KJ>{cu(jL>Z2T@du@$N$!*v%xf9b`} z^Yne=kXlC%CuM!c?E~RPwKCT%=Ula--TlrEYduYk%)P0h9Nzh9(yb&Q{N(6ooTi>i z3xCWVKO4O*5UrlEcGLk+Wx!`jKFZL2s_$BZ{z2);LNQ^xKqZ1%@4jI7dzyChR60Sv zXv4^X!^Ch}LH^S0Z(o+pr*hsiIBr__CEl{rTQiJ$f;kRrhB`&dwsMN5MBzNx5 z{VOKDKqQK2wQTc$l~!-A9wPTo;w;I1`g#!_jbtL^B+&>+c=L%@6S&G@{#&_KFs?WT zbj7xVGNXH@hUv~1nFN_z^+@SvDKb;$TvxZz7z{qIKb5gn!m6zo*>Vif<~F|ijxLxh znR8J;S#u@ZRt9pF4w0&u+H=XuV^nedGLK6lRk0`;#3$#=845KgeM_?XrK^~vBz8_f5I;M~e5-=6V9{GIyT>%e^?{dv zTKB#;jMgEo_FDJZ(+qYY-Hvi|&mr?u{(-N?e4s}#&^h}}%;m$4J}&V1_vhJtALp+T zbXtyFvY6cA=oV)1qF6i8w($$5&-az=Yh78Mz$dEl@A-T4cSG$+b;NABRPcUth3l?lDt?qmw4YX}K?Tcg4W7CF`r$T?jyLn;K3oHY z9iMJQh`t;G_GqrOQjs!|v`3o;M*==_NBT1`I2ywK?3Xz^9m5ajH0E`itHm5_GYUV+ ze*xS`yZ1jeYxh4Xii5N8bNmNO;^<0vb73lgnneLb^ zu&S5ldVTwIe|+AncO2m}J1ak=zS+qI^7=x8T<4FglggBVq-{-=V-P=#t26e^Abvy; zXLGj6H2O~Q%kwbURv=M(X+a*a@Y^jIM-G zrbLZYWg)Dj3}~fJ{hJ2I;LH<0O`r0dw+@Q?^U{kFe19L#TPdxu;#7`XbW zlefVJGV{ZVVz%CuK}q{TE#LOo7^TXLFJ~Wqa5;!~u#Lf%;?v8jBaX@qT@KRu=hcKP z^KR+z6C9MPY-7F+VwE}-cbZRwyqy~eOOpCrr7ENZQ|NL=^;^1MB3*-|@RV=Q`g(6oFs9D#%5f;wYkSK(M=xwW(;39Ux{92j;aVa_Z z<)Lx7WBdGI>0#rjwe?~BE`9ob`yfKx`##`r*4Xp>*EWYfW~lHlPtn-P)bf6@@D|V1 zKNMJ#J?lDf`KKxl-ma{jReDT!qFvza(DxdysrzMK!cj{NsrjFM{1{hlEi~tUUEA1m zNs|uU3C-)htPs;ZX#m_Q{~q=p#?W*W7!3s%bWZr$dc2n>@~qCc>(}cdH3q`~Rcyuz zTaE?;+$rWBlSMAJ4GlDH-cdTLRxsVqU(-$Yog+Z?mnAmFwt=t?aWm)ilV#7cYRaR! z65uMpN3J4k(wa65Qxx?oLsC#Do^So;P4q29sC&+?0#;^%{VkxxW2sx;9AE4V4G#4W zQ2^j#KS!aU=ds>j%Qy_BuGS7^4Vges5WL{_KpeQ95EU!h2HSibXH^Tb`cnVaWe8C} z-Dt1h9A$ChnKJfj#k^Ce_~pZ$4&{rWpx@u3%O^FDpEHlJHZK+3Dd#>7fg=%@{w5hp z{P?y`b?Eup#?~4fkhP9&u1a(cVu^?5^0X7X^8@1K$P93QaH-=)Tn0Z!cH|D-{L;DF zKXyALo^bkuLetUPVan`jCR-e1e#-rb_BQxP^atBj#to5xZ_#;%{=w7!F<;U7R@qqkw$ZBJZb})c zRnn=3)t|}g-(BVN_;&vD*@aKgw#rR_y2tT-(Ckw)NC({W##7Mvp&#;<`Gw}=(W7s; z;kfaT!y=W0oex!*3<4e-$xAgeMc0(q>A+Uo#Zx_V@3qy^{?=sGyc^>^TsPgmBk2 z*Let!LIplppzt4iW|d13!m>cspE`Awg`vN@jk*YsaSSSoHIF8HmF*NJ$ z6=@K#a5WS`%PkUF@HTgXz!92%gfu&K{zbV)&ehDVMl43vN|lU?-&JTPv{vOC<^XbP za0oe2uiA!|ZG2YsDK@8{t{gp-6DUjNzH(Cses7XlJ6j_w7{RtY0b!Jr;s72D;`?Qnp5!jW+1kR?)GPb;bx1{!To@xDb zu1WPh2r{eY&^zdLfM8cy5HD$&_CQSS+RuW!c(zyWR zY(h;lFC*Cx@>dyy_}rDN^&lYPv7&obRuY}yt5g~z;Z5m~3|2V(eEmQ1m1G37up?Jg z7?QTvvN>wRoOHw>@8P`T{Nmo<^Q5tCS>5qh0}g6lt34!`|) z`)D)tVacHSRh3fM_9yT7ZE=4ryouNQc5O#mF-FsygB=J2z4oCwRnlkQ94 zfjVPHxBc-GkTIdJe-Nh=tIqdNjixsig?Kk)aM-0b@YgS6?Obn65^*_~SimHV3 z#~@bnC-+oa&rHnSB%C5yR^ngc(dy1XJ?+GP)`yFL053Io zt4#MWRl*ce?(-|HchMX*JXVoAbY@3)O~HVTuKWwv!k0&zFLkM28(@$^2qX2w@OSZt z@gQ7<7nM*xLb<@kds4sZ;Yc6hsNH3A+%(vCg0vGRyyO=y#i@vIDwHYiD^V3hx-_p_ z9}p8A-9omiA51q<%Ypi$c;h&s-#;R&(4p}JmaQWG-qom|z$Of8{vHmV$l0VB_VZ}( zPPt8US#-^gb~D>5{@e-;vE{S!(8~Mtlgd%(4f2s6a5w0ga)CvYh}@wGy9?xwY-s)V za7+n=01Ck`x)=(=ikv45uReRE4>o8UJFLm<3*SA_RV^wW92*B6BfkN{GYQ~x`vm6@ zHEC<>fB1WGOjHu@FXU#ytIgQA9Ta&r5=titC{TB8<) z=gBdo?qQRtdvCNsk(>{DB=8V@IPF7{id}S|@|U!wTCzq@!`PP4|Bz;yZz~R@8~`MN zP5VG7-WXA#3GV4LbsV=QD*BRm37|F}>EZ++alI6CpdMjX$wzHR)@alG45i6TRy4GIS|=Da z{cA(bikRb~NU+u>_1oZ_I>AUtll1u8n(lB>!ci&PrRBGO&$}QhXYu$x%eW2vNP(O# zv%F%NP}FFUHEy=jglX2j5dxkno3gf+X0CzpsAFW#RBk9>=X?^GA*-;(P>63Oh&oG2 z<3Q_2Uov7QiAtzwnPg6gbnIEXmRJrpZq^u=FEL&hb0Bwk?5NR<8lF7}_56K}Hl`-= z7=S>JxH>J1TM(0A{aL+cCDw%YV;Ks=br>okYfa?6Q7m+cQojqbdcdw6JmHo*MLz$; zU%@q}IQpUcEj9uMR~jYP8uR^&ws%PU9=k?$oZ3tk2IL~Dtk5tSsdr@T!X%guuj>OR z4F-cA-^M|W0WsJF;5@yHyQLToIEjOsdL|$Hxdpz% zMd^H-uMZ|b!~^@7#Ya>5!$tWP{Bo$BGA}dqthVWMvrH+#3TE@7gs-hAWf9AaKaT$# zwhbyJnrCR-=^f#}Y(gk(Z<=+G9UO_;CORBpBfE1F-x_~q_LAV8aIy2sX5Su9Gyg67 zT!`0|994q^D|Hb8cl?!i(4}RMFv8tyxDSztBWG(htQc8{A~}qELA!p++@t!4k=mg- zS;PV|sh{5ovEsySVOg4&)2ON#+)j@!$VdH?U5rlFq$8+9f~cX%1uN%r{;8KSk&*QU z>FMlK$^>JcA@6*e_E@bw4V3^uYST&|#UC>v{2I>RyEq%>XsaUK$SJ#N!_$}>W;{-2 zVCEK$VG-Pqc?heVRC&U1090$E;7lDH>Dw%+N~mGV`p)WWoG=L(!;!`q^Pp@)g4}3d z`JYDJ`rqIU80@7;(GBwI+9&Tt1@e01XA#{KE2xK35PjPwn=Qz{*t7z2ph}zj@%V@T zq8LyAfq*-oSek?ozltRb=gQ@-_S{n$^alsgJb|6?1_PHw<&ZgZ4v7!!hUeWmK8L%Z zgbOi(+?4xy6|tb_Y3u^-txLlvgQU1~7$WWOhJrq7&fyW1ZaDk?Xj+xc>O;H-LKm6! z_$Wr!Psx!!G)S&O?DX799~TGSCwF}ma`gSas$|WT$^j>mA-o8;W@U#4B+L|oRv#O0 z&1t01-vyAJ&r7NTERrJ-@RE-rm2%9uQb~5q{{ifihiP#pTv|V(Z4DmM_eV0?0Wm4U zrm&r$ks^{dFI|pCVBUb6TS)a{#AMJXpNvXLY1JQH$v+azE&p1I;;Y+_M7RwiyyK45 z2NO=BRtZEh6R3znzPxv;DNz6Nyd>*^y*J3IG5@D!pG=!WETZJabyXKvEfx~-m}rmD zNi>Pd5U|a>Gz0q(l@iP`wuKS4`{Cg#7L@^YgJRsAZ0c}zL=N7UD-rEYZM4+W;@w3t zoz(Lf6&hnEaIO={Xk$KByIGIIC8s{$rEE8WqcaIrApZI7fCOJbUATL{35=^ho;8s` z-Q-m7z|R-JlV;%jG%6Aj=7A~N{-tr!zqF_g-^Yn~_m+SbBq)9^dagRIm;jU+3yn~ZhaVO!x1ad$u zQHnO#W7ju+Epp-FNr`pf5WY1igY@Z99yVREB0Jp83~h1b+w27PB@!MvX#)ZCAMCEB zL4f%3H#oZqdi=?J1-RcqE-y_2ImD|i?{==LmgezUVHTbbv4Dj-Tr0vHpj+pM&XsvE_%QFDIAfAbC6pTW8JbF-8hUt2L&X}PBKB-u>_Zf9 zbMR~r8LtRJVPKGmurxy7ooallxf>qVKW3pjJvnk#WstRu;FPK?kggAC3;#1q7Pu5xgsG?B-Piw!p{f zo|;Kp`V-H`l-4YWr}T`B)C>4+MAq0KunFYvB~M5^cHgdS=;`to4`(*BkmSt;_KC>}*cN9%4zrf}=Ingu=EiyTo0x&>MhF-zfTddigZ_2Y9~qMwuv zyQed&6P$t9Ap;&O5Ys9e`VogD!D_`h*AJ%qCbWu{Sl%7;wv7n)AIzQP?v3pv5GaJe zslNP=R5|Nzk&;!F-lq1eZh-{V%hdb4joNS5`J}%g)T6`Yj~UgSChKdXS*$cs^(}Bm zK4YgP+!(b~YSOX=0expLnjW^hM|lbAzc5PT$E%p+k=Lar`g6lEl-=}@@t-4_R*^o# z5>(^U?(=q9y-l@r2i^>E^FO#}vywe=jZM%Y=c6`fBfFr6l}+1C>-PBO{>R}WyaHWv zb(G%Z*j*b&h6zliGhSJZ8*XfbIC9zbkI@)@Zt86t zDF+`*#G*O=`!-3uhirv`ZKz~(K5pmct8T=x;xDUeqs*iBqbD01fk_$r7V&^*HRGvF_LsFa za=V23>#TZbFP#Ezf?7JYb9MAy?!-PR65?nCo*(StveU}hjp->@Xh@UmKB?;zP!3cO zR69AIE0#;cM{ohBSGNEBvZ*$~VVug8lOJVHPu1G@0+<&E^8cm}UH_bGUKL2BRFJc- z?XIM0!{Hbl<-pnVcl(ki~!>LiJN;cP_*Db(zFZ~j?R5EXE zX9-#@D2^&Nm;#BPzsB7dHpb2oi7^VB?L4;J++lDEgG}GUZ(i@_MI=lg3T|%N=Y)zli;6cJJB=G%AixP&?&(GG%VB4#{mmyy0nMIa=tDwj!khP zWbH)Z(tB=6+Y~Ru#=zRJBLkmBaoU7f9lO}f*a?k&#if_XytsM_#%R4Kw;L9A56_*t zD;7L126ud#PMYM2N8NlvmDkl6RZL}~(!m#(`Z=5>x;k>BD$1P1bR|lLN07QGMj3`nU58Cq1IAi(-G%%grhk*qejv z=E(Kt$TQ3>l`9ocxnH3`_gxYP9RYE0Fq8+&vIPwW5?eh^l3}}vhE(IO>2*%rbSzYB zu-0DE?0LFX-6Ems9#{O=c7?Z|VteOnpnbzrn@!kLnY8kaO^O-H0Ay|I>r!pzliH&d zw8di>V?T>m3aB7tQ20+Kv603FYjxp_2g@ z;=av_fJHuV2JnM}2&x}}rXvnV(4LJiroDNUfP;%I0Uw52$K@>l?9ArS!^UxL@`ivw zvA4ZN|LK}mWL@PGGn1BJZB$|9G-HDN|E!6ye@Mu**=O|^wL??3f;eKo*1bC*h9D`< znS(8NKRM%Gq^HoMWa(cgijb#H!9MugI^XPKbSF<^#&16LWhcubr-cboP)n(Qvo0-< zlpym!bFNm3lPTvH#~sYLWg;3aP@Dp_My!Vhi(1^&w@pPHrY`1@xStkRvLL63JAq}fB3g_WdY0eq;JfZ0**^*arIF!a4B+bv`|HOc-N z`;Y^JB}0dQV@6gE%}KwLEc;KGMf9bri~{E=W+j(!t+-|a~_@zF;7sQamB>?i+lf)KPr zb+dD`otV4##Xz9F%C%BkPHx1ZKV}L3{DDvUzSc=jpw7m{*<^Ez0nWP`dHHp}f?~Sf zwa8(C>(^*LGvws6yLz$m14KlBm1DO6s!NjqFl>E(HoEC+&_jOWiKw3{T$eCvR!FsX zh*c7?_-gO-m)cJ}qe8WUqq3}O53zz68$As`!;zD$vGy5a9Hx)Uefvce1n#8J%bor} zsA&JYE|L_pWJjasvvr~mwY4qHngw!WgQtJ(p1sPW>u>6NX3|`~6 zZnF`GOL6a6b{aM0rJSve<2eTJnO7P$$iweG)3uRaP>11eWnP%TTb$rt9(GRU5HzTo zg&rs^ry3{98|ZHTG~nfUH{RZUujj5Mg9Rnj3h22pwzU#`f$@4@*B5LZ@%lU2vFrU` zKIw`PBTf5T!Dk*naiMY!@q^zT&sSP z{J!rs?upfvF&DVvOkXAa{=4BqK4ct48wDTL2W^ctVwXBoID#y{7$zwhtY#5ezurq^3tx*57RuE7ZJlm*rE%H}(okKnFVwa;Ae~pj0kPkD zs&yjEBfG2hMIqzOp;!Piz7G$I0m*gP+AvW&z3MKlsfWBWF0n0$EQ~FRni|~H_tc=b zf?3pZQK77*-M>AD_8Xl&oJ6T*6Ob3$d$ePW%S6Uu_>yV|u*bdHu{DSGs2I9P$6~Nk ztRh4iU`2%$x;>&%Pv*P{JMb1Oo#?jAx_aE?_xOi?MC#=@A`|4o{cpJ22kY@7y!Gw_ z_*Yca@QZF;ZcQmJ1>|$KGEtsUaVp3ne=}1n zc{QJv@D52m)Jd)ZV(fV_xCLOpoLNd+h*^;D^$&?f_8`Bj$8b5bkMJ#2whlpqAVmdw z_kfG_IaqfiiS}=XtZ+xu4(rrF4)$C;zFA|TWAN4bO%K6x$zP}mvh>Ql^q_8aM|b0S zllH~Pj$~>lqygMTdHuM@-M93?gRsa5TGE5SqFMJ}XD0U2uq)1^5 z3$~M(&y)@m=GcvyS_kK(IEe?APJI0b*z^zwjeWiTTKe<|{C#|2cRf3<-pNau=;|W= zwWaoHchcl$5HE4&L$UxbWrCCW4yC@C_}>rWdw~b1&U4M)^(cx?VmAxrJ+Dur!|Tce zU%QTR#n}hG(gjZHCtGvALDfzclrU@hxV?7v1WKMRdN?>(_Y4W(e$Mtk@H`#}3b~hO zEHpf5coi0jFs3+6n30$u(R7R9X}jdIGtZ|jY`Gs77Vr_C1a{w|gVQ27Jm!S29l;fN z0V49n{3AlQy~c$QBG9=P@GQ9ch5$>5{<2QKV4uROQ0=SS6f32-5@*naL&$z2Y^t>V zpDJqcuSPU7f^;Lu-5&;YGq_2hX+mX$em?XJb?#Sp4b|tYR+2L-m2}gwLsM6ka*B|A zr0hmsZ_Wa{dx>Y()(7T`T(RVQ2Op7Zg4VyKoH_60w{7cBp^P(g+v6zXd4)YJ>3(lKibMDgTSTw{VK`4ckB^T~d}3lw4rx zR#*vXB$h_H8$~(=L10&wkdCE8*cCxqx?Jg0P(tYx>6SjPzwbM9X3m^B=N~vT)XXkV z-ut|FT-Wu?d(Z$l!e0{deFgQ*a(0;Q;@QL8&{tSk$LvL|z3MBT%L3B=V}yOXFT8_y zw0_fRc@)Y z8qM*GEIXpXbU9Z@+9b>DE~%0zqyU+X`Ymx!djz?!`0v>#fw_r0zk&o?9w~W*d^43< zV(v|CTSK>}tk!F;(Oc>1+v@-2IPP+N%M1461HKslwxGsI z$4lL+QR9^m?fFazk;y-d^IK!ua1nFkjb) zEU{BW6fyzb7AtfPkNIuI9v_`4xl8JSh@O@tZmGOm^Ez3yWW4zPWXHPZND+9~ojUfz z8XK4!+>Lx?MM7Rr(Ci^_r{MYe&RkQA|Id#GsT_3OrH2LHr-ovC2?a1gQRWK)k!_F5 z{<^j`egogtD9l2#q*fUjHamU2{aIH2RZYM2GSN7Bq15({ zZQtW3`pS(Q&7QuiY@6vO*shveEw5{$zK*n4Pwn?fJb_IfXDtY*)x)Ai1ly0=JAXn6 zqryF%R%Zyd{dGfbv)B5fGAL2}AHrc21yti?Y93XnUV|c)LVvG9tVs5Htp!{6cn{3H@zf1=_adx zrccPcac+JJpSA}IrsbQ?I>#YG+0)FME>OjjqQi3J=m^tf2y{dG>7ZyKPOO#+1>Y5b zjD&uUfF&iL$n^so#~{hde9+U5k|hj%tcf7sU4f00#qxniqsOMRFzcNsJDP~b4PG61 z21F5IQr6|;QEspl;ItAr_x1_gTSSIHCBM3+u(flPOvu!2@`4H!ID9&uxI4Q@dz!rzlJDl# zywA1XkStCxt2Z{F)DaiG-|x?hq8%hZ`fS~u{+@nm#qq1&3%jPk7ey$OhfeE-VcE&H zH|SO$Zgy=qQAK3^uXHv;!<}VB6v>P3H9Z;@qC&fMiNPP7BRL_(g(-(d#IWjOf*aVMn= zp3Q-%oRd-Wr&PU~&-JjDq|qrm z>=h^$;8j&R?!uT9#ctl?_e-3BCjz*REKhR~eA=WLu-WpZR6gaL=J&8tn4^@`9hIDk z%dc1TU~FMn=7>^ize8!N!p5E-#<%O`_+{&)i3U{)jL3Pjo%OigekJ9jCS2}u*=vhC zl$opOJmE)Sv}G_}JB5t}Id4tkikD>$Uq5uL_=IP7<{71?;g_!OEo3@Hoc*mM*dU>rSMyW>6a6wHwSW3C+79d8;qlEJSqrS^$71huMa_I zk=mOzt|QqH`mmGSErH(`A9NoF>-f`~oxJQe6|fk4UQ}B*IXF_2CoDY}tnF#kc^?Yn zx5qSc@vL7S{>0`qy+|ODDGo_aJOaiEc`cgsn6lHJP$sn>B4@N;^E*LncX}yJ#kc&Z zq^9aCWlf_tqg-j{x_Yhy9+WOyWBAXW?vmm4@80 zKnBuw+2oxa9bZ_?j=VCF1l)8K2ttRZ3iDJs=isYI0^*C%#m4+qn(+Ej*b>-8V3yyyoyBC_518L6lo{yph zjCWs6P3o{)&CxB%M7-ngqRalwuPp-}VUc!I9z8UZd8j?8N(F|?NGT8%9>3$_o(e3F zC@_MiukdpwfT4tlOXnzc^HN^cf#`#x8PAr`C5J&e@bXi*o26pYl7**8nrX!e3rrY? zc&=#Uwb%-cdE(hRId7p)c%ahOzH*VVL2ph&~7)=Rz3%=1LBM4VHp zX-WqfA!`bz7Z2oC<%4vEPMV}nL)B6_R$VuQjGMJuZHYt|KJqsT6MhgIO!HA7q|#Hg z@CqfT*;^39kF{Bv@H58mcJhp+QBd&wIzZh=_;~gfK8ikmB7Nspc(=j6A+2VFMJ7Y@ zVOj{Zqd(vv-@8DD=kAF@Q4WuAv-^ZsV|TR1j-WB&hkB~ptAfTo1v8VUn%11Y`H{g3 ztuQV^uwIeo0LBLgpLhZ{8;@Hz~WMQck>kwEglt* z#QQein}kk%X!@MY$=J0pJwjTz?&eU__`y-$Xo7^`|C!nU$BX?BwGgu)se3m@DiEti z^tT(6eGmJCL113e%R6_Ef<3&mjz^sK9&PCzOtUe`tm9c3)t=md7#;s#hC=D#q{It{ z&m5c4==Sw?THg2oL@1Jx{{~z$6{q4v7(x2wO71nZ}hsBiaKd*YKB^-xYfwzaQiX44YN_2gpmb`yZVNf8lAqQ=qH|RztF9i zXS%e1%gpvgss5eNB|=u(gB6+GV=SaLCQ}vq^!0mk+6vmGpOd%yM^6GeE?%mul^?zq z9$l?g%qGR+ez0APoeDvx@ zSQi%lJHT3)Y`QYq67MeyrCgeYE#GTFm&=3rT=jnIBfO*p$kg7^uOlMoKnHBd6uN#ZEve(lB{o8cWG{Hk!(|T8SQ4E`V8mS{Q1FdD@l~=^vVQkki(OI9~rt4gGc~Phs9iK0x1Ey zlNO_*zQzYxoo(FZTTS~eUHwk9BsMgHyQc!PlzeldJQDe*Evhn?MrxC<>%eu<6>2lP z;))&5dj}sYo{-uxLC5e0m1D*q0w4^99^noDYHMmsksN==7(>43aXrP3x~?yu6$j9^ z3yf1NW3peN4TK5B3%?^1?Ul)SaLbOB@NXXXbn|b2*Z&CPeo$#v#{M zMt<+IA_X)iwb;o(=5XJ{j88%=meXUIj=N&N>FX|2x`1GlmD-Hw<2hg4+B1-$W3(b4 ziUxlv^p>|5FL0HiV;7shLdQv_Lkfx= zn+t!V^~T_B-dItlevhM~G7)yi(YwoF?$tbY|4i^9UED)sTFAQKpE9A)!B|_+C zjEm)zb5=;Tt3Otnw*P*8s7h*)SMWC!&1z8X*WEzLkGG~Yp0s*eqoA=;nG~4T@lWPa znnx`X?m1#mYbxjrp|G9}B)awU)2h~R^hyau`sLfezPoSCM6_g=^P)FgcB4(WtWfuv z9#{Vkc#B1*a=(?DgvidlTzz7f;@!K*o>vWP9qxSF&9D91k#NqZGf&a%Tw9TvrT^BW z-t*ker-dIE>dn7Qk&(U)?%dbC70UTeO%Asl;J%Y#gGr|5p=Fydd%vJ0YZX5H2`@(E zTTP*vhQ=H7-vK#XH_lr3*CS!K>=37)+3``(Q^(ug zG`z&2Y8aTT5HPD)23L7k884njo#y#2S}zT$f(H26{j)b;NPftVQi~DCe(i2{nOMW4 zh@OAgLl#XkrakxV;W`PG$IB}RlnXgLoaHQk?)67h=q`0h zAA4yxa{Vfa_7{j<*prq#9c(fUQ59ilS?pri>qr31?A@4t5U+!omXk18pHE$k<(Pz9 zTM0quH``9{Eu3>(Qa)3RK$$=xR^!&M7~@Rs{#Zjg?t8i~$^EyGCNWTJ2JEr)saqkP z?CH{&3Dq;kH+0xYL}N=}1^6ycd0-bw;eO~Ob+F3|K|y{Eoiei|G=hfv^qh=7O69&M zjIP7S+-oV65w#u)PV&U-_UoW}IjUkDkK_7C2%a4_!GDkh;?kzuH)5w}<+f=lZWJhg z?B3}=`@zgjP+u?SF;&e#*3CRet9lt0^Ft4}5re6kODpdDSlRn0cu70pFdKZxQm_M$fPDyn%ygE>VS67s`auToV^>*|t- zef+@OA_~6)+BK0s6abs)P;kLElMI+6LVKHou!;Lh_i~ht&s`FqEg@dZac&82(Q&3I z?$<;m{;m7M2_h5sucz#asH5TLV@Ti)Oo%%AG>daEj#cG=-@>j2T<0V9V`%I-L)YV< z=KTKiH}}ppkAo31^R6^Fv0Q@*C>my|qWg@S=TW?~L=njo)4~!n4vL*Zl*L4qJRQ_; z4SluYVu|y<9VqTG`5ZRl{X})Hfhdyub}_+4)o+jUU|8#OdoXuTe_(1f`>l4JEEExg zPu^j-OBe5VzVSOqcUzq3B0~`!lfm>n75&{&cWbYscLU zri=QAAUT9!KrHyIKH=Rcz<3Ye%t(sIkbC>gH?kk3d5MK$krgiQ6qktDp@|&eV`cWt zCFQsa%lq1N`e%&KS4jw)tslgdbHt`Sxb>a;&+SzurtXx{A-0Q>Tr8EzIdwEluOWzb zD43GIAlV8UvGv!XD@f-}wOML4TZfD`d8hQ9%pzQFS~w zg(Mr3mFmL3aUf<=vS(O74)X&KAd?YlG1WK0RRnKA*2UVdgNuLBKhw+0PC*(n;D6!+ zYvgQ6aZj{XUB~!Ni$z|>P3boAjH}T*A8awNKFQm=QU=kjS3CX@vM1~lrWi+*k3gYb zf^nlF=5Q_@PFTnMv0&*FW6*{IXOX$bAQ!j*Yz95jJRMbRP8P6$LR%fxWUAo5g$w6T z8DqIHE;6Vx(gsVCQ#G}6hk;c0a60Hj8`XoEMv4Oyc_&YC_?L4_Nie59m}^WYBmUT+ z4k~f=jgaPaAmBIUnB5z1^nUV_04g%R$7eL9WMyhO?>j>iDos3@b2!6eluoS{Y7=x2fAHJWay;&11~JhY%^zxj!!v~gsJ0s zx5gWBhP$=m$2)$J?2D4MwERKDDEEBJ8$}31S)pA@&^{=I2v6y=Jw?z2cdEvdK^^2y zFWGw+6B7%DB|GFpGZTf?3quY1T%)5ZHv!IVT9_s+ggM}F^ICT!s18c)RkI*9!{G?G zT2xbfVSD&CanqZ8R;iie8|X2eXZzRPnSJUc?$8&HA~U2D)yQD>gr!nv3E=oUw-mlNW+K{T7p&LCtHcZ5#`J56Bo3L8AY$4f;m9#0$Fj^2 zPW16&C?|oQT}X6A3Wa%kx*$P+7FR+!|SZ^`rD(i<|!b8QHDgjsI$)BQY% zX=vYn^&Fq-Sx+`Yz*6b0Z1;}3Fs=}VK9=W4GVjepk{eE{b5X;jH^oKcKgG0_3aMbU zk4LZ&vFk20xlm*`(jw={T^G^!Y&p_%G0dbnlSag5UJePNRk-)o#DTeME-8D zTL41vhewJ?-_(`6;}Nz+8ljf7Tby~6SfT5B!qGdHvChKq9x4oBZsfjcG*-^5CLH*> z7A2dpy`)SKk^O+mIPPju{*feZl)J-6E20hpK90D6Xo2omtD5m{s@Y4>o;|MCxzz1f z4;DDxA)0R(Nq(vDMR_?Ya^dBoT^-~=*6xjuXy2%St4ze7H$RA*n{p;G+3pT18})v% zXlT7FipK*X{y~NdOo$qmCl+#@Ro7K1hR}3|^p4!~RNChYcmUX$0NvYQHt~MKh}gO$ z)ec{ugyL-b(gKGpy5bLN(v#I^+F4$%hOn{Kj5XaAllCXq9H4J&vKyY*@Q~VdhzOJ+cVablmXoLid8tVqUt1Va|i}(IPwsqkF6aAeDQ#rLby>k0^M8*4|2Gu;fBaR%XOnYJ-8sUB3HwIOk3oPQ36Wxw zoGT5o$gF)TX4-=-=0F#t_10jfyX))gaihbt8kr%)151s62cIT|Gl-14%D7;BzAs4T zaICI>Da!(cM&cPB%sx^Lb<%m?Xg2ku`{U`~mgg;zH^23LhjuMvDUG2CVZOXFcBYdN z?=n*BpOuWLgC7!)dbv{x-52XMh2&%t3Ngw2I@22SOo3q=Pi{j~43?x~uO%pHUZT z(*w0V;MbI-i}5BzY#bMeXjRxj;N!|@rwp=juWVwCGjf%#LCM5HWa;sTu;zw`u_fL- zDN0?gnR}98Y)SXW-2lJUR>uveKJTXvZ2CA+c6g=Koz*qslc&TX=Si};uCHdpTfu+O z`jOd828ENNXKB1g{Kjg?pUizHpI~?be1bCiNZvDFX-vMA>FvKda$%Y>9e> zP*hOhTS!H zpLX&7#ayhkgR?wYW4w!(PZ_vDm4|~YY&KMh^;d0 zYgr1ClMCZWbbUc$XJ)b`_mSWJZnzhe4)fhc9vwj@F#jS&((6~&Lut)@T9T`Qht?<; zy^0GEV*rlApkjxFk`4n`97DQh*}p-FScY_ns~|Q!)u}%RyCmKwX(1!oI#G;3)2COH z_CQ@M8B;nB%0x;)v$!KCz1sd?-^+tgw09f>(O=V_OS0qt&{k_&BL$Y>PiomVrcA^U zqOXeH@xwSfKI+v>2F=(bdqD}L*P#W8ofzZ`p<>M^n*(UV`uy~#NM4oS^cYj57S`Re z7U~#OwFhIDW92QjxI?91;k(OYyqWbIGrnMATQmDe1;h3fv4LyJnN&e*r*VQCu^=64 zh~X15S646XsW7uiRmC38sw<$NDpEoM*nV>^^gj!EIZ9TP5~c z-(L%Xw>#-FBLIsg+wq>GvXwGO_KnyhUvveutpDx$Nry?F35~cEd4%`~0*K{4{5SUp z@BC6SA#kkb{zCf9>cDR3>K}j{jTWQh<$woB)heS$k~qP2&Lm*oh`-A0LId#zBJaKg z59~4G%da1HSWnWBjYu`$HWgG8Y=y_c5w7a z8mH|kiA_XiI(?xcy6S4^w@Awu0m{u>6TP7!Cc!dNgP5;^@Nv?tR(70n&=~UFVl^L~q6W)Zh@hqAZ_pH5#K$5&_e77h3UjJR4KR>y#72mE zG95G`b00*9d8W#0TVv@P(4@MAcnT~9AACT0To7(RmNgV3kM@M~!DF;^ZS|p9z#ol; zxMKK&r)XL)C8T<$%LftOr8lH0V&4pH^}8tOppHeQxMI}(e=Qgw)xnbbD(DddTaEkw z-lwVo8W#X#eo2zj+zC{Lz}@)jGerdTZ8b>#d$nUSr_k+1EbKVj?3hX9i>T6kYQ@a< z2os6yMLAP~;M9}5mwBb$a$EfdzX>bFI~w=;N^(`u&9NeWLPKsZyNdY!>ls3+6gA{E zWaA}x)zxOm<)sPxROk^cGP^yL{*}X%#ALUg+b!WUC2Hq|&ejQo8;=p7|J#e>NKd2x zc#bufz8T1JJp!pd)%!R20gRLqaWoG_h-I^pK@Noippe&WhSwZ=$M^Hfy64Q_Hc;On zh^pss*LQ7&uoumVKMKwhlu-(-QC_XaDIrUWFJY}bwmPd;8A@;kg|o3KAp2|jdnzWxWI6zb^C4D~*}N1*MN{o^84=;3+p z&xd7Ob?&CGMr7DFdk!i4|9JI-O*1TgEGB{+vCg?t=S5jhm67L$w8fG>4k33((|Xj3rN?MfKow3N1!K;|LyUBmDjU0 zEgz{gEqZM)sm{maxhJ~H?^cQ~a(A!^{*-d{Lyz{qmgUqoTdr8ltTL^CNFLAKl+N2a z+VM;tZ@41S?l|d{zWT+yOaA&rycemOO*91Hey;!%l9=LYT zyCh%N>AQAX?AofN??}Gt9y6|$Gk?T&u`Gvi4y$_UG!h)vmUK8GSL-upCMoSaa^CQ~ zz1@8vtmATXe|z%dtB@y$la0(`$zgI$ZD+wVCu^ttn^|1UF+<7PiV2>E5`bkt#k0!( z0;8<_vAE6Yc5ifTzm*`~i`A;BtLGq&KvYeuN=2zXc#mUpvb8rP*?#Dbd1j|`-KAms zsh(EtwPkPltKR7q^GI zmu>5zPD!BgqIeajYLE)-JX%u*_ylrNgQ)Rd^N6D3G?%Wdg2{sB?^gP(m87(~-_Gdz z35lSvtu9jjs(>$|e=uvXv!Qob7=~SO6Y){Dz;t~sWgKCgUSmDG-0ry=ittx)DuiJG zuxUD3WL<~x8^EdHr6xf{ z$Z6L_McLVF!*Yr>t^5H@Tn+?&qdhFa-z_>!W1BTu_;qO4VquU7hs3GmN=B#Ve^u6` zgQ`Fl{o$?hW27`?WhC_U4{P3_J}I}7ZGqUsyQMfH;yNQ`^r49`TSBm^tqT=%Sa9pZzyK#3pwPcRmkG*@DS1^A^~&%Z`+`Mg(oUb0jCv5 zL@QB7!{S)3J(q;AfJ0}tJM+qF>bK-w))SN6tN@K}ecPCn=g#S5M_ zC^CPyK}^nfKvE936mpod=M2VLN7x|&SSOwrwH}bDGerNxuA)K25fQzzftKQxFPv24 zPX`ax)VSGey>F9}2=wHz3Gta7T)FF{{$S#u(?s%Wr;{1Pn|fY7UaO4=IW*PdKU9fI zU(;MP##Kt!i_L>Nwh<a|suj-eLOOSw7>B%SFbCgGCxK>54!; zilFspW`Sa{r{1hRo4pZp9<$*gv{aW5?lnd_EELuFE;*gYS#7!NF&imN$N??DT3{?t$ZrR@4pz;+aSyBG6id=49JZx<=wm8 z9Oyy&@Zs(!x=BvU=H0G`R~9pTRU@v;u$2GZ9(Sg|>4qC#0rPqSw}09-g8zxvTprHP zS5Nl~?-KeXyn41y%spGH*=FxC`{|#4YHj(esfF3u{{&PaPJn=_c4TmIuuJ{L;21#q5gYfx zn0yNy?ItYc-xJiA(YD#2vB}n@A?ZGG!2M5!9gdSpo40+Lg_!F7*|ubk@)htX&z@Ih zb45;)R|ELw5bSp6ab#9%X6Q0Y+qq+@$^D`G@g7J3Y0M9=6`KDsV~EXTw5+UXl5L1@ zGGL&>0z&fkLB~UX=_!T~MsM-$wT8aG8fy=dM~6D(s3TmLYw&>cMeM8J%A3X8v+hIT z4UFSgPIo-`oFxbKqMg^1dg|`G5AEG%r8E=}S3>f#07ahAj?if#C*|#CC&O7OC;0Nu zHHofLb!H!r@#Zx!7=u+tGmz*1l#&z~Ir0MJ@i!?2fwQGFTuAAf5y`_WqKd!?Dq5YR zVlpi4ZK6R2zlM>nkqtGx99VPoo5>IMsuQIz++8jB*|Y-)Eoqju$lr8K)g=7`q^|+n z%lc`M3`8UDBV&%m6|3=S5P!V)(+?qP`KD4l_jV=au!84PlYyopr>O9-%!#Ww#+Rd( z;V~ugypPRnvv_e2;0RX)X#BV8r=gD!xbMaey{(ntizQfqOSJ+XjR1BUJr)bRQumtF;3eSR0RU`U z4Pn6Z1OV9Z4HaMy&E%21ZSR4>lf4%yxeGV~008^{Z{+`VO^#?V*(q%BLBKrs|E(Uw zfaolBp~zKLrpPBsP)hz^gng%|pB@k!{I`^J7$EfeqKsCJ5t$tWm<>R9b21~f#sbDf zsi5;{ZC_S9a)9G44%0#7+z>b*+vOU{HzIkc(Z!oa??#*HXi1gT*HrYp@Jy@m!}Fv} zqeN+Qz)yepZ)e?Y@A2Ut;M#biNYZgoYeO9JgSqAj@=3kGkc{EfQXW?I=->Rjz z&-?eKcMmo;g0~N*fgk4^nHO8<{Y@8J*ZbWUJNt`i7rV!yqd$Y&WDDjV`>0CH?7o%0 zH<`B&P(%z^2g@W^`{^m5a+5`i{7dhlZ6Nc9IS<%hwjX#8zDc?LV|INcr~EZrE<5m% zP$mY79&IWmJx zm>R+Y%Nj>uNjD-C5S;W7?e*vnZ16^|1`%eCI-DV=FWGp!B9P5Mk{X-?QE`K1(s3cJ zur|qKNC@n&I6l&5malH<`;)*nKtIS)k?;?G;jfJ@O@0j+PuCyL#cwzzL@pAEgW}9^ zvj{$TCi%aaIaxOG*E~*KD!F*Wz^-wJC=4qdfTfyzpa_$n(nLLP)(?zM+{vNiBUUOtIAJz?8u7XAG~C0dBdUh@@lk_61vlj^AsqQ>`* zpu)3VBM(RciD8saDX_kY0M1`fwEa8WM5nP~FATShxB)wn0TDmo=4>c6h|JD%YzhKf z2#N=bO$}4yDZ5sE6{4}RAko8dExJ*0@UujbWInWiEoHS7&ld6BvJYnR zx1Un&aLyRHAW8H-up2s%{_k9Of0mo-x5lwk(8N3y3DvjPiVL-s7KyMQn9;o4bjvr zfNR=OrI&#y{u<@DKV+Mv8|{m!R3*7cp#J{W=S~QaDx=m{K$Aw|{z;v^7TMnzbWMyh zY*=ZobI>-lkh4U%re6x=+Xp+h@pTVUzh+Tve(?_?OWZtqSM1ejAaxN!6UVq{M+H`n zq?xPg-4z(;4s_>#E6bfOq6VAzM9EXEoL^DKj(vWW zDgDG^sC6;1{NMUm^b2Y|KUOti} zG!ZA%M@;J1Jb^UKB_Q#4$mL^rD6YB%;5l{Z^SFN{NvJtvlgSw^h>tYrYqiL*b| zTiyRLC$<~6i2h?vd|96Exc=*KGGm=LaCW@TT^rW!Y%_uAxefbrFTm%`D(gxd4{VBY z?p)Vd?HgG8rv8a^n>5p|g|T;xkIJb}?%|!bp-0<**4MK3&MuSJgxY#R?2d1<)yqnQ zm)%O*B&~nI*v4KHEKNSxC&#mV{4AoS_<7?^4>CE#3|yn=(2crLqT^CIK$adZ$Z7R2 zbPRp|LZ6wU`pR9KYmEvXnf4bQ?(sXa(@b7hWNTl`dNU)1 zTIQJo7q>ANL6X_-&UYj&N15!Jb42@mW$j;wP>PgbPw&)Nzqb4I>;Ja+$h*eLN$|B_GV87Qn}-d}ZaQniCc(?|G}p z-WAy=sJavG4%nya0TQ4(Ft`4!yWjYEC5>^su2OW^hV`teK~&5A0cQWxCj3j8QTBO; zfas^ui*H-O=iE+}H0x;D_&hs**^r3o)kNpv8_JM@t&q-Tr}Z8C;gMMuap@N;@9=hp zoQ)+}!H=0PkJfLvqNN7`m8sAnR&DKA=Mq%l)Wl;m90ynVf>Sl;Xmd4rXB!ki2;z@o zbG=gz|1i%>th|duc-e!|ZH$oXE(wal)5dAfT zrw?4-^0L(Zq`hO|7<2p53Aq30A@fUNk!|Etnrf;_$;-?ko&e*4|s^ z-t&8`HwCV~L$5I3z6E5zc{1yGk0l7ZM;XSldVYrb^`%DPsliy6^E>+;Nk2-4nrFXe zvswjIx_sQXC_5*({G)E=1uGS_j<$*(_5_ZVU?~EicV3N)Mmk5sTA?{h3|=Bnd#=Zs zICcO`OK^dkY9|=4LF7!Ykmm^>3C###jZZO$1#*av>|{KCxK{@k#y&p?1Kc8zRX-Wx zPAVKWxnd2Qt&>@IObIw2$87Z5156kev8LWRXMhQl05D-J73LW8Ai9fFJiM*qdzryA z1em#SCF2(@y{iBCY$DZ~w{TtJo*)|j7E|T^dtB+nRWJIxv3CNjn8kjHj(rq+#T_g1 zluHFv66{j^+@)ALsAEtx$TGQv4(g{F<6WFA@|oI8GZ|_iws!}NNyDVTF!8VGQ6g8I zxT6x@)}>b|Vc+2YZli+0M`J`}0k`M9YsgF_#!EhD0bqIVl!nsUu8N=jeFATbRK2d= zW*J7Cz9WlbGi`8?e7Srk$?|ZqNirZnNQ5S!hsSyB>mvxH~F<2jF8ux&}2jRW#WLi;q9sjr^FJdY# z`)Dl=FaQnc!T->J;?}il$CY!mgJvESng<*JcT1?_Xv)|lH{AVyj>m;xwO?6%Y>k|E zv$ksx^74osoJyW;=B#4>W%@2RBUunmpn`s>ak(x#Kyl8D zH>Ab9hEdRZQQPv-+y40;kOYvXjK_DHcLCCr92xoRb?eJFu720gS1p^xt*OIbYV#e5 zhiklzt#LDZ>oT4lFhMx}yYV9IS7?63zP_^WBo&9+>2M6SxVQhQ`o-3L^NhW%U;FEE zUU`~Cw$1x0&RZb0!?z}RYw7Dc51Y7UPkzN;dG4oDg1AZWvblF>e?VP@TFTiaxXA9X2b7(4XgD# zgBYfN9Emb00}qay|GRu`dSkR=rrQ6B(-IY1OC>d=J5=N3BXs8~)la$GH% zx3XJ^PIQ}(*w+^gsW4?dkA&UYlx*%myZUxUyLSDb)A@_rT+krMylO5)r-gF=6|o$d z4PJxBp_AYHV+<;r!u_;>i3^Fa&Fy3fYyD!e2FV5N*FNhz@U4ANw6HWi7~mQLisb>b zoji^3on`p#A4@H*^YbcoitF|8WR|7qM3eA_JzSjGXZqbp*Nyw#sZYsTOHMm~>*E8`0<(LOsHex=r<3OgchYx%9`OJqrXfTFTD~Qp8n|femeoC*2BB(?d$vk9 z&9ZskJ8&Xf>h+U9M!#SuvtA$`z*;{BgUjm`yGYi%{?ZVv49$s7IJEcx;mDg*Iwj|>`qO6~d6j=9b^;^vk>wB~2Y{y8+WQWxp8 z!~+{6|6FE$GjxGw4ugl?!$7YvTR9eE-n*sRS0&j`j4S7p*=FU0D^vw^eEJg~Vup|B zg=XJ%_mc;XTiOeAxy)ZUwRn>IFUxo`8@dsv5E$%Bwy(r#10S^oE9aLZVUq3|&hx^( z@@;h7Gb})#R*!z=j-L)Vis@US*=D8qwF!dWP!g-~$$J^x539HqU~ZqN+dex?mOU7? zp{I223Z$;{=v(z@yu&B)Ye_6L(%kM{LuW;zthK+p29d4Qjk_}jM6>&WqwVBH>&Zhs zRN8DgWiQra>1paaGY}0q`5PsEU4^8de`_-quQNUfbTkNY#JNsh7$c(B7v6V)sEf&* z=Wm=^p7L^a7qi-S?^nk{Pdopn&>2s_Ol|G- zFo3ld{REAxrVDf1*o4q*&krzC2|FF(=l@73(PsgT=OLYI5|b+u%+bGl_9agz8bLIh z5om9$;%=fM?&uAOMkwJyO6b4+-$j-Ay%ONC@u!@85raL6U{{kB*KOZaj7rKK?d_@nkPasQN21;P`-L&Gz08} z20C%$mTiYq{;2~#=x+-|Mt2vMn*@;2JkR`BDF^T&y;||SP+L+rj$}TZ?@sQB08l_C z`0L(Vj4PfZ1kelbNK;4+dVp-_F_2HgrS1c%HrWp%fKkdAqV*H_fQmBXo&V3bk$^GL z>a@^*WdWg7a#I5#IEMs!MCsZPbE{>J69+JHLE}A7^o!^*?J$favp9?ge&s3pwC{R+ z0J$LpB=iJ8pp?3=mdZI&cg{33;go_m%IKe`ri~A*Z0|vF4;+ki1-d>P(p`|d3S%WEAIP55{!XdcU&vbN_cQfTtFL zr!a)Js^iY~&CHRskp6)`?a75It#IRb<~yJaelM5!`de+_!k>8rzXoxI*@6>RAxuDk znzclE~uxGGjHJ`xf`p4S&Zs=6o zDsO8||BgLvsmS!_-N#oLY5wB-4T{Ro6aWBI#N$dSvS1y`gQw1VmBu;UfB>~7LKEP~ zrIQ((%!zz9WfZse4s8Ky$){GrkIF{xt-?q8Ns4oa7lE{0QlanOd{Z~UHLMhbA5cL#m}Yfi~Bv(-NYox zAF_dee>dO0)56sm`DX4zTtYIoVb}Vn&&ov0_jMvdw{j=`2Xf}N2ft1bZ!ZaU9b5jG zVw)N>?9bs|@w~x59*xzkJFLHF8GY1ieUA3|(-iP%Jx3JRw9*x-o$$`X^Ck1#7e>!M zx{lK@BGiwS2N=4Wz6?Mz` z#<5=7@s~kF)C=8dzr+`Mr80yp($xB{F5l9kIq0S>3;XR`tn2BZbKL7Y1N&n518+&U zku4U}?et)Ia!-B~0VJH^+bg(XlNr{bJ8ho-=jSo^k7Yn^t+gTcRww)PLdh}L6v@ko zd<}WW0{yQMVg>4(&IE~_krGsC``^~MgEU!ECRZK>jh1Bx9)msRUkI(_x&@QA?K=33 zTUIpk*DtSrQg0L*pvyoEsyhITG(5A(C+{%9q5OP=IORneLPC*R={RGmt=9I;)Aapo zu{rxUKd_%__uXefNt=`$*Dy=S_RN~4M zUP>!`Wfrri;pR0pIQ_R=T}CEHHtJxl=RMCOKoB$I04n<%#?#k?xnf>*XBxnIwAPa}C^PEPr;XrdCN}lil)*|yb&2~!}fY( zef;IO7yv^9qxr}`ksTB6Q}lzQk0Ah3kQV)atvC5SM+GFtEfCA(=y>}rnBBZ^c2(mP zWzW!CXc5H9ycz?W@>UVyduOrzimiO;x*C4VtK`13Wj=FfK)@4qKoO@;UU$zZ$L&_j z?M{+=X2t@NbP@FF6@<%7|MbH?W8gCV=4w{UB7MOFuWJh6ZpeB~qE>rxE8C)M1i$UA zoE@gf5twjS=|8@umo^~@*g=d4AYFph5M#}c0|E?@ypguZe&QH1(7 z+v=M*4-rp|*P^xd>iqBH@^@so68fJLMz>(Fu`UZ zZReO)cEOZGgST=I#BXnbqMp_0X`?bmjL$Ly4>ubVTL@@o8B9nrk(D0DhVg?YzNaOm z`^bzpTvyA5hy6eMILP_0j{!tYVcaEOU3R_2$NOv2aSxw5H8lgL=&P@O_HN{Q4k6^d zceO2m#3Ze|ZB0e=LV@3>C1o2E_`<5O8SRHFpH8mfejtD%vP z7B4UoEngk(W^Se?Ph)6By)y83BcoxZX*kS0iTA#FCa<`8s1@fsi>na=z+U1)PYa8R z_mC8J_yB=V8vR24B1zt$N2j9|DRJ|H>rE=S{JkRgzjqTU%|^u}Lj-0NwkR9|*i2vE zVBzFnRz<^VSM3MOAe?0uO1b0L!>?FLRgincH5qek#?biCpsf7k}^#JYP*ZI~z ziwb3}RVEF1ir!F^dmfR&9Jh`J?S+?-^N-q&G|e9zNn^P5m5!Hm?sCHzRSi(~f`_X{$&r;tQho|&A<(1r#ZyIzhxRST17bh;yzUfA4kvk* zCTiVGmnO?58Rp<3XJw{u&rU4z4fCHoI^pjMglYGs7t%fs9tOztP*2J-#N5F<{90bQ z?A6*U{vF=5fjy1?8hM*&%(D-tVdxHF7)lTZP(r%9TN$K7xg!AH*8%qOXl{C}H_ z!wU4?gC28Uv@o0XG}IHaR#Uv1Nq>*U42cpubnu&}7~l+Zf<8^-SXB}aD=rQ0+^PSa ze`&oh)z$(h$MR-$$R_;wr5tAH5TgP-U2~z2cYdcmb9KcaFA`J|o*eYL|4*{UeCe=W zyomE3GWwt|DhZ-uyiv!IKS{#)48QW$=kRoto8i}=aNQ@c! zzSYEn5*++dGiyz}@J-^yGTG)1KEO^v75X@CqcM`8NU^95YaC&13%iDRR@s~ zQ$JVSfIe+h@yd*wO4kk!qwv#cG2bNqL1V*Y!S|}ctuWZB-7P0hUw7VjzzZ*tvT%i~ zfTZyk{AIg=y*H+a?E9oRQ}{30eLs3g3QoBGe8fN}!7_v@F|9)#IJ+onb4XUv*6Nif zqMQEo=L<}j0>#s(bjK{fR^U1owjpsuM?G-im#a}t`L~mCr@E2$79Fwa(yOULHb@vY zY0#tC)M`mnTl%u@G`H)$0d5Ew!2!8JFdVPZw8PQ4kt3YLlsSdOHGs=di+aq@=Jn}E znyBbYuaG!@aSw!y{DYvI=7ob6T-D$xY$s!PXkpM67bG_ru}bTt)=5?@I;ZB(y4QG? z*G@tyiw&ByNb?-?miVT>`T2WU@A1M2Ik413EcH%$;&0fyV=3^KJzJI+S7qxlwvbx5 zzw{CJHf40|2A4k5{e^Bc@sgr?311?@usaL&^zzy*WIkRNV}&pVL+Z+D;qE*h@XS`M zRb(<2Wes3c&4nluVz+o84spVqIv;%g%%|XJTVM%w!`b-T-X6su3S8uYg9`5ic@)l~ zbR#h?{T^p>7U4{csdypdC_9X$cet6j-4yy}b?ya)W8L@mxB4SU3><#c3;Pjd6Z}OW zINW9J>8yc3Tz`9~5M^54Rr@Cq^E%1U{;lnP3^{?lN?)G4DRg@s*8z{B5tJA?YupUM zJ6pk(k);N!?LnUczFI!KeKoO%@~XM#Vapu+(;`w2ppCq{w|u}#fB&Ac`YTNKi8@8) zkC%CzR9cH(gMpF?f5beQ+B7KJJFA)m>&=5d{H625elkX=tY9jeYeM=SO^OZZKr6Db z!kfZTTI)s-?mwYQl0}-(f=GcQ;%$QatSBlN{1<{mNfnPltH@eYE9~nMQtn&Aa-G0_ z`{3&G)@#)xG$l1Guv)pZGpjEpEbD-M@!F5Rr)@ZO*;KwRS3>l{Tacrg>ge9c!N6f?Z_?vs| z@NHKR0O+UDS;D0)Pbc$CW0bI(95?n$a4424+=J|SNqOumL@k}i z?rY#OTL7WJpPmcW1}aG;-l|tiu{bgG(SENyhgT)+IB>sQGj+k8Sf)N3&roZTjhu`^ zaY-3O58*goVlqJV3by=O4`(_H`caXn#I+>vt8+>L zYNE0_)I+FbE+0F^^QZU~wPVz>ZEc+SW!BMWM=5kIA#1A_yt%PM`r3VhYeIj^$#O(4 zoN+tf!_y^xJMJg1y+IZ>-2q%mukAz65a6gR(6j*u1nLDIDWuYf>GyKcaI?3)v-fA~ zgtg9k%+&!AfU>eB8dLWWfmzsvLr`qj1|_#zb0u zo76o5dLw@4#n{e?{egKb#ktfU+ltTg#GckY%LIM-W8bWsY@X9tC_2Air$Q%K{o+QO z%(q;gF+TCxVjRR2MEmfWu9NWosCv8CtQ70zf z>lNnbB9$<>A_HwXl6hl=liUxT?jywc$oLubkj5G)JD9?(}RZ}g}k?!Idr5i<~_4i z2-l;Fc3Uh?Q>~<{jfa?0@g5sfYt=b|h_hC3)dC*{`?9DxHzZwt_3eJBBI*@pFtv4FUmc4>O8w~lwPpJMpoh+2{CSn~Uy6c@lqCrf2q%;c;4%qO{e?FWxr7@Re{fWE?S)uA-PkzYwv+tX}Cj z>>oHBvSAr4>7DgREv@MNjc65g2&IUNjn~c8i{k4YYo?Cmd# z64aBgh8GNQoH_m1SDOp2I-~t+g-1nK=fg?OLR7G6h0f(SnjW>wM`>k(*J`tr&67$b zHf57+eltMRc$Y|7UeKRsJX~e{!%ot9|5Is!`{U#M>tQ8&?cbGySlAp;8AcX6mu@;7FTgqS;N^!y6=S+wxBI=?hD=8Mqw7#l zHU=aH`6eSTW1(F<4rnv`2HAZ?&LwX1aR+OY&Sr11*m;*SePb%6^))=jXjy}N4h=$r_!g58 z`ltgYH5JgrVWg5sIJ7?_8&jUWXfMK?abxz%SC~^V4?1YbW|YGSRfjw zQw*C>Ab60)FT2+rdsw5G=-M-o4OvVpi^MnG9V_o=242-|-OkAR2oc_>t<#wn>4*;bhi z{0%d(E7V&tuv|z~;J^X3LuV63M46Z7cj@d?Lm9kuHl#${KkNyvD#!sIEwd=>5wMD9 zlq!rFPE4|h_c+(XZ8u9;ALr^x??+m^01kSS;K1@`UNEylCrt!Ik%5buSHsVB!h$Uc zXVu(wnII(T3w2(0ow~*|t4uGjnPx6@EM-DLEPJWsFW=v;vj{>S29Mu=Q?}YnXu#1- zI`fr;IWD5T6S!O7J+t$kwqKI!`&gHc!&YmTEGN~$>}#fW`H9A998kc~rSwW2ec&WF z>CazF5|C znP8P*n4l>G+ja9}{jHdjnv%9*I(ZI&sh~)$9sWcKQ835_dyCT~jtjCle`x!2*4*+H zZIN^@*wjon=2FX)_yQYb>wne!c-K|fH>*m*Z8^vJiT}EeX#`C?7AWX`$7aY_N**D$aWHJUPS5Ff81`@3$WDx(cLo?fZ=!kg_if zre=9krDJQ+{VNp<{K-Xb`I3FlhSThv`$wquC^uJ+CfOaFC-fD3GIoeq3|M*Kn+h-8?m|76!^45oqmdZOWPy<#XgePq8=w=uV<;5FBSYU-XYs@E`P2vbbdsYE8V>`;?K z__}wFvuf-9?$^QNpU9p&Ec4j>65prgPK`+%f_TSEzx(6fSM6GTp!2Rjk>WG4AZ_pA zqjb6vPlfUWnxL{UP#ZOLIgu?F$wzCBHeb2MAi~;o5uCjslu7)Cl}z;(iStsVbAMKc zZ~q#w2_G&`B(j*bcXjZRU&aOW5#~F!cS@mimi>1G9YrO_jSmC~M0{G-nR|W|o6}W) z&Co7~WAmQ^G%~3Q3ANNz*8A1;2XV|IN!YjsM0s8;bi~Y%tC0q3EUGp#wv{@l`PgQZ z4x&JBQoF@`Y95|EG2Ho6R=&b7j9iqrWxKUm_E83--;eRYWh>n4VHL#$kM1m+)JX%D zQK8osz6$07I}UwzWDFU2&N!?P9lAFj4da6`)Qf+-*iv2&O;bJ?zw{G%MxJ1OO8f0) zdIB@#_mk|iX~OkZacSC&oIN@wEXrsjNu~gzfQE-Ml4l*BCgktYY9koX-(^%}XkheX zp8H~S%VxFWGrwZRivgi0CC$SZs$OwdW#f)vA*;b41h;JKl~bh#`_H;Dk!G|X8!S2Y zQLFSl<|y|nRsqyWwTdB_Haj-I!}4(2J{l690>npNwQ8;YJ&@zz=~VDtsP4!F#tEbjt1 zmF&3XeH&z&ezzTKT+W)mr5Lc(MRxs4B0XVeVoTRB=PDcBP1ewVkbaMjzQC7@vd`0I z(JO3h9~sW%$VGpRr(14A@+sDXDmgi>U-kaqrfgx&6{Ew}YGgcvmg%7nab{NC^ZFs6 zbes6YjCt3(zI%KhBela`r&CCt0(@8&S`V1o{eEBq?{m&`2+LT9_%gu;aOA6)ltw?y z8k}9i`%;)D8b7bqhzX{MgCb|jn75O6z*a@~VVn<#hf5V8B;GBOff0QC&GI$B)H;?( z7`T1+5-*vXYKv3uf?JGDGbM>(!dSlh2DFAL2gDDGbD~#kY4LlcUz4kH@xg!Jky^Pc zhH=9p^Y1G#>6tCw#i*;IhKY)ahhbIzbuyCYMx3+^S2lq@Ht>)c@+@tyBB0GnC&Z@R14K=qrm%SN*MV%(eJ=uhPY*9js&*Vq@%Bs>{K4f(2#M0!b)RMz6to`&v|uJSDx~H;z|v+)Lr(duQ1nxN#H&#k zoip$Dbkg(4VLj{#>4I29 zc7EpBO9C_I8nPx_p`sesm+XtM0254SsQ~1LZZvqpo-D~{9zG&Ct4qatEAVlMbWPLCWl}6-HxCdG8DqQ6O46fjXpDj4NT~iQS{t zP282l;@Fm6Vz+tQ75>09JvddaH5E}9<; zk1C5Jz#uYb+Dl1Lbm7^T(&8!FmVt+p?veM%E6Ao3@imapYsKL&g>%1dCR7AfWcPYI zc?&U}ZA)*| z&h!Z3Vj=v=C0D6!K*%0>Jqi`$TkHB_m^(0Rmnc2slt2*1%1>H7+b21bz{rBZ#Hz4K z$9lrprW$w9w_nS25vzlLIZca`42fX*!*HL{x+~oFb1Ml>&^w6rC`Y0P1{wv@+T0nr zqH%c|*m-8-UJw=akBiD9fZI>@Ch=_c zIZv!)xICg(gaaQ&e~aaC7~?u6b891yKj~x9jaf4&fR*{4l`ougkElmJCH&U)+J>5Y zI9Bk>qMY7toqcodGMIRpVzD8NwL)=FSDV+2l%@5ozy$2j30lv!Rieqxj33!^Q<58n zBE#?3*Q6)zJ&lGnwqvk?I)fzXvM6ntS(HUMTjla*j9UI?RBF!qNBil;-TSsROA*{& zT_gIKSd$3bY8K}cRhlAQPB})*t1d6WK7#Z_S8c3X0SUpTV8d&VF?$C$l(C>-sZXhC=H(H~RH_F<%-j02K0RD@lDPY|t{piDZODK@e z`UJGvd-VF$&_fdjK5s3XWi;}7^bYCSpCa?>p7g%y8< zMQo9|$JL^u_&CA@b4WCsfOAv#ru(4}C_XR27kl|h7<$k`GI6z{GUj(HM}=*tupYwh zwRiuqf+d|%Sn-*$T|G8oXV@~fJO^8w-V|)TvHAx#6BXv@i#N(3SR~UeeUEeO%5!}9 z(IOjzJN;9odDBvCyUVL&DROV3&AQp|&RumxbPv*ww0I1A9>KWI2M>UuJ{j%v?yFHg z8jKZ=5hLff=y_pQ=lR?zYlYc8$VcfIhPUzl@_(E(2`!zxJXv5?4v(hIHF4p&?4_g@ zP1@YZT9)QMbz2>VVQu`}&)6h^@pQ~YlO;~MUF)I`2wt6(0p#}JaIL`34t(4 zTgPIOh-?YVF3VoH$Xfxo(gWrr%t`C=>YfJEd6zLi#t4n~LQ@xMT`>xZ1bi%f|4x zuiE!7%F4g~_S|*Sx#MU3za{1Qf8)bX_gYdyEycAlg`y&_N_04CJ_AqHksfa8>0?h@ z+0hW5nkrt$uy#E6&T3u99X6)yn1GLnU*at_n|PeE`OKfU46tAt$7X=v#`$yb-0VBj zi0@S9ntziD;O3dN)`z7vrBvJ2Oz^(63~_aU9W^cHjG`KDb!M+_o29-RYi)m%&F&?{ z^O>2l-bfqPlv@)G3LW&IjURDt4~3su;aN)%;AO5x1qaPLIZ%RU#9Uh;`DOfl+il2Y zml}X}p@D3>zD6ow_rAU3WsSj1S%4=e)unZfFu~Pa@lexCOOy+=Cg<_Z#v4%&OW5LM zUS6;{K-iF3(P$u}t-WS}`7QQtxcHq^3H zXGCHskE+Zc4Y}MTTv4zpe)UOJ$;3(nD$}j)Kb(Gct$rrVdo|ZI^xoC0>>p*&@6+z5 zlMWyPEe^qGt;hJAZ0^}X`o?em#yVXc@&tz>mX>zjo@la>MD)u{;pHpbZVrd}qtojc z=UoSf%;-W|mJw}^VIP&vT>_Hj7Tf@eqOKQyzY+f08Luq0Gn6jX-RnPfEx1N|H({bS zV;$^cE{bh`x^gy9nvSqFyi(ozAoe*!f2OHeUu*QDhB?FFd39s$ z$wzEHXub5yYz?^5{(qJ8QUa&XcPP#crV}nJcAgLM%dLf_B6kte zrDCc8uQqMc2#+)>e8D`MbU6&u`zHH*hHF>Lt8;X;JwMq4*0i zrf^V{2iuHP!k_a~y~gPKw$Y{WGv4i_1^ez~R9`8NVtc`Va-fH1T3hr{eER?e zLm|Q^1VXR#Q_@gv2vpy&z+#Yynp-_7xr76eBII0(Y@Fl*+eKNk8U@o&Y0rm$8;^ip zDAmeBK+&OEsW3yTD?=75SQP@bpc*--#Sb-0r`6L%E(|^Oe0nk%Sg$ZQfbFj+H*CIL zRMRXQEE`{_fhGY%9UTOqO(xE?%>Zl0hwC%X8|p!p@1NopI^tQqxWwj(7ps?c$t-Hv z93KfmU#_lIqQZZUe}Luixbf)K7BJnmoii5$d4T6x;#O@VV|~RzS^jPluRSxO>zg@9 zBJe&UQQT1Nk?`R!uch~%9=6_Q@F9NGm3lqum*dSd(y$w1Gn5DN<l8PE%MHO=Eh0#y^ks zZ!mb4NdL{Tt+KNjVJQL6P@00E5AVB1;>TZayf&G0A2$G6s#;Tdk|Z0Ct$|+Qhn9+S zmiP>NA4a96gKjTPte^KW$dfqF8Pqz)U1f~;!LR&yfigx?fwRysWyWD$#9YqPmr){1 zcXbVU?x>!k(0>7S{PqjXE|}quf@!MUEIkvi_Vs-!vkW?&e{Z|R=pLzt>z?rb9c;U# zp?O-|K+~^FzD`0?{4iI;f@2J94@16>^2`)-{_NVVYakZQ6zM_EP3vdq3c8X zfKt{X&LZw2X8Bwqr_QMefhNQEHM()d-Y(Sn(K!-dL_H<$2F~JOg{=RSh6-jrS8d+= zVRlu)y_MBGplhH>UTBS=-?C6RsfvlasBif({(7rHNW=ex^hhV(S?gh*MlR!Ig+c1nvTwYNnqc6d7P&MTwI5)rr>guF^5C2{kw@hRuKZPS88{=Kx zr2oFdcp3iZ(PxxO;cU7=6j;RwVKVz}igoueGoV&~?#OenFPq0KkWcXnavcmTgSeEN z*9MdK_P3fZpm1j`Hj+(12x-yazVqF3rHt@U!$rf?j9n6-<#NpSn07UpL)XWqKBf{t zU7z^xRfNuK5@7;?ko|EaYbPR;tI72FGW_qOKe7!WGb6nAeo07{yz+EvXyTm9XVv)B z3HE^V$M#6|+G6Ko&gy|-l$zFlLD1Dxn4dk59Y=1nS#3cnf>q*>q+j&BSk;Z16;L4u z4Kx#qy|#`S?Ft+uY%w|fELe9LJp4q+R{XIF8GR)p{~`SGqrQ+g#f(u|AB2c+5@RK$$P-fEkz;C#6 zv?4=*AF8BE=1$7csDu?uOiRhs@{C1NKCDg_L1c+X(gYMt*HBg;j}g~jwg^Vha>)(` zYQHbVa=P~pnbbeDX^r&XO=>YyGp(3-G&YkzGA?AR#ab9Z!E~n`?h~)K1bZ}U_%*7V z1r9q&Xit85xD`2Zw$=- zDGfaW9@<5;97c~r^G`||&RTD+EHy@*lai+5fYa7vq zv*Hq2bW#G{GS4J5e_xKpFQqrG&iATkNn2vtVnWp`e?u6F>cQCtDpUh9E&m*StlD$6 zU{&cLa1=7_^Mn*FKbMPd7E|!AUvnqF>@z96bH12wbE179zcfvD!89koX8N!#k+a<@ z*&4aj|5Tg@I1>A7(ZU*zKvghD@5w-6+X5VgrcU}Moxv?jfYX9PXDHIx((2** zZO#n3nLbmCh@ULtVq>o*@`gz=c2_h^uEoXf8ifSic?tBnr)WhGYSXZf0fQ`C!Ixjt zVcD(zht#zE{x5r^UQ$0uTr#60(5ay$+?`lbVciIC*eT#YA*IZQSF}j zX1anTdO8;ZMnM3hBNYV{9u<2D0lA}N@U)dSkG-~Sb2FaSzz#iJ02w4n#SwyPrm{RI zI>kR%0v?^&tBKCl33-cw3cm=aENASva@a0vXue2gF)-nW?pWP{I5M~DB5=TEQlZKX#E+6+@pfM@6$JGQwC)nAXzxu>7i)c zT`Gr`E@f>`A!z?#-rX?b-S7}=VBWMPJkX7(d{jr+*;7F;-SZ7ql+*9+7|I*9I@2AY zK7H4ljNx<-R~T~+7^FrM&E9ixnYNQE)&98{sTz^_X1vbk*R;d#(DS+JRML#d!31J{wf;eibvh#} z2JQdNTNL;c)IH=lZOb=Qzg-fK7(~zVPLAU6wsP?UWenv-vUx}&I|`Ol@dkq4iD8ux zSzW=Hm#Wc(D`1Wg9b%6VXVOc)@+$v>p*dgxdT?`8T52r-F@(*8uc6;Sl~`m%Y=mj#ak>)dd{GooTT*5wL0pBUu(>l|G^!8vR~ z|JT!T;B`&z)oqr>?B83J)g676q{?F87Ae2k)1hcyaZcXGj?`b*;Pr7okD>aV=W65n zGh+Jddu4LtT|U{eqUHETAg>n{wz3jJ)`#cbMgrH^Y3p@rsX0BTS7@vKRtfA z?EK=R0BFi+vbdFNlVhhmuTa_ZfAcYAJ8WzQ$0u8MGY5!BDHb!@4d7oINzh>8(}XOa z=B-(`<$>XiZ4)<#rc>|rYTHcLz1j=d`W|PN+g_7z`cZ2hfdm2IwvRTt&Loz3>PNhn z0)5gC))!VKUFT_rUDxOLBm;&i*1IZtM0qp(z6mZC8KkE?e7XxcUQQK}NPN)Pm+BVs z=U8)?)0ZV8eLpE}zhNnj7B(ePZT{# zCezOLbFuS)RmC6W+ZwGg82wZAT#P8^cS)42+qDO3LmDf$$yb>H&50EOWk(A}t{J-? zvm;ZmnYoO)>iMau%jXi}RW;M|FhoT$n#-D+_4#Fsnt^FP^47T?i=e3PlWV~rVu5T_wiE9Vb^b!bsT4+S;)K zbsY?;aT&Z2aUFlnvP!iLiTl_x)Mwn{p*!@%cA)?^-W(W|45H>8(tXtCMk2rak@CZ@gIpy(J^b7A(W8h!pv*h_O001Zr1T6Szw2NVPhSa( zl)&B@FNp2OXA14#oQLm>2kM8fiH3#0-Nf{jPP(H% z2T}j}2`Lj<8hLMEhS2wsCKVUwyp5rC1XDt@8_KQZZa8K; z1N|Dd=F$lR7Kv>JqFV0z1C&BoYPp5ZSB~Bj747vLmf>)9f&#Jk^M7|@^Wy(a)Bsd_ zsC6Vjvc4(Rb8dcZK#nSn;K%?;fLu?DeNzL@s&p)i&w6yO|ABjGo#qXaH}I<5T=nSF zAL_*#8OD>KA4oR5v01Z#BNDw!CKR)N_kX(h$_tuE13OgvIaLMqKn_!}N-V*D*A9VZ z2>2{RKblcLfRLz9((6RY^G84C=ks4tY3!$)Ajth@j=LU~5;Fd@`A_N&LGFJ&J}VJ{@|9+B(ALe!#M23(?6>{z$~Gn7xBFW=OvVJ7RA*6jJZg<16`ZY8z2~w&{d8 zK=k_=2wmEp>ug7xdN)s} zhlC#Uc+;=XRiRzR0no{kwp|26CY$R@mS>!!dNQrl&K|8*Sq%+-i#{4mB7@%1?oo>| z_NKN^L?V$Q@QPs92xMwaUZNa_qcgXH@Uy|C?y5C%-=}@rWsNg1BwQs;4G7-(A4RwOmCi= zaPMjv?IT&VpyzBCdOpBcD|4|~2jhlUimy(<1biUxH>cUDwu%b>Vyvwyc zKWeg?);UkRd@b>E?6B;EOP?I&H_F?$8Lo)LvvWCpDP3rhm?|_;fRus{S}_1cCjd3lpBYy*r2eRj zp`7_%=3VJf;@#-Xc%*X_V&xm@BF*iq_}6YAWbHgTdJwlgrBee+(wq?ck>gps8Ob{} zr=`U#O&CmtC8*4{m223!ZY6-n`<;(-`}5qw(_t&6!{Am!Hze!Z1y>m_+b|o$rp7Hq8_vi&J(iD5{?!v(@R%a zG6Axwx)6}ITbd#eBi1RV?WipQDsJmS4E<-pH$^K4?a+R|vo1ZJU8o=NFy7eD*#BwS zZNQ)Tftra6h?Fhc{w!qwHsz+JrfNs8x-r8tR625|%TA1_4kjCZH%P^)dtatL)&Tj z24Ftk%6FB{ov=5iAi-~8to!|0<>r29a=-^<3qe0tLCundp=kRXaK^+2Q^J2S<4?=6 zkVkWh4z-OlP-+%8YRl$5ahDGD!}B~}|EEMscEdc$9TNegLiC2OH@RrvNwZVfNpq0U z`k}9QyCuB_N}sj-@F#te?A^g{g0Qv_Z)E|H zI{s}w8HBoTBl)9k(`H<@F}xc7sF}7(hQsRB|9%!yGec$)qmK;%p2I*2ROL8*IodLpj? z)f78Mq9%A}x+H&?ng}-P8VOot)mvF)h_59pRt*)KrSqv1F1v*eh|cl)>P3OH-PMI1 z-)7qX{L#pU3TNFxktCJcBN@9l=cO1nf&k-}06HGSYuu>yrK;=52r z06QbJ#KBnHV(3SLjIIBMct2v#>}h?>Syur>sJy?Z9q@$MIY&{>JC;#i@*qR3a~?!sgW zR=t^7GO${d=p1)<_=y?>U8bDgwJ2%YqwOxK+2esB_$GxH%NihR?gIOPHRd2)0H$91O%QdvHB2FRIwrzR^=Tv?GlwLUaG3Ud3`iTl z4n)Bwd9602JOR9b!s|#wiQh-NRZyTlIO8B$B#e4&K&Z|6Xl=KXp=B9#XW*ZdE^t|_ zwkTSs`Q!tVCHt;1blFev6EZZo+&8xnV8=A`zf$rajR)v0sVQI_RBs1~Is$|`9xy_U z9z01#vRIY_*~&c-8mt3Be{R}FF7lwkK(x+H4b|TLO=6T0joOU=45M1e`G`P;m?5dc zVecA)VHd!!Q>0NU`RjKWiSmgM^v>!*YhXxL6io34_zAW-^1)qp>>q^c1hyz9z(Y@v zEE$>Fs7KcjbdwAk{G$gPjgLg}OQZVKMu6eo;bSvk5P*pqLm^Qv|3#~z|NjU7|9t#^ zRvfH2Qc)(q!2hzPl>ek%J1rgwXzL*YH6sP64jU9LLJvU)Mt2u(0eI@4Q`FbEv$(0# zZfU4QYsG2B+Jk0xvE5a`k zNJ}G*EY5loq|jW%;4=hDt=K<{j1TGq;8Qk|Pe6+FPJxG9t7AlfA@ zu=gm1hbgdkcE+Bms93v-04M@jq;Wz1b{z)d#gauoafPlIuLDBhgNXYLUrnS?i}g_@;uD+LLU!3 z`x$1IR5;5=8m1X&_AapVM^OR9gZuUhDt!yYS#Ji>BQyrZNZlV^r&VdFbw0U&9((o0 zoo%*!=i0Fi1cpgzs5%1sroCSSH~Xb&(>n(}RX)2FhhOJTjhwHgeM)zCoS`6V~*G2?x1A6tZavW|K6?U(D^i}6&eO&X zcoKf4Mj@G16D2_-^F9+Y>$?rxtuA{GVy%aP9KV@eh9cn!sB(wfnS=UigWGj2XZH2* zT+^7w5bR85NjZvsFb&%d!@pdLtlWPK=wkl|jYI_ivU#F+I%-f-aG-_`83t+jIg-ya zG|G9^M0#THlN_GSz-w@na2<(b2=PhriBCbNWb<^5ie7nt1Qr$Aap4I3nyI(b+f4M^ zA$&AFK3;~T#2pXocs3a_*2A^Mp4((Leu0qQZ7OKTf6wDff=z4Q<-mL80sH_2Owfx| zlw-FQFSV<}_+!jyTS?YmXZIJS+D1a9e3g3__Q~ftJ0YgIe3}&8wx2_=9^(waDGI0o zGF2a}QetDCMjfxRKeCJGvNi0^X^9r2X|!o9c!?QE38UUInr?y$_ozQui}bR#NO7zt zRAI7{t>L=gebfD)2V zelMQIHfaY7WEHN-5@Xtr-vL(a)tO^kbXt6C8esY?dxnp{A8vX`ZFz_U)ySwk;#Y7G zc=DM4WgNTM^N!B3S=06)xKVIdyGQ$Y`&xT<`}_9mUfx8@V-I44Fa~$P$N5f3Pf4a>Vhz=s#M!`iIz32| z8uqg8PU4^ka{=EV)7y1@;;gEJ#M&+%G@y`hnAo@g4OitCh{wAah2KN)C;!_p0Wf(J zV2Di?b!7p2u7LWVAsHP3`$-7ieu+d#Z&njSM@R( z!6fk&u4!fwzKhAHngIvyzQD0NEG7i_`*oByXf40mNF~nj-8sEcqW=s{qCaZ0!Fft` zuZhK0tpOzjj4&Et)I%_;Mv(+8-xe8^8{qMgS`Q`oq}?CqHch5@WhRgPrE`Ob1v>~% zU%nQkfG)b3B#}g0&Fl=)GgU`>P3G1O9#Ot6G5es*nc$yjA0)AenYT(-%btZ`;7#9Z*yaA44Ag8Po!w3fJ*4 zd3o_YZD%{~)*MIFGM_5fl~v?@6tI?w6MV10LivCdP*y5{;aDQ;lSK4@)lfmrfUp0` zp9Y3H_9Asha~^3sc|_hLb1{#h`=Ua@Zkt5$s$9KmiW@_(Vue<}os0i#r(4<_P1;XN z3BO?eHs816d{3hW--_$;?Xs}IiP9{HK`T9y^o%MLOm{tshDUK6z@Jj<36#V2&BSAV zGLQ3lKS?wi(D}*sFWR8VM!^zc9J6M*>@$|g@@g9(H{8!q3i)_t2L-j<9$TDVl}S~w zq*Q-xBS{yMjiNQZ>lgxf_}>VUS=5+H7^=^9!DOJ46uD z0abj*N7qL;QL=F%i5)6t<}3pIH`gzi>)47ahNgv5-;84z$y`ky*7bi$NHrMRvEMY% zcxI^5%BGL5G<{R&9DzW;9V)1kCQ2_U^0mTs<%p&ZT(K5Z{abw{&Db+YlO=TH*@x6tLO|P24SMh0f2UbR=^y zLq;~LZvou&j1MZrAq>6mN|L*<(AjAx19Q9HSPLwm|qafK7cbZVZ@a@ zSbLnC0#~ykQYQFFh(*Vi@nXa1o$@DR62jFQ&bM;n1v(AuCi@xZ?Zc)E5@*A+!h*I^ zBWJUP>pK;v91F$`={p_Xs#g0Wm%i9sC;V&v#QQ@=0zQsvoNGK~d~3c@XOVO_X=J`7 zl7kKkTb?neZO7+(MI%>dO;cGHXFe5Vw`Z5Y3;FMDVg8vL|LSW$9FJ%ME8d%t2Wwn6 zBLq);{lSh0w>OvB>Xy%jjjpnI=jtc-9gww?*9~?@&$YQMYZ?tbc@+4 z=H#+0ZcvPoORCdx!axWkUMO#sp{Q5kYRCO76Z)No;|SBqQ4=f^1FO96GcMoYyu2-M zD9V?RrmZix;oQ3VBFFlELEkr#QnIn`??X-|wn5`_ZwJ1gb_canHHC!y5}uJRnzruw z{<6iWy}v!VA@tLWTd8*Pt?;(X5K`eeA+Cn2N0_4zr-VgV_j+{iu*BJSyJ@jd3p9!rk>PWCGgYU3Ixs9|yRefkc-A+Z+UP0le)yd%{oq7* zr|OwCKGBLx`Rj6GRd{N}`LBXrs62L5LQj^UUY_JZruGz&p$MW!5?8-gmvO zz3+W?QP5!jfXh!e&b^LJnvSEEle87t7aQysdI~pDF3bTo1uxbT?8hQ$;-zoOSbi}= zg?>oSM?UVpvZsb^S=s-3vr2Tq5@z3eROgcvo@mQ>_$cCef8}~6hX~ncrXaJ{tAh7^ z8H1w)a~WUQo(61;uGb*ENz9A=!&?uEo+s+)f0d2cIScPocXUbg$p~eAD(W2!^SNCX zCDARQ85?!nxb@X95%sz)_MM!!OvLX+id`hWFz6II+nuaX^5@JdF1T$lZ!|J;Q(;TK`#1+*7rg>LaA!QiKC3L_wqMB+>6-Sd!uIc?DM==#n(nx!eC^l#wM*k@OTqqZ!)Tbs)X__UD5V({x@-WoUV1t%fo98Ybe?mQ4e$9E0&EEdbSfICUQ?PQp@Mx3>F3SGUxi9gdRi^h0 zJzq)r@tRgv(>6b4rk!s$P9nIgN5R!ez>C<8{$#4oX*_&1fmI`m&Bm4j!A<^7&TXU% zARJk#rCWHWjVOR-Ty8}B{<@#)T^4KXmCdR=x_z4 z)g4Ng>-1@LTfXQWBScd|%Cy&km;|zo*g*1SyuppIvyHoG^cs&4>Fro(K|BBY-u9^OZ%w7y7 zH7NA$xD+u-ith&A+(vHR|C2x4(Wz}Z z0sK-a{_%n4mkmu!S)2#xmJ}zC$AE?&)>fp-cOC{Ady3xIQ!8cF{{p?3|0x?^jju}* zV9+J?1^YGZVlS)Y>e&$Y4{;o^&$y6w_JgbVl)tKy3#FmxJ~jp^kuUBA-blA3`Ydi5 z8k+os0WA}&XKebYipO8(Vuz3D-L7>cL(sAdl8~QJ^jUj0$~+x&$kHO zeEmx$i+u>3$3@O1+Q-`4f5iIOv?3(i`>9u|Z8<~NhFW||1z;X`&<|VF>)*EMc6UIp zCmfQOA5bQSKAZ1FzJ2ewagh#P5LYeyrds&xa~5i;vA3xZh=v$^%~O#R+A#?b78V}B zjDLyN-z5{OHdkgJVU+rrB>bRuhZ!r!% zGMBGpWr%Z`t^3*?<>#(N%u3CBjvGyWF|g5RYzBQFC23=D*o`w2%LnT`o+N)De|H`% z|M1o9Gvmn=*JEMbaph!I6)+DxCpl-x7;_$IS?T6w^z<3yAc0^Ls(M`C{#1D<0bgU4 z#^xv(=@$8&2btok5T`x0e7tzsw*Ffzpf6wZsgcEyPzbrx1T-(A8ZAfMsHe%pU^>XbtByVPfb z-Pf#uRkudejU2Wka^ejev)E7?iMu(Z;AV_aZe4{>d8`yd<>?!SO$&d;&kc?eiR-e+ zk||UvWpOfcbhqh*HU-@({ochU=i@OD7GAL~hUQ^&=-FZWJu!5<_K1O!2xpv)0wV{qUpb z6yOlLTE@IfdVPURc$hCXlbTV~-K^})|g5hT?TvEO&_!fpN?(#L5ibWQ($aU@FP zAjN3LK|sEhTmvbKUfmw1n8C0HOw)u%LCATEO$v@BdLMH#F;{#FfUm25;L!f;4NYSB zw`CTaAhZ+GEjZ-G+1>gz!kfU>^1b=`gf=j?Z?5?4!&K*zOjcttK)6J%tu^quAKDae z3@Fs^wuIy6&ZX~4>sNS2!=ZQN6vy+WxqK1odr;PZT@h90WnCqCC$r>^?HBg3a-;tm zRlzKAdS*C_e+rH8{+_$?rZHV38gDa0>XeYzpfdA$ zH}h!n8o4TCui(oAPjQ_s-E-{DU{eTc6X(EVACi3Nq8TBw6!Kv8(D09Rv&=f|54KbR zv2p>cau!<+Tnw}9-d?Gd81lS$h+_X$K_bL*alG!cy$Ilw?80#Od;MVgCIi^7EwR zw^Bw-q|JDE426ZQ%`mPUgDHRplR`}`)j@?H^I*-oGxegkm_U_^GMhItx7abQlJjHi zAtM=gvZ76Ks1NCKEWF% znNRNHw8j*k#ea{FQ<+abc(hP)O$p(t(ccF1V5-eWZvDcMZk*ofSRA(z3`Bui+w+u= zze~|5E~pVGUUAxT6WmJqTa+$W@{LYk#OY2`xjfRcpnX5;biCnS16if!RY)eEFRxxFO1N8D+MY{qtSf$cXg-o_TfUa9pI~4I62A2Zicu7V z#p#}eqt-^abUNsQp&$uQ$2Il#7a-0n1z8rlPQTmp_1}JteJt$~ZVj$3dQ%0j*Gsac z5^w&&Bp5GVSN6_g;t6kv+?LD}S7z(xKJf#{ivF5TQtCL?VTk&Ar5oIZEO3+KH{jdY z+An_kw7ml6R)ggQeuqoNlg%^c!=J^&Z}7<(AU)`I@O=Sm%%A@5<}tc|u3dF?3Rc}5jHsvKWn<5)=I z01VxL)Il;=8yWNm@kL1nagO3hYAqKByP?bGAk$YZ;!3aJr<}nAkQp$=Ridq|^g$@b ze5WS?eMjx`ZejiKDZqNk=11bjU3X) z!xH6`+gS~2{EAur$iXgy zHY%IV#iv(N=W= z<}F7*U-46R{K1;x&8~iI_}U%vN%}Xzb^6GLBmz@o>CeA^mXu!0#P6C2XQ2*LO@vXG z9~UABz+5Gb{YQZj-Pm}+{UqX96Y2%y?N4g=3=V!0Wqp5lw3<=HP=R$mzXvH>u{6`F{ad6P+x#Enpx7)Sh}?ybn~+LgAI!#}ny>4R(sq z_{h3vQp=OAzlg)6ZH9jQd(|6eP)Hl zm}nr}W(63}@}dqmu}>w0bbP4_tSd_U{q3|*glH+VQ}L;&Uu4Ln79tyU(`&2w6m!0Z zKfIvf(v@gNmVjInTBo1BXMizAX|-WC4}n11pK7`45lt3DKZg$xGllb*S*hwp(^Tj{ z|9`Up?^6&ces*>P;@|}#i;G+iW8B+js*~}>*!y?rhk!ufQt7#ojm~W;(Ns+0B`-EA9X_uMssEP9uW1X|cb}i3 z`c%zkBu>@zV=_O?eqS{y$lJfz&u8PRykZXYcK|6)-^-E%C39enrsCl@jMCGUm`4x!?%q2+W-&H+QX zb6QAire(NuB+M{h6V-zQ{>STf*pH|(##zFhX`wEUVLs@KUSj=1>MYb?i!`gQ)$LS5 zXL(M1>7?u`;5;T7!LM(MtkNCW${SeM&3>dl81_hSvi_qMF=khUAi;C=)&_c|U(2MV zt{i73atqQ{5ozb{T?LMPAyd2F;Eusa>)vc%xF zcvu|e9G4EoVBykiR3Gd_mRpZ=m(p$Hx!+rTGpSP(mBrusL2>8eoaWeYX2Kt#FddoLA7J)*=ATY!&Un32{ zom4?t43!`$hPJh~LZAF^2y4h{x3&LnP&v7Q9A4+e<#&5 z5Ie zcgmmMm?&V_;kpiIf{1N_bJjbrcekVKyR)=ml9%D@`+vr+p10gxX%vp#8A$prd-$Bw zEBM%KtOQ8#=zR(Ijv#gm^ZR|F8vK(?RdV};nq6!XuD;$#+*|q_dn|<4$rZ!tF%%X< ze||FfX@xk{{cpr!1V}f`-$;^3D%9)wVU&>3Ji!v?nc$e~Dnt8Ns27HvbhnykVEUm6 z+}@&rZZexa$Gy|RQu%*h=}tBmZptwjdj&Nrc?9{-0)o5U=*6IrLm3 zkI}(X4W3CpVz?)(oK24|CzyCFlG2? zrD+t|wfyKAdg(Js;o0mT0MD1mo$`}UKP7w*zF&ak?k+C8UM%{!{!=_pu(Zm!o>>+$ zxF5Lvpnts=XH{~BNNSN=ztY6~8+_?4eX9A=OYF35@P_KRkLNlg;@_~`HS@y{6H?91 zV^4w7(3;hg@jJUTNLkdZ=lR~xzMXMvp9|toPlNA7%3Ori9&wW+vNkzMSWUI3IZt6m z<|>5>KCIFrq4Qk!6=D}jcj-z`MfcwLc917`WE?Cjczd^=Knj?=8^&?IjS)({e9h!d zcc;|)=j`?Rzo|o#=aGL8ednr<62tY|hLKiK~wluB6O@Bsz9>{9rlc-VftRzH`J zl=+&RS^8Ju@$RH~(qLvGGqcYCMAL?<^cMILWH1B3l*-PiA7{ruCe0JykztnpE@w=7 zn~Ok%n>3bR%5UyS@aadm>e%&U>Hg>1xvvNz4eE({Lki7H@dp8MJWe{1=~6`V_KQ*Z zLvdw33J&*ZhR8p%-#>|;o#j1V+Blvu|J{7CDB#(&pa06r=h@53xyAO29rM+QG%oW! zY2TE*Fwos{D#O8L8`bR6pT_T>Zkor1Kab5RHXb~=iEw!>aUsrl{MvaIwmYTsDKdH8 zu+KiR&#G?mm{9}9m@!b8Fg}p~)VY77%qFa#Jxx$y`6;i4f|hC_=_4dXkQLI+tIr(| zlk>vd`iuq6K{^M%{uUUl*+(%|`cm|{y>6?#AYXbR^DCKWDi$uE$?X$*`g%vK4k#ZV zN%Ph=+IQ96w}0*Z=HW#tY4u0P{=3;MVcg><;vj3k^SVu<_lYa7thf&9mq+a98w3(w zyt-1E_jyg#7n2zG%0`T_;f(12i7O_TL~b@n^LG5PpxbJc_pqqL$pFpoB<-7Cf&bEs z7yQ+o!M-^YRcya2NQaJq_dP8w7vxe(($i%gt>nO}d|)@fpj7Tq=s?zIgNHN!&=MPs zSMbjlR!G8WT|>vYxo)4Wu3?dB`j%U3FfSwG?YG(QuS?^g)##=#M%)w<3K}_w$yv*a z9_3-pvDi`DHdz2TjuSQ-D>Pbd;+r+7gMpPcoPO(5A1LGB+zXQ3&l5Chf)pCG)>`M7 zc+0D5fkRGGTd5G-1hsGoaQ1(hPnp$3DboPV$_l0>00W6)rD7bV0m>z7`fF51?3V~2 z9xa>*Xp@6^{aCb4IoEu3uD&Qo75OsdF4Q;>CIi?2GV!<_Fvt%6tPh6|nuEaPcwkk~ zrIw?#l+d^8}hV%vbUJ4dt-0X_X{uY z>a+N>vl>3>*jN1ef;n8}MlSe3Sj<{+Qcg~vkpX36$GnYm-@JHm#)};UG&0LpHLhz- z>T;ZhfTteoNBzJ|4RMNw;L@jtU2h57G4x>ick?=mokIAgGN6DbBT{eF>6G%NrGn9* zmJIHdKwj1@E04`wzbPvf6~Dmc`&mh4c2-EqjO~o@dD3;PE7)>lAsKV1B1TJwd4wy^ zusu5%(Y_c!pCMkW?Yg+G2G;Yd1A76`c7sO>iAwcX*wKUDq#X%>4CnW5io(H{+a4 zqaU`LLCH0eMlR74lJv0 zAM1S%7{dn->!WV5q6}ld8DP%OHd8fGzT!8jS7VARi)*>1+Mpy0tO^tp8i)-fQ2S}i zMq4s$EAWTdfl6iwVIEkSS~lcS-T5C1LyvN*7b-=bX&3?JGTsh+Xz^HDK zW3pSdeV1bvRE$F}rMct=ze#bGBl1?lpm^(3VU1(Gcpeo2fb*mHmB;T+r9UQ76W)vC z0aYR)-&#c`uwN*Hbh76n{uhIOS3tKBe1}+d-C~0N+z+p{CwN~)S7ZxfzwYmTs~!8O z(kGU(LI#Jr!YkHXEX#>8(?xB>2KRve=G$2P^8@A^bN_D`VYr@|K{xo?{Br_{{+yUE z8jaYhqY4*nP5xl}*&Z`qb(W6|HbNSwX$FP_fK5WZKnxsg&+Z>1OT~4_up{L46Xl)< z2U2G71weA?W+;kjN6Cu`9|LzO30z1uU6n>6vHxY1I3CT*|9i=@g$U4nm0Nxypa;l9 zARV{vBtF8jFCC-IwyWP?denH8FLx@@_}P~8T)!1MEj$8X5U)3{AK1`08Q`Z|3e7Q7 z;$8!1slSDTfLz)?fxO*;@k(p{uy!1Wj#nQXFWBMQKQ8fy>7vMuj3qeo%JYzpT|d%p z_Is0;7%$Y9S^RAKkEWognM(QBOG+7axS(e-C| z$OG|&`7!4kcKB64BhL;@`THEd)`ZuUhi>^PC%*wwCaw#0Sf)}VGR?AmmVjBvq{&Z3 znu=xu{Oh|J8kS+MGD(QLQ5@^^nLm;xM0y=4W0@@tY)j169op!IMDOJ`~=^;qYnBpRU5f z5)?oGMI^6_Bt|hb$i&{lt*}4Sr>t9!1A2Uh7u==tntT7g9xc21vmb6-hXk^}~TkVRi4c85wGANCSOd%7rDWDMJO$S5#*x$+O6v2524J5z(y6=NgTV;nR2!pGhy9oO``C1ob*Yj$V%O-?{wAnIgHv<~)AOK^M3 z4JdLkzC++gJ?~oQ?VBSpEe?h%1y+M8#9u$jc#nb8p*=P?w7(dPgI^6sfxxvSB;df{ zVO2Dn%@6kh>2{Mr0{U@P(ck6neNS*TUdo9&ulxaZ(Eoe%)PXnuAi@qdURM@__2QWT z>7$6gx~>?k6Nu{XhcxVsv(}hw6S>98l|t_0hQ>4~( z9qmp=YneQubfhaV&gO`z6Heb!!F9I+Xx1Ot+f80}eo&h0H*h$j1Wb8X-wy-O&?(>A z7=^e4W3Sj+F}=Yiet_O=5}NyEp722YM!%fu$k?eJ|3e2J4De5~zq_00?br|SclUOX zU#}ZMFi<`jzk-dC_+6r#N~!OGTcSS`4LYzB+rR&eWssiHj+J(;U#23S)h~@LD8s?7 z=1>bz0tkJpf>$y6GDM!XwKc+6My2rBH7De08`upEZM#|K!7TwJ;I!=eyBVzm-7mL# z7s)9|{Jg^ZNb!dFoOX&5{ci-g_4=(G1Oc`VTpir%h0l@@-1)}FT9t%owFJm%*XNk( z2+!9s*iYFrAtjN%>YM7tzU~^Va*P2va=iNA^gE_NS#L1@0(Ns~0@`mN?1+t2vVjB| zHGxE9x>N!|B@WRrd1uyEkYsnVbTQcm<;yU6*49=*!5MbF0~BUiud|%StT@>qy`9a# zba;}DDgd54>y`7YYRf23X8yR8ZALK^gRrY#nQ9kWJWu~>#OCY{Gh5GHStl-eqE;Nu zShS|i+TTW)I!HT0(o|U5=TeGvpdG-h20ibb@c~$O3R~u38gyia|TZLe;s@`h^%+Pndj- z9;H@`m?%Sk5#EL#M@cDkn=9Bmn-|Bct%3;-nF{6A|9i^6*Jz_1Pz)rD#Z7gJaj0}H zd}hv6>B*yy;e=@j)GzW4V@6k8hgZ?%KG*->z~Z3U`IfZ8Xv$9>ztORdVxzM*Xi5?0 znOkmI7_I#qrDB>oGrwB4pizglAi)dTFB=#X)`AgVU)e{+#sZC*>Z<&yl2DbCuvS>g zp)cCekC$|N#^|RK7b7eLGi%l|(S5c-PTij()LOky4On6dJ)#g{KrzlQBtyL3;%L&{ zJN1#^&3e{%WcA^G*Yo8&?s~d8hxZe+m8)CcqHgd>vjt0pP@ox`Q5`J%&(C>Y!e4ZK z?-QR}^_UV&T+HCzorw3X;N>vvKLKCG95hkiO)S76bFNz>_4thDDvEbK-EXH-@KD#} zhiO0Et2;C>)0`vmAqJ$d#qKdx&+Q~U{YLJj;jX34&09r$;Rm!*`Y%=^7q~@VUm?`Y z(COu9mDQPQ>DIG1gCv)f;{$&O+SxQjix3Tsl$TbLY4zWky8&2p>(^J|{b545_b>l$ z>~^&!p5R@ZZwau77pd$(-@Za>^^hjRO1$CL9kh1so}o@BmaeS&2gaOLevxKhZC^3Q z#p$uRajK)>lVm-V)&t+>UnkrTl745Bm|-|mlttDV<q-i5zpfGe0lzo z^TD*p!51`~hZ$S-lPS_tBgti|gE>qqMep0NmR>Bdzk2#(y9U7pH`c4a z4bvL-nb;e{XMESjr>H-$7k%kw~`~1HpeWtw2IqPP4yz6LEMUEc8K&veQx{xWhiJlCn_BF{*ki1V<)v9(I7ho%E01bDB+y+)?l%#2YU zmU1a8?sqH-lSUiU>Btm5$)9n24&7@!tC_~-(`3>v?>htEH7;S=9cpu{3MXBbD0uW( zh`qSDnOyCLm9_Cl@p5FZz&HKo4k|1>|DId`PU1fY=H9rxbir5XVbFnT=A4_)OSN_K z>9g%5p0n!_*gC4Q>lc&fwHt_m0}0Q>{MeIIVFO%Wo)BHUA&Gi~TwI{*UWR%AXe)RB z{HyPi(qVsV{Y56W?PxjxDt?w@W^*|5#FOIZ(VhLcs zemi>?V{6BfN2*&$vU^J2M~=5a9!h=MUyf*%oD0|yV zA`i`lcLk^~8fc3zV-J%h4ix^9SD?1R}p2S6esz$LSNyy2T02`tn zN^Kgy7q??Ow~k$BH^Dk5Uj8}!SLdt-AVCYr8F8Nv$?mHj`Lx~?y)AmY@;u#ba+6EN z4J$sRgM)Orb(gp=2&ZTuIj?_o{)kQgOWCV0N|kL!jXDWq@1@*SF6qelH%#|TnViFm zGqPosp>a%3+ zPV~*-F#-n-Ryu_0_S5>bLlx38dT16$4)xocbN2Yf-`Qr$%Wirkg z_hA~^t9eSK<4rY#q}58Z)#+5M}Avvuw!UIv>UW_<1GZidXbCqcVyKDQ3DCu6ds-~F znU-jJ^H&L8ar2}-i--ZpAV?IWhdsPu|)ny%=zS>CVZM5 zdBqUe6eg#a1Y(4}{n5-_pME`=NKGh`NX4i#GxJxE{dVzGPP-3L6m%lxi9oEwg4sZ^ zE2CV^8`F=2fyy;Z16Y<0#Jnl=Oq=sc!wek#Yoe0rK!CjvL82b3(@45&@4QyiZY%Aj zeAM8B;lLU_uu^*nqIM)6UEWI+d{38`qeZn(j2sSm%8o`kWBIR^JKOD z8xWXba^xM&xR%bj{-tyY9n@w=%3K#on8Z{6#voZf@@;5nL?yk}$5+S{1Swk+H z^1621!56r|LES?#q-weyifVN*f6lOzn8B%+e2^KFJ#B=E zS+v&>S);3BBRlCZVH&x7rPz1ZTF0>w{0pl7YAWyFj6ccZ*5fPxv;<;WKUim%1lZEp6P;PKCs$*^l|994F&9$%zZ_7mp7@ZDcoF;%Qw(6dt4%! zA-$vt$wPAzc5Sq(NOf>7j+c`)ZHmII-_xEx1-`%TgH%Y$4kZ?_(q5r)C|8&_S%`jg zqhp%VHGrx9yG4ywA?q?wIY*orZt`F&d~8BpS?XMFtLA-$e4vB-vK$)3#=s}=C_q{- zm2{)3e##DKI4zFq#v`5OKK*jC2I&|WOu4y)0pyspl$qK0RO;Ax z`qj>GjxYSXS1DL7qXwKEB&Qy#gMTS^hAek`COeSFNjfNWR%(m?Tb{Hiq`0;b!;9+S zzNGWRDXCvzpE;Cc)%(m)Ck^M91}P>0RSG7gIPtCj$}weBq~^z-K0i28QH^Ji0=TJ& zvKMm%tx^(vE0#irnhhmCo<}e?w-63I&xIP1Xg9Or7AGY9fPJO_c&V8`Y5f>Px0|+u zD%sUdF~dVMA9wjvfL`D0HH+h3=TDmIs`&-RKH?Brd?Li2`gPd>-pql^PnDaS=PR+1 zn>pihfK{Y6K92*8j#t^pbNo)Xxn-p@L>B*qVBC}htyX61xeGTVoFKJ13r)wqdDoSD zw);u0jf+6lyBf@UGSEqWqb_uAVc>_JmaIAuJs0lP+n6mUy~_@-qf1U6l8_nVS^jq^ zeWF}Xxz1esPPYuG;yLOYymp165&+hRkISB4CT{TDm*r);;ob2 z#tqEuG;a4KLn6ZVP=asRMwJQ;!CaTq@@X;B-Z%tIT85b!m_0@}1H7A=o}VymkC&&y zoC`lkI$jG1+=-j6RukCy_{wirhW62g0Y(|w+&GXIweE=Is*w?<89uLy*z-EJnM}(0 zQz9*mPuiVNK2aL<7**OqH7!eOC`k2+{+gw_@3y^0eno0^%8hi(k_%XV&c@mQF8s)l zr2F0tF(jneXHNKKp1K}TW(QWjWyM11(k?i5@HI^5VcJ5Lz-}9%67rNHgLa0LA}ofU z8w&}UsT+)5J8~#f*}oY6dk4N#Pp4RzShPAQZk?XIHBGT&I5-HO&2oRvEMw=Gj)g@F z*HTk9t%M^=0UfFr4IRQlw5Av~Q9}znn3gxOBLaOh*fa59Q!AwX@HpJsBpePQRCRWe zmfnhUV*V_|tvf^g@uj!%AKjRH=Xx%gfyrtd$|*O^#UBqwmTTKB)xlfJQ32BcePa7w zmr0>ucozid&=Ak$el0ZX*T|jY4(CD=I`qGCpXEDI5XvOpC9q_#qlh<j zPc8yKyHt^rAEjjU5UTs|Q4-f&yBOM>Q2@ofC4kD8pJ^-8ooQ+EmEF59wDL1!azg+E zT9}drAfdJE+4Ih>-)zg@wM_7Vo9gB|6dOpz$+_T=3x$Cyj*zbsT{bPRFQ)_T&ixe4mBLSr`T34b1N zK7>f$!vI>suDC1gr1f97y3&Exa{mhlfifJ~X{`2YnrAvSC83xW_I`P$Z$H*7Pe!y% zc*u)ujF5zw{avQN6$YX!>N<2d7GW_C1b+T=5q=WM|4G%ON4%4}{C={<7(D}rjH@ic z=}*E0P+Rc+8o^+x-uUSvDB%~JnEc-=1-U==7;dw>YlMcc&YkBKB&V5%b1=R>mw-SC z^TW(I;E+nKu{!ul1+Az`Y$E~WPv%Z5Av1sY{reW7xl>d#aP9xAa^Fhbg9~0$H zpQptTLE^Pcu+!byIGf_EO*qG=+4nO!|5;#KdwAT8vCuMNxU4*S830YHI)NMxP+btF zg}$lDC>YRg#j=fIT64J4X;Lam&>_HCK1Os_m>GsZ?R;8x{*Un&GLA|$tGubxWL z1^7xrDxL&Cudg$;GI*~AFNT_xL6rkbpk@X&%7q~htRhPCqe|UJyOw&o)y($Y-UPKa zUQaNB1nFe~Lfk}Lq2xM_Xf@#!n%Ke6a^~Kzm|v89Yn~vu3C+rn=#A%u@LE(1B$Gw4 zb5I0`VEw(HVAK;%eIC6TEE7HLph#7h{x8F6j$s&0E^XgQRLDJi??hdVpGQgqg&n2Zs#}N#m8~KUMc+C&Tj0Rm&`q1Uw`D(;H=K z|MpWsjmwHq@VGE~`cY2U!WRUJl&Hj10Ijy6QXttemDO$|7V#`v)ILPa{_W;(y#jDL zCc97;phK1?K*$s)H3m$|dsB+>ddF<18m7u)1^^-Bpc#0h$v=49EZ`){6``#K8Ky_4 zzUX&KiR4k<`)YGZABUG2+`V%d9{e?@-(*e*AGq-jv`oCpwVR_<_x=zXw1cdMvhIp7 z!0bzVY;U=-C}3f%G)4p1S&-;Ik`%={-*gE8vOj@6=>+$xW>4c&VEk|2JhdcSj~vx5 zTq7~v(4a%nf1__@`R>ix;HHq!P9#-Jg(0h!l~mkZ-f&~xf>u{|?T^gB`2HWfvNJy^ zX^k3ZOf??!x6VB3QT6Aq{$+<>9Fx%Lp;rj5(UYPz_HrZk4BBCG+of{&7$-F8@%*Xy zlnpvQgP%M*p5Pi7mP}D300X2cjZ^a4S+jFe^@hEP2{NqS&nJe9N)BE*Uq1S$&T=Z} zcU~=^jlu9>JjruIb!~Z9X5H}*b7_C;vG5=V* z;2D0U1vx4tznB2xVgK9AJ|`|w+1w=HcKKh6xR9syy&TqttUgwz)r?C77&{x4sVxT+)T9i}K~9JA|&ab=K# z5{3+W`o<^t^5kxdstp52kLumv23&Eel*crZ5o@c<0350^%AZs>br{f>BTxjesK^Z) zqqI0Z1^`Tk=Xo1RE@gq3jaCytK4ttZ+~^mQMEzPn;W0;R0`rgj5S`ib0>U#LWvx=u z9Z%7~wy#S{q#tqJVhvw)NP~*lZ2ZU$Q}j1!jq)wV2QZ0Vlo}M*Ej5_ct|4YvB0Yzt z#eO*@Y*qk!%=(in$$r)&RY%3{x|wa}pRpaM-gf%G!R-aPt168ft>WDH??K75yJc=7 zXUyhI8_&m6p!Ud_3F!wi0zn>Hi{sbsR&61RN;hn6+Gq5WK|!a}%xJZ|myzFgOv$O* zlE9N9U@lxP&pd-p9*gz3`A0F34(_Tksa$%o7TkLpe{iCOMot( zNN_2nKbn+P*VMmG_T#%Air|zFb`=>ooxD}-u}A%4$>SP?ZP$^i+Jm8nSavjm0FDFU z^NsZasF_0m*xE)%RYD->NbcU{0&B4@!1nBHv$DzlA}G!RYHfK{t2NwebJ|wCL~8RQ znZ;pR5h@uQub!{`*0nlak7fo6srO3#YXirjBvfn~1~X5kkZUpClYluEpOBd>ch|O% z72nR7D?diY(SJ>!(1&FJwtAkTIBsw$Gs%yA9~ z#WOx&|GhiS)KeHFsGYi;bmM1>J223HglWSem~{Tk`Ro%Vu%n=do_2H&KjrlmvfQe5c2l5 zyA!hFE!6fm%^m*C-+1x7RO0+juJucCwdycm#;EGLb%a?2hEpAx()u zk*^d7t&)ibIa>)o#u+fvf;Zf~t)f^nLP$HpY+ z{*GICFDFzlN`PQ{Y3yPi>ji$w`Vs9PW#cQ`1Kck4IT6gv8!wG1Ya3~&W;DwB3P?!L zwoLOP11d_?xfo40=qHIg*7ug*+#78N&HU8xp@jCfb)5}RpTDIl$R^wbP|X9Fq%ODG~< zVLOMP(mq{(hiB6;-o1+h00d_W#!MhL_=(&1Xj1X!1#si1n{{He_XPnu!A-li-)#ad zp51mXq~iKdl2hA?C@~kb$BK%*?cZ%m)QV5x*VHYb?BCZa03Rkmz(~3oC1?R!Ti)Ci zO9Ng`WtnH_pKdtStJNp_cEz_u&s^KzzPz+deyeuZM6MGCpNLf6BJZM(IwbrZqw zJ!>_`_eQ?|GV`N)E&g#h9>E};#T4>2_z%)`fs|4CyG`An)Ode7j{WJ;B3#e!QDfbt z;yEo8l06-?_Njo7uY`#BaEHr4A`kps&X&Gl?o+kbW#=x8Pm@p9m!l(<9_m77wV%m$ z&Dsr6bv}W~&uz9pWx0FgU>B&1c0Q4-w1C4k1w78brQvBPo9?kvz$98YPAxyg51b!Y zU}i`Oqc~30!b9{wV)qy+sz9r1jIni_-!tC+=!Vm&Xg90uTR!uUhhvR@gQ{!3%ibs1 z5a#)+Dziree|JD$W@7v)@8@an*9oq2CQw!tt=S{zsaiWjZDp(yhqB$G0@U8N26*Pn zge1SjOM2t+2~c?|{EOX$dgfbnZdpod{>x`zvuwj&{gp3t-OrLJ#JN0aD=32HxF~rJ zT-bFfKunG%4oSL7{NHE`gQoeuid#qbqzINT=!Wg`$3?dhG2!HNWPn^EC+6 zonVvB34BdtPY=Z4msuBpi4NHG*F$ydF=!qNOm*e3H|4N=Bf{Te>SOXJIYu6wZjt_d zvEMzLTdRg;vs$)>$y2!8$#(Brb8+lC)db|J)T5sQVK)dZnN?w>6V%Xe{`9&BN^A0y zlNnESi)euZSo6~(wpHPTkzsOL?!}P6s{)$?PXLk@tQdU$Xuj`gQVM{N%GxrQd;Y<* zNhtdeyPZd4-Mre>4Ok^CMj}6=^fV5dB1+!aG?jm@*Dny5MzUG7+sw{JD?VP}4zIx4 zcex``&e6sjrY{HnnReh|_IS1tPZHn+eA~V9td}#phum(LGZ_+-#LtqFBtgP??my06 zjZ16hUnm?fE;yEyrG3O+qdPFr&SPQpyPu%hqJ-1*$cXo1&1SbCa_7GARC%1!nu6bYu-w+tMfd%Qshn#TEx3KM=G6Q(#< z$#yFi{*enasvtn78dod8uo)ph8d#vnLNFc_hNzQ=MV3$sB#JT{bCYpG!GTq3t7pP4 zS7-}ulC#rcbR3MAU4D!%aC%;TiV<*T5=@@y6Q;;gx@!+uBf?Y%Qw8icLg$cERS?j( zpsEsjXL?vF`saSqbL`x-O>3SY3g~)-frYRnUv@Y)%IN`p zg8fs;LC^F9K7hVsVj^cp&kCL$)iI=mGB)?m`##^Z-hu_QR2K0={uX2dO|n zYDAg{LLF@v|F7g24>q*xjwwv4%n*^(v=?pX$d5}5v|ZKF)QD3F3EQou-ICzhu)zDr z^6hOVKsfLVHrz0HitRDh9Ylpb5mBzE&&$W@GuZ}JZtQ|84aX{AudLN&(-EYk83#*L za9Qlkh7fd(Z!sXz42sr>svtmqlYiAq*RgO<^iDgJ!)O~*-{cGi-H=wuOh*^&=fSRR zWo<<+;rwftb|4- z>~e%Q(Kb4Yw#MX%&g6O6O+ip%?wCGct0bd5Dm(NCgpmbp=uSX4Dd2p9zK3*TQ0NsM z7t=X?Lf>#N3{QH;iAj>|c8bXoiH+xK7TrtN3alhWP5F>08Ns1zoQcWsY4FmD*Uf(QNE8IiWs9Cd=8z^ zKG_C#p@siUixV(a1&f1vH6-pwY)sV!`VsPk&(N0)p70X}SJE4CgYQ)x!|w4Hh^V$e z$LAGE57laWEL@Xk00`fc3~4iDM5E-`_R6)pRGe)KscUdg`j{BOr${ni$GXE`7%-v# zd70B4$tHHND7#X9!xi`+e3uxh0j2b%ye0p} zhm^B46QaRA_JCcWL)mMG;*^v?hY0SNu5qt$rfEe znh3J=1$shXaetJHSl{%ibk6lLIEG+m- zI;l~*mc%;G$5dWVmLaZzOAGS%~$v%lo=q=7!@EBqm{)Sz| zgL}|!$twVZqmwiu$4MY8GzOz1DA72W9G@tqJ&3QtCxMtGfn#DYBr*aaWijOwG}4ILBQkv2uB1)?!Z|QNf)ahevqPeAe2hVTfkC1#^rlf1x-8Wv`aOTk z|M0)`X{>YlTRO*KaRibRc7frc_hu(cd6Aw0HiPphxMJ&CGn3LY`l&?6?SZbzJ-8p! zUa{k23vztfe6{p0onU)$6-T~L@S{Bdo#fjUkKXEG4_u$;S3eR9G9f7XHH5v7DeeMH6B3Yw+0wQe@Q4-q*&ETxnkXZkK4vrH$ zIv}~z7Z?PA3q2A1(OcXnrTQh-w{*@mxE_5BE9XAkkNd_t$1!4})LHc&>sor2z2oq* zdGw4OR;uGl5%)>lAJ{*AAyN{LlB%tHu8A(_XZl;jourOkpohGT#O;dhqF$nY%(q)X z8~w#?r$1>s&&A)>TBj+A+bsV^kJub-%iEi5E@d~hLTrz5JjN%`T|N=jyWh)^ylv!t zJReJ?^Sqy@^ixgfKHOKjrcKIwB1=32cFJ=#o34?(z5%wK*LTb#@;2UCLgbf=;66ZtN=O=C6GkvNI>JN1znTtb00l4_g1pjgM(%?oN9?2 zBkl))9@H1;C*L2H^hsXdfa^-03zseSAILt2^qvn4VKQOX;?~$X`3YcO&|um>yy@qFv=kXKQ<^y?J{` z*-R~wzkl4eX3|}IMD1@&=OCqu3@BHbu0Al)e{0@B?e!qDB_h?Gi843Z+v&@~9sF_hE*LpKaP48y?T zeZTMg&N*wHKc2PrUTep__p|pM*LClBEe&N7LOQ}nj~d1j9xB)XMRmnTkLps0Zmn@1>IClZjJ+N`qJHwvhcV1?F8}D! zxRT0iMLmCuqh*||DnlRnyJ@!Ov^(zGS{>EX$Lq&|sVpT5F*>Og z!~G+1$|zJlGVuw%VJCImUuG|*A9e&lvWtWPc2|M zvP7fb+9crWJNfB>{8=**yw+5hC-|lP8Y(>_n^d|Sao($WEXuw<2gRxOTft}-DSFoB zhw84vqQ~Lkck9#T5I@Jz z`up(>0mF?usa0t(!LvR@_ca_0v>8nEUUV(E%%mBwRgUb|<;zYUAn zD)@NZiB%*(T}9-~a1t`gUOZj;@feL2wnrV}aBstZhrAoOYvZ2m`xENFM%C=v)v)8c zAw-QN-FBs4-MMAH1*-+2`Q=lu&ASUo3kR?lVOYex=mVDR8(EXlU)M{uqhr2lyW+m) zK=oXzmcU#Az~~zU{`E3FX4pP8&hoP_d3&$qg?$1F4$e>D7_Qvq39Ze+V%?nT`! zXRX#*IgrDiBrF%!{Ts7&R73^XjWpZT(JjdR3{i+gVPEI9W3MosplYzIpK@`7vB*eo zmAd_|gH}0fnBO@HBlzg=$X3*@tLbT8%eB*ZooCRGt1j1rRXD10%dw2iLs-uB@Z(Pp$(;>TvZ9|rH;|3%x^_*I01t&i1j z3tx`0dVy?2Tu=%_ufYRmUwv|JNxb}s8nS~_t#rXOkvD<}P0ZeJaN?0AMI(!Crl59H zvx|81<{P9RV)-uklkyqswAC>h(|mHDYxGU%{oigE>bqtMb}vgBf%JV?H-fYXIk*#N zdt8K>a`|ioeIIJSK-C`TJFg(J@jdiTn9uqr1F4K5o$qL`2ijIJ|>b z;IlDRi_s%w1<5_$QQ8RqTRCZ7uRbyw4jLYha|Ofd8uc#aYqjm0Wll`Pq#$Z92=Zhs z2N-+;$zcv#eLI!{3+vU$MXmUNkx0Bb^J~ML%lvxia$u1B>d8v!DjrDN#c;mooYQq3C=?MFK|)>_yTdABRs zbwI?q)Dz1Pd#h>EZK088BYmSndtlRW0*wiyiWgCl)KP6p;hQ65zY()|i*jvjqrWMD zd@vQI5fx&#FDR&jwAAc&2&VZfwsp!!=@5-wfFUq(G6SR43nhJHds>*#8f`{D7PbRG z2jz6@SC=t+Q7Z+fr`_7(c`3(d2oAHb6K@NIYR83SYM#kP$&I3dIl!qW_f6?1lB2tH z^NL|k2+lQxIZ!!NQ=qL&{HJDD86(oz#{JTdSJ>+XA4dG>H7|0h_6vsqpinv9A1S_F zBjl&?$)qBr{!W7TwQbix@ss2;x7HUm^^RL{rS@wThmr z>cVrymfd8cH+z41Aw-S3*#~!hJ;fc_UoEOHh!cP~>rUIBs7*(!8z^S%jvK2%0_Pt~ zZOyh-%Wk-ecKWl1nHL( zi>hoYar9CXPKAXHx5;}~E&HxPQHL|PR%ne4p}BQr9|o+B{Ct+=zKKK9S#pH;9eqJX zsKetYxHeg^=2}*XJh83wxF`9&;`_^+9QT%RT=ACb!V9ZKIQ0EtT&7z9bQ??Bb>-H( zH#zD_c7-(<|2la~G(B{|U2(xPyU{u7Z@Knjf&6GdD02~D$V|5@irRRQ2oo&1wV0Q9 z*aLD4JJ@D~y7_MTetVLg@U1mttuLyRB~~Wg z7x2q$)6h^zH;Y#m&@{2N^#m3J$64HxxtY6Mh`t2a_)|V~*7kk%$AUDujTe0HqJR^H z<5jA1vV*XyYXd59aW(%uIyW99q3Tq#+u9MN-ntj;4WcA`AJvMKtgxp#pe#0>fxv<^ zxxH^nqPgx}^{aWSsh^vnLmrfHpLHm}J#Bz3-U@AT5)0u)PO3U!c0tH5H7Tg(lQIMC#8=*T)Qvvbsr)?IPAv6nNA)@vH{oCc zg+)6_Fy|oGy}>aJO&{-5w%?z{Is$s(XS4|p?xDVqz4Ys@6N@Nw8D{w3;h8}DI)X!o zmQt}o{VvrVUAFJ8m6~10?Mob(s9 zMh0QQM0e%!(~h)1*0?h@!XnPRw3-OID0j=!k&HI0AQ)fh0NO0QxjCCCi19Yh?f|c& z6GX$f?nF41BD3GHVryvXFJZfeQye7t)JW*pA6ksACQG!3WP<+s4#s4O-Va$WDbrFK zm%*|T_%)*<_qkbw#_?oC4Eto{t?d15Eca}+zEH^FP4Fuo@3Hv!7yV5K=ap&rH#~j& zAF3Jg5-5su_*$XbWeEOGIxno#pv7rQ{DwVWjO`ZQo+h_gJ8u=Kv!F?~)FE$FGW;eV zQ$A|xO(-0`^tS6IY$5-T)vUv#(#)e1xATGg$(4{#4LMdB5WJ(0vF$g15*KgHla*fO zPG}Ay*BPR2W#mIITM80d6Ii>Nv~rf>T6=LH?3Gp8o4*PpZMZ+wi&K#ZMhMMz(A_v* z27JUXW78|!uZbHtx#epg)>IySb@^0k)6E>VVS#(8LhpHd+hLc}meowN?lf)XTEfmE zmRrT2FdU~ym4E&wD-R4nIkETWKKA-R=4h-ZM{HjPKhw5V45F$q{Qmp{Oj$AK2Ho}G zI;Zm_y^mvFf!Yf?U+@0iJ#lYWiy*0~&@0zbF;{kMt{XF_9(R69uU12?V@DJM>W_{2 zlQ>cn>{p`dlpm|TB;R`6^SYEk^UXLBXS6r>VndyxN7eK1C;D6;JzII)N>qEfj$>tC zXZ)>{Gr}-d?Gx>E7+=I}%&z;@lFn15*mpTV8F9^?ou}}u?XW$GbBk|XA6=cXMbttYXy!EDSV+A zFa}9G+PR+LX&iao|12ZP!Icr@sF>_V4vC4VI@FTdIX6GQdZfsMOwY{EiB6Lo&d5#|S> zOvPU=uFsB1H-kgY<%3-PwwlstU%09mQ;<;@Qa!df(pL$(k2A@rn)#FtL5pNuAQTo4rnW-By!9#j;2c=*1HKvSiaa?_C zUHzy*F&9tbDKV4oRZdjg(c2I;XCD?OIFJ3?J+WxwcyBjwo24aFNxBoH=KfaOY{MXw z$~jKwrOHq&^=O4IvcrM9dW>_+i#iJHCZ@C8IqK&Dsz@Oq*dphzy1qvZLnVLT8yCn6 zveJ%(7^w%ft&E-j*gv>Cq{!X9JCElGVrL8a;AsTpx8j41WDLx#-7Tx}!_ zY1x#9P5r$S{qxV{6QQ3IHt&#SAsoXrz#cf(0LRiN7lgH`vMR zyNAc!TW&0N&BNjbV0qY#J|$upgR!{9rT>WqXd1Uwt$aA!L3sXVbx{nei5HM3!}v(1 z_ciXD=AjBcmOCIY27-hC!`O0GD!l|~MWW`?C;E2l{^_xuCpkv1_1rV1KP-s{wrV^u z;rR8YlwaM{ra>-obQhIZd3rb8`)8;=o$sE|mo&gcg?^Q|>VjV_hNSlLeSG3GQBk&y zL$4{fcIj@L*6Zub!=rvyweZX?NvdE_>6(duhY1Tf9M6?Dt^2N7WAu-XN;3uAU%v`a z=Yff;_c2ma7>fLHH|%qH!T0sEddgJ0s*Lf9ka}1*ZR|*y2=_7qs;+t;a`=;1Z%(u^3WlI z3{{WLc7_u_94?nwgD9$rkwOeYiOThDVr(9{#uj`TdivJpXnYhVcM}Zi$?D%fz?(OZS8w+n>WoY1-E)5Sr5I zZaS4vf9s6DdzEQ_tc;Y>FPbA%I0)HL)5O1TxcPCo@SqVt(q@aJhZ6c^Oy;yzql+!= zm-Ab3V=+@vTP=eiIV$@wgc^qM6ll;R=FgeWQ?3pYEIXaP#>1_h@It47;vZhfQ56d6 zbO@%+n^w=Gl`KA7G?T5_2x862FzYB_YbVz>7QsPQv-dYndkHJKv&A^<;^lW);Mt`e z3a_(f;Vi$#xv6D9t-4#jJAt|usnGG-#^~Ect)|r3%!+LsaK`CoeKUrXg)uk!ls!F4 zm^hg%i+zke)w);9qFsczD4e=rm!`ugaMdmA1>`Vr_JhE*tUY$8q=4v=UZrnw=R^ea*H-(bd`+@_>Ud*KW*%gges;Ey%#91Ksj!{ua7X4cf zYqTJ>7>dDH12mA@HG6n9{}Nkn?(iz>$zx#3oH6}|bqp9~xuNx&^v}-d7eeY7j%eGu z+z)~}#TKMG)S(o$b+6dEiKI6c}a_u3&8Nb;OrD9`GsgH3yL7dL;pCW#e`^6sESW zJ|aenwUYnEjd54%U7fn5LB{aP)7?Njc`l=`JgeMyymnk)AiK>TD3gMN)^7TpT+*mt z^2?L6wV#97lUw~U4pLg}Uz=50)Aa@MRciV&O3%FwPG&*n=Q`4*>Q=Hry1yCQ=nBAM zANSonXMcR9LAUQ9+)se0f(gD|nG6LMxduQ&0pz4gi$nDImI3mY+gt66Cl;z=gY=Hz z5;BOe>#MuIMdkSmrFXkQ1#Ss%co$hP1*ncZ_VGeysNzhQd?@Ut|=y3ZEzsU>N73n*8=T7>S&ls2{xw}S=rZwiMK zJXG1z`@?D_I{5|(K!h%)-1$MGz~^JKq&HX1r73WUlN?No@|HN@Eb5On=hb-NK0zl$ z7HQsDBX{T0=_Yqv)#+v)-^|BAZV_6><65GMqm5f_xx^2yXWH#Jb?Eg{FCQ_Ev3P|6 z&%iV3fCu^^^NwkoRMTe#wDE;q&&Y)fL6JK_n&sgMo$UwG|Ac}MUdBHj$p0=FJo7OZ zp6ZWHu~0Feiy9@Qw=jNaP+SB#6pcC=h453znz{Ty8~V*xwYn3WRABkF_qV^$H#wit z&(>Sd(Ξ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 F_b;|uh4ugd literal 0 HcmV?d00001 diff --git a/web/static/img/profile.png b/web/static/img/profile.png new file mode 100644 index 0000000000000000000000000000000000000000..caaef9218cc474d362767e4bac4b0479f54b650b GIT binary patch literal 102163 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"+out); +} +function getMemY() +{ + return mem_usedp*100; +} +function processCpuData(data) +{ + cpu_usedp = data.monitor.cpu_use.usedp; + var val = data.monitor.cpu_use.val; + var unit = data.monitor.cpu_use.unit; + $("#con_cpu").html(val +" "+ unit); +} +function getCpuY() +{ + return cpu_usedp*100; +} + +function plot_graph(container,url,processData,getY) { + + //var container = $("#flot-line-chart-moving"); + + // Determine how many data points to keep based on the placeholder's initial size; + // this gives us a nice high-res plot while avoiding more than one point per pixel. + + var maximum = container.outerWidth() / 2 || 300; + + // + + var data = []; + + + + function getBaseData() { + + while (data.length < maximum) { + data.push(0) + } + + // zip the generated y values with the x values + + var res = []; + for (var i = 0; i < data.length; ++i) { + res.push([i, data[i]]) + } + + return res; + } + + function getData() { + + if (data.length) { + data = data.slice(1); + } + + if (data.length < maximum) { + $.post(url,{user:"root",key:"root"},processData,"json"); + var y = getY(); + data.push(y < 0 ? 0 : y > 100 ? 100 : y); + } + + // zip the generated y values with the x values + + var res = []; + for (var i = 0; i < data.length; ++i) { + res.push([i, data[i]]) + } + + return res; + } + + + + series = [{ + data: getBaseData(), + lines: { + fill: true + } + }]; + + + var plot = $.plot(container, series, { + grid: { + + color: "#999999", + tickColor: "#D4D4D4", + borderWidth:0, + minBorderMargin: 20, + labelMargin: 10, + backgroundColor: { + colors: ["#ffffff", "#ffffff"] + }, + margin: { + top: 8, + bottom: 20, + left: 20 + }, + markings: function(axes) { + var markings = []; + var xaxis = axes.xaxis; + for (var x = Math.floor(xaxis.min); x < xaxis.max; x += xaxis.tickSize * 2) { + markings.push({ + xaxis: { + from: x, + to: x + xaxis.tickSize + }, + color: "#fff" + }); + } + return markings; + } + }, + colors: ["#1ab394"], + xaxis: { + tickFormatter: function() { + return ""; + } + }, + yaxis: { + min: 0, + max: 110 + }, + legend: { + show: true + } + }); + + // Update the random dataset at 25FPS for a smoothly-animating chart + + setInterval(function updateRandom() { + series[0].data = getData(); + plot.setData(series); + plot.draw(); + }, 1000); + +} + +var host = window.location.host; + +var node_name = $("#node_name").html(); +var url = "http://" + host + "/monitor/vnodes/" + node_name; + +plot_graph($("#mem-chart"),url + "/mem_use",processMemData,getMemY); +plot_graph($("#cpu-chart"),url + "/cpu_use",processCpuData,getCpuY); diff --git a/web/static/js/plot_monitorReal.js b/web/static/js/plot_monitorReal.js new file mode 100755 index 0000000..5fd47b1 --- /dev/null +++ b/web/static/js/plot_monitorReal.js @@ -0,0 +1,197 @@ + +var used = 0; +var total = 0; +var idle = 0; +var disk_usedp = 0; +var count = 0; +var MB = 1024; + +function processMemData(data) +{ + used = data.monitor.meminfo.used; + total = data.monitor.meminfo.total; + var used2 = ((data.monitor.meminfo.used)/MB).toFixed(2); + var total2 = ((data.monitor.meminfo.total)/MB).toFixed(2); + var free2 = ((data.monitor.meminfo.free)/MB).toFixed(2); + $("#mem_used").html(used2); + $("#mem_total").html(total2); + $("#mem_free").html(free2); +} +function getMemY() +{ + if(total == 0) + return 0; + else + return (used/total)*100; +} +function processCpuData(data) +{ + idle = data.monitor.cpuinfo.idle; + var us = data.monitor.cpuinfo.user; + var sy = data.monitor.cpuinfo.system; + var wa = data.monitor.cpuinfo.iowait; + $("#cpu_user").html(us); + $("#cpu_system").html(sy); + $("#cpu_iowait").html(wa); + $("#cpu_idle").html(idle); +} +function getCpuY() +{ + count++; + //alert(idle); + if(count <= 3 && idle <= 10) + return 0; + else + return (100-idle); +} +function processDiskData(data) +{ + var vals = data.monitor.diskinfo; + disk_usedp = vals[0].usedp; + for(var idx = 0; idx < vals.length; ++idx) + { + var used = (vals[idx].used/MB/MB).toFixed(2); + var total = (vals[idx].total/MB/MB).toFixed(2); + var free = (vals[idx].free/MB/MB).toFixed(2); + var usedp = (vals[idx].percent); + var name = "#disk_" + (idx+1) + "_"; + $(name+"device").html(vals[idx].device); + $(name+"used").html(used); + $(name+"total").html(total); + $(name+"free").html(free); + $(name+"usedp").html(usedp); + } +} +function getDiskY() +{ + return disk_usedp; +} + +function plot_graph(container,url,processData,getY) { + + //var container = $("#flot-line-chart-moving"); + + // Determine how many data points to keep based on the placeholder's initial size; + // this gives us a nice high-res plot while avoiding more than one point per pixel. + + var maximum = container.outerWidth() / 2 || 300; + + // + + var data = []; + + + + function getBaseData() { + + while (data.length < maximum) { + data.push(0) + } + + // zip the generated y values with the x values + + var res = []; + for (var i = 0; i < data.length; ++i) { + res.push([i, data[i]]) + } + + return res; + } + + function getData() { + + if (data.length) { + data = data.slice(1); + } + + if (data.length < maximum) { + $.post(url,{user:"root",key:"unias"},processData,"json"); + var y = getY(); + data.push(y < 0 ? 0 : y > 100 ? 100 : y); + } + + // zip the generated y values with the x values + + var res = []; + for (var i = 0; i < data.length; ++i) { + res.push([i, data[i]]) + } + + return res; + } + + + + series = [{ + data: getBaseData(), + lines: { + fill: true + } + }]; + + + var plot = $.plot(container, series, { + grid: { + + color: "#999999", + tickColor: "#D4D4D4", + borderWidth:0, + minBorderMargin: 20, + labelMargin: 10, + backgroundColor: { + colors: ["#ffffff", "#ffffff"] + }, + margin: { + top: 8, + bottom: 20, + left: 20 + }, + markings: function(axes) { + var markings = []; + var xaxis = axes.xaxis; + for (var x = Math.floor(xaxis.min); x < xaxis.max; x += xaxis.tickSize * 2) { + markings.push({ + xaxis: { + from: x, + to: x + xaxis.tickSize + }, + color: "#fff" + }); + } + return markings; + } + }, + colors: ["#1ab394"], + xaxis: { + tickFormatter: function() { + return ""; + } + }, + yaxis: { + min: 0, + max: 110 + }, + legend: { + show: true + } + }); + + // Update the random dataset at 25FPS for a smoothly-animating chart + + setInterval(function updateRandom() { + series[0].data = getData(); + plot.setData(series); + plot.draw(); + }, 1000); + +} +var host = window.location.host; + +var com_ip = $("#com_ip").html(); +var url = "http://" + host + "/monitor/hosts/"+com_ip; + +plot_graph($("#mem-chart"), url + "/meminfo",processMemData,getMemY); +plot_graph($("#cpu-chart"), url + "/cpuinfo",processCpuData,getCpuY); +//plot_graph($("#disk-chart"), url + "/diskinfo",processDiskData,getDiskY); +$.post(url+"/diskinfo",{user:"root",key:"unias"},processDiskData,"json"); + diff --git a/web/templates/addCluster.html b/web/templates/addCluster.html new file mode 100644 index 0000000..04bf48c --- /dev/null +++ b/web/templates/addCluster.html @@ -0,0 +1,130 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Create Workspace{% endblock %} + +{% block css_src %} + +{% endblock %} + +{% block panel_title %}Workspace Info{% endblock %} + +{% block panel_list %} +

+{% endblock %} + +{% block content %} +
+
+
+
+

Workspace Add

+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + {% for image in images['private'] %} + + + + + + + + {% endfor %} + {% for p_user,p_images in images['public'].items() %} + {% for image in p_images %} + + + + + + + + {% endfor %} + {% endfor %} + +
ImageNameTypeOwnerDescriptionChoose
base
public
dockletA base image for you
{{image['name']}}
{{"private"}}
{{user}}{{image['description']}}
{{image['name']}}
{{"public"}}
{{p_user}}{{image['description']}}
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+ +
+ +{% endblock %} + +{% block script_src %} + + + + + + + + + + + + + + + + + + +{% endblock %} diff --git a/web/templates/admin.html b/web/templates/admin.html new file mode 100644 index 0000000..de53b83 --- /dev/null +++ b/web/templates/admin.html @@ -0,0 +1,173 @@ +{% extends "base_AdminLTE.html"%} +{% block title %}Docklet | Admin{% endblock %} + +{% block panel_title %}Admin{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block css_src %} + + + + + +{% endblock %} + + +{% block content %} +
+
+
+
+

Quota

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + +
IDNameCPUMemoryImageQuantityLifeCycleCommand
+
+
+
+
+ +{% endblock %} + +{% block script_src %} + + + + + +{% endblock %} diff --git a/web/templates/base_AdminLTE.html b/web/templates/base_AdminLTE.html new file mode 100644 index 0000000..51f6afc --- /dev/null +++ b/web/templates/base_AdminLTE.html @@ -0,0 +1,290 @@ + + + + + + {% block title %}Docklet | Dashboard{% endblock %} + + + + + + + + + + + + + + + + + + + + + + + {%block css_src %}{% endblock %} + + + + + +
+ + +
+ + + + + + +
+ + + + +
+ +
+

+ {% block panel_title %}Dashboard{% endblock %} +

+ {% block panel_list %} + + {% endblock %} +
+ +
+ + {% block content %} + {% endblock %} + +
+ +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + +{% if mysession['status'] == 'init' %} + + +{% endif %} + +{% if mysession['status'] == 'applying' %} + + +{% endif %} + + +{% block script_src %} +{% endblock %} + + + diff --git a/web/templates/config.html b/web/templates/config.html new file mode 100755 index 0000000..6c74c04 --- /dev/null +++ b/web/templates/config.html @@ -0,0 +1,315 @@ +{% extends "base_AdminLTE.html"%} + + + +{% block title %}Docklet | Config{% endblock %} + +{% block panel_title %}Config{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block css_src %} + +{% endblock %} + + +{% block content %} +{% for clustername, clusterinfo in clusters.items() %} +
+
+
+
+

WorkSpace Name: {{ clustername }}

+ +
+ + +
+
+
+
+
+
+
+

VCLUSTER

+
create_time:{{clusterinfo['create_time']}}      start_time:{{clusterinfo['start_time']}}
+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + {% for container in clusterinfo['containers'] %} + + + + + + {% if clusterinfo['status'] == 'stopped' %} + + {% else %} + + {% endif %} + + + + {% if container['containername'][-2:] == '-0' %} + + {% else %} + + {% endif %} + + + + + {% endfor %} + +
Node IDNode NameIP AddressStatusImageSaveDelete
{{ loop.index }}{{ container['containername'] }}{{ container['ip'] }}
Stopped
Running
{{ container['image'] }}Delete
+
+
+
+
+
+
+
+
+
+

SERVICE

+
{{ clusterinfo['proxy_url'] }}
+ +
+ + +
+
+
+
+ {% if 'proxy_ip' in clusterinfo %} +

ip:port: + +

+ {% else %} +

ip:port: + +

+ {% endif %} +
+
+
+
+
+
+
+
+
+{% endfor %} +
+
+
+
+

Image Info

+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + {% for image in images['private'] %} + + + + + + + {% if image['isshared'] == 'false' %} + + + {% else %} + + + {% endif %} + + {% endfor %} + {% for p_user,p_images in images['public'].items() %} + {% for image in p_images %} + + + + + + + + {% if p_user == mysession['username'] %} + + {% else %} + + {% endif %} + + {% endfor %} + {% endfor %} + +
ImageNameTypeOwnerCreateTimeDescriptionStatusOperation
base
public
docklet2015-01-01 00:00:00A Base Image For You
{{image['name']}}
{{"private"}}
{{mysession['username']}}{{image['time']}}{{image['description']}}
unshared
+ + +
shared
+ + +
{{image['name']}}
{{"public"}}
{{p_user}}{{image['time']}}{{image['description']}}
+
+
+
+
+ +{% endblock %} + +{% block script_src %} + + + + + + + +{% endblock %} diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html new file mode 100755 index 0000000..1c0a77e --- /dev/null +++ b/web/templates/dashboard.html @@ -0,0 +1,89 @@ +{% extends "base_AdminLTE.html"%} +{% block title %}Docklet | Dashboard{% endblock %} + +{% block panel_title %}Dashboard{% endblock %} + +{% block panel_list %} + +{% endblock %} +{% block content %} +
+
+
+
+

Workspaces

+ +
+ + +
+
+
+ +

+ +

+ + + + + + + + + + + + {% for cluster in clusters %} + + + + {% if cluster['status'] == 'running' %} + + + + {% else %} + + + + {% endif %} + + {% endfor %} + +
IDNameStatusOperationWorkSpace
{{ cluster['id'] }}{{ cluster['name'] }}
Running
+ + + + +
Stopped
+ + + + +
+ +
+
+
+
+ +{% endblock %} +{% block script_src %} + + +{% endblock %} diff --git a/web/templates/dashboard_guest.html b/web/templates/dashboard_guest.html new file mode 100644 index 0000000..0f71040 --- /dev/null +++ b/web/templates/dashboard_guest.html @@ -0,0 +1,329 @@ + + + + + + Docklet | Dashboard + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ + + + +
+ +
+

+ Dashboard +

+ + + +
+ +
+ + +
+
+
+
+

Workspaces

+ +
+ + +
+
+
+ +

+ +

+ + + + + + + + + + + + + + + + + + + +
IDNameStatusOperationWorkSpace
1guest-1-0
Running
+ + + + +
+ +
+
+
+
+ + +
+ +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + +{% if mysession['status'] == 'init' %} + + +{% endif %} + +{% if mysession['status'] == 'applying' %} + + +{% endif %} + + + + + diff --git a/web/templates/error.html b/web/templates/error.html new file mode 100644 index 0000000..865ff80 --- /dev/null +++ b/web/templates/error.html @@ -0,0 +1,10 @@ +{% extends "base_AdminLTE.html"%} +{% block title %}Docklet | Error{% endblock %} + +{% block panel_title %}Error{% endblock %} + +{% block panel_list %}{% endblock %} + +{% block content %} +
{{message}}
+{% endblock %} diff --git a/web/templates/error/401.html b/web/templates/error/401.html new file mode 100755 index 0000000..78301ea --- /dev/null +++ b/web/templates/error/401.html @@ -0,0 +1,30 @@ +{% extends "base_AdminLTE.html"%} + + +{% block title %}Docklet | Error{% endblock %} + +{% block panel_title %}401 Error Page{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block content %} + +
+

401

+ +
+


Unauthorized Action

+ +

+ Sorry, but you did not have the authorizaion for that action, you can go back to + dashboard or log out +

+
+
+{% endblock %} diff --git a/web/templates/error/500.html b/web/templates/error/500.html new file mode 100755 index 0000000..56c27db --- /dev/null +++ b/web/templates/error/500.html @@ -0,0 +1,30 @@ +{% extends "base_AdminLTE.html"%} + + +{% block title %}Docklet | Error{% endblock %} + +{% block panel_title %}500 Error Page{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block content %} + +
+

500

+ +
+


Internal Server Error

+ +

+ The server encountered something unexpected that didn't allow it to complete the request. We apologize.You can go back to + dashboard or log out +

+
+
+{% endblock %} diff --git a/web/templates/home.html b/web/templates/home.html new file mode 100755 index 0000000..e755fa2 --- /dev/null +++ b/web/templates/home.html @@ -0,0 +1,113 @@ + + + + + + + + + Docklet | Home + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+ +
+
+

Workspace = Cluster+Service+Data

+

Package service and data based on virtual cluster as virtual compute environment for your work. This is your Workspace !

+
+
+ +
+
+

Click and Go

+

Distributed or single node ? Never mind ! + Click it just like start an app on your smart phone, and your workspace is + ready for you.

+
+
+ +
+ +
+
+
+ +
+
+

All in Web

+

All you need is a web browser. + Compute in web, code in web, plot in web, anything in web ! + You can get to work anytime and anywhere by internet.

+
+ +
+
+
+

Now,   jupyter / python3 / matplotlib / sklearn /scipy / numpy / pandas / latex is ready for you

+

And,   more workspaces are coming for your data processing / data mining / machine learning work

+
+ +     + +
+
+ + + + +
+

Copyright© 2016 UniAS@ SEI, PKU

+
+ +
+ + + + + + + + diff --git a/web/templates/image_description.html b/web/templates/image_description.html new file mode 100755 index 0000000..7522fdd --- /dev/null +++ b/web/templates/image_description.html @@ -0,0 +1,10 @@ +{% extends "base_AdminLTE.html"%} +{% block title %}Docklet | Description{% endblock %} + +{% block panel_title %}Description{% endblock %} + +{% block panel_list %}{% endblock %} + +{% block content %} +
{{description}}
+{% endblock %} diff --git a/web/templates/listcontainer.html b/web/templates/listcontainer.html new file mode 100644 index 0000000..0b3da3b --- /dev/null +++ b/web/templates/listcontainer.html @@ -0,0 +1,102 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Container{% endblock %} + +{% block panel_title %}ContainerInfo{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block content %} +
+
+
+
+

Cluster Name: {{ clustername }}

+ +
+ + +
+
+
+

+ +

+ + + + + + + + + + + + + + + + {% for container in containers %} + + + + + + {% if status == 'stopped' %} + + {% else %} + + {% endif %} + + + + + + + + + + + {% endfor %} + +
Node IDNode NameIP AddressStatusLast SaveImageDetailFlushSave
{{ loop.index }}{{ container['containername'] }}{{ container['ip'] }}
Stopped
Running
{{ container['lastsave'] }}{{ container['image'] }}DetailFlush
+
+
+
+
+ +{% endblock %} diff --git a/web/templates/login.html b/web/templates/login.html new file mode 100755 index 0000000..cfc7a55 --- /dev/null +++ b/web/templates/login.html @@ -0,0 +1,71 @@ + + + + + + + Docklet | Login + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/templates/monitor/hosts.html b/web/templates/monitor/hosts.html new file mode 100644 index 0000000..afbe6af --- /dev/null +++ b/web/templates/monitor/hosts.html @@ -0,0 +1,145 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Hosts{% endblock %} + +{% block panel_title %}Hosts Info{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block content %} +
+
+
+
+

All Hosts Info

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + {% for phym in machines %} + + + + {% if phym['status'] == 'STOPPED' %} + + {% else %} + + {% endif %} + + + + + + + {% endfor %} + +
NOIP AddressStatusNodes runningCpu usedMem usedDisk usedSummary
{{ loop.index }}{{ phym['ip'] }}
Stopped
Running
+ / + {{ phym['containers']['total'] }} + ------Realtime
+ +
+
+
+
+ +{% endblock %} + +{% block script_src %} + +{% endblock %} diff --git a/web/templates/monitor/hostsConAll.html b/web/templates/monitor/hostsConAll.html new file mode 100644 index 0000000..a420e9f --- /dev/null +++ b/web/templates/monitor/hostsConAll.html @@ -0,0 +1,136 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Hosts{% endblock %} + +{% block panel_title %}Node list for {{ com_ip }}{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block content %} +
+
+
+
+

Total Nodes

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + {% for container in containerslist %} + + + + {% if container['State'] == 'STOPPED' %} + + + + {% else %} + + + + {% endif %} + + + + + {% endfor %} + +
NONameStatePIDIP AddressCpu usedMem usedSummary
{{ loop.index }}{{ container['Name'] }}
Stopped
----
Running
{{ container['PID'] }}{{ container['IP'] }}----Realtime
+ +
+
+
+
+ +{% endblock %} + +{% block script_src %} + +{% endblock %} diff --git a/web/templates/monitor/hostsRealtime.html b/web/templates/monitor/hostsRealtime.html new file mode 100644 index 0000000..aae07ee --- /dev/null +++ b/web/templates/monitor/hostsRealtime.html @@ -0,0 +1,289 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Hosts{% endblock %} + +{% block panel_title %}Summary for
{{ com_ip }}
{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block css_src %} + +{% endblock %} + +{% block content %} +
+
+
+
+

CPU info

+ +
+ + +
+
+
+ + + + + + + + + + + + + {% for processor in processors %} + + + + + + + + + {% endfor %} + +
Processor IDModel namephysical idcore idcpu MHzcache size
{{ processor['processor'] }}{{ processor['model name']}}{{ processor['physical id']}}{{ processor['core id']}}{{ processor['cpu MHz']}}{{ processor['cache size']}}
+ +
+
+
+
+ +
+
+
+
+

OS info

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
OS name{{ OSinfo['platform']}}
OS node name{{ OSinfo['node']}}
OS kernel release{{ OSinfo['release']}}
OS kernel version{{ OSinfo['version']}}
OS kernel machine{{ OSinfo['machine']}}
+ +
+
+
+
+ +
+
+
+
+

Cpu and Memory Status

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cpu(%)Memory(MB)
usersystemiowaitidleusedfreetotal
--------------
+
+
+
+
+ +
+
+
+
+

Disk Status

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + {% for diskinfo in diskinfos %} + + + + + + + + {% endfor %} + +
Disk info
deviceused(MB)free(MB)total(MB)used percent(%)
----------
+ +
+
+
+
+ +
+
+
+
+

Memory Used(%):

+ +
+ + +
+
+
+ +
+
+
+
+
+
+
+
+
+

CPU Used(%):

+ +
+ + +
+
+
+ +
+
+
+
+
+
+
+ + + + +{% endblock %} + +{% block script_src %} + + + + + + + + + +{% endblock %} diff --git a/web/templates/monitor/monitorUserAll.html b/web/templates/monitor/monitorUserAll.html new file mode 100644 index 0000000..1b436ab --- /dev/null +++ b/web/templates/monitor/monitorUserAll.html @@ -0,0 +1,65 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | MonitorUser{% endblock %} + +{% block panel_title %}Users Info{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block content %} +
+
+
+
+

All Users Info

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + {% for user in userslist %} + + + + + + + + + + + {% endfor %} + +
NONameRunning/Total ClustersRunning/Total ContainersRegister TimeLast LoginFrequencyDetail
{{ loop.index }}{{ user['name'] }}{{ user['clustercnt']['clurun'] }}/{{ user['clustercnt']['clutotal'] }}{{ user['clustercnt']['conrun'] }}/{{ user['clustercnt']['contotal'] }}------Clusters
+ +
+
+
+
+{% endblock %} diff --git a/web/templates/monitor/monitorUserCluster.html b/web/templates/monitor/monitorUserCluster.html new file mode 100644 index 0000000..4d983be --- /dev/null +++ b/web/templates/monitor/monitorUserCluster.html @@ -0,0 +1,74 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Monitor{% endblock %} + +{% block panel_title %}NodeInfo for {{ muser }}{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block content %} +{% for cluster in clusters %} +
+
+
+
+

Cluster Name: {{ cluster }}

+ +
+ + +
+
+
+ + + + + + + + + + + + + + {% for container in containers[cluster]['containers'] %} + + + + + + {% if containers[cluster]['status'] == 'stopped' %} + + {% else %} + + {% endif %} + + + + + {% endfor %} + +
Node IDNode NameIP AddressStatusCreate Timedetail
{{ loop.index }}{{ container['containername'] }}{{ container['ip'] }}
Stopped
Running
xxxxxDetail
+ +
+
+
+
+ +{% endfor %} +{% endblock %} diff --git a/web/templates/monitor/status.html b/web/templates/monitor/status.html new file mode 100644 index 0000000..24e860c --- /dev/null +++ b/web/templates/monitor/status.html @@ -0,0 +1,136 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Status{% endblock %} + +{% block panel_title %}Workspace VCluster Status{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block content %} +{% for cluster in clusters %} +
+
+
+
+

VCluster Name: {{ cluster }}

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + {% for container in containers[cluster]['containers'] %} + + + + + + {% if containers[cluster]['status'] == 'stopped' %} + + {% else %} + + {% endif %} + + + + + + {% endfor %} + +
Node IDNode NameIP AddressStatusCpu usedMem usedSummary
{{ loop.index }}{{ container['containername'] }}{{ container['ip'] }}
Stopped
Running
----Realtime
+ +
+
+
+
+ +{% endfor %} +{% endblock %} + +{% block script_src %} + +{% endblock %} diff --git a/web/templates/monitor/statusRealtime.html b/web/templates/monitor/statusRealtime.html new file mode 100644 index 0000000..42b1e15 --- /dev/null +++ b/web/templates/monitor/statusRealtime.html @@ -0,0 +1,122 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Node Summary{% endblock %} + +{% block panel_title %}Summary for
{{ node_name }}
{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block css_src %} + +{% endblock %} + +{% block content %} +
+
+
+
+

Current Status

+ +
+ + +
+
+
+ + + + + + + + + + + + + + {% if container['State'] == 'STOPPED' %} + + + {% else %} + + + {% endif %} + + + + +
NameStateIP AddressCPU UseMem Use
{{ container['Name'] }}
Stopped
--
Running
{{ container['IP'] }}----
+ +
+
+
+
+
+
+
+
+

Memory Used(%):

+ +
+ + +
+
+
+ +
+
+
+
+
+
+
+
+
+

CPU Used(%):

+ +
+ + +
+
+
+ +
+
+
+
+
+
+
+{% endblock %} + +{% block script_src %} + + + + + + + + + + +{% endblock %} diff --git a/web/templates/opfailed.html b/web/templates/opfailed.html new file mode 100644 index 0000000..1e848af --- /dev/null +++ b/web/templates/opfailed.html @@ -0,0 +1,24 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Failed{% endblock %} + +{% block panel_title %}Failed{% endblock %} + +{% block panel_list %} + +{% endblock %} +{% block content %} + +{% endblock %} diff --git a/web/templates/opsuccess.html b/web/templates/opsuccess.html new file mode 100644 index 0000000..256e504 --- /dev/null +++ b/web/templates/opsuccess.html @@ -0,0 +1,24 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Success{% endblock %} + +{% block panel_title %}Success{% endblock %} + +{% block panel_list %} + +{% endblock %} +{% block content %} + +{% endblock %} diff --git a/web/templates/saveconfirm.html b/web/templates/saveconfirm.html new file mode 100644 index 0000000..9ffdfbd --- /dev/null +++ b/web/templates/saveconfirm.html @@ -0,0 +1,35 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Confirm{% endblock %} + +{% block panel_title %}Confirm{% endblock %} + +{% block css_src %} +.hide { display:none; } +{% endblock %} + +{% block panel_list %} + +{% endblock %} + + +{% block content %} +
+
+ + + +
+
+ + +
+
+{% endblock %} diff --git a/web/templates/user/activate.html b/web/templates/user/activate.html new file mode 100644 index 0000000..afeae64 --- /dev/null +++ b/web/templates/user/activate.html @@ -0,0 +1,73 @@ + + + + + + Docklet | Login + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/templates/user/info.html b/web/templates/user/info.html new file mode 100644 index 0000000..f373d41 --- /dev/null +++ b/web/templates/user/info.html @@ -0,0 +1,256 @@ +{% extends 'base_AdminLTE.html' %} + +{% block title %}Docklet | Information Modify{% endblock %} + +{% block css_src %} + +{% endblock %} + +{% block panel_title %}Detail for User Infomation{% endblock %} + +{% block panel_list %} + +{% endblock %} + + +{% block content %} +
+
+
+
+

User Info

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
User Name{{ info['username'] }}
Nickname{{ info['nickname'] }}
Description{{ info['description'] }}
Truename{{ info['truename'] }}
Status{{ info['status'] }}
E-mail{{ info['e_mail'] }}
Department{{ info['department'] }}
ID Number{{ info['student_number'] }}
Telephone{{ info['tel'] }}
+
+
+
+ +
+ +{% endblock %} + +{% block script_src %} + + + + +{% endblock %} diff --git a/web/templates/user/mailservererror.html b/web/templates/user/mailservererror.html new file mode 100644 index 0000000..b4b7d1f --- /dev/null +++ b/web/templates/user/mailservererror.html @@ -0,0 +1,30 @@ +{% extends "base_AdminLTE.html"%} + + +{% block title %}Docklet | Error{% endblock %} + +{% block panel_title %}500 Error Page{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block content %} + +
+

500

+ +
+


Internal Server Error

+ +

+ Please examine your mail server config(now exim4).You can go back to + dashboard or log out +

+
+
+{% endblock %} diff --git a/web/templates/user_list.html b/web/templates/user_list.html new file mode 100644 index 0000000..c3f31bd --- /dev/null +++ b/web/templates/user_list.html @@ -0,0 +1,273 @@ +{% extends "base_AdminLTE.html"%} +{% block title %}Docklet | UserList{% endblock %} + +{% block panel_title %}UserList{% endblock %} + +{% block panel_list %} + +{% endblock %} + +{% block css_src %} + + + + + + +{% endblock %} + + +{% block content %} +
+
+
+
+

User List

+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + +
IDUserNameE_mailTelRegisterDateStatusGroupCommand
+ +
+
+
+{% endblock %} + +{% block script_src %} + + + + + +{% endblock %} diff --git a/web/web.py b/web/web.py new file mode 100755 index 0000000..5911d05 --- /dev/null +++ b/web/web.py @@ -0,0 +1,448 @@ +#!/usr/bin/python3 +import json +import os +import getopt + +import sys, inspect +this_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0])) +src_folder = os.path.realpath(os.path.abspath(os.path.join(this_folder,"..", "src"))) +if src_folder not in sys.path: + sys.path.insert(0, src_folder) + +# must first init loadenv +import tools, env +config = env.getenv("CONFIG") +tools.loadenv(config) + +from webViews.log import initlogging +initlogging("docklet-web") +from webViews.log import logger + +from flask import Flask, request, session, render_template, redirect, send_from_directory, make_response, url_for, abort +from webViews.dashboard import dashboardView +from webViews.user.userlist import userlistView, useraddView, usermodifyView, groupaddView, userdataView, userqueryView +from webViews.user.userinfo import userinfoView +from webViews.user.userActivate import userActivateView +from webViews.user.grouplist import grouplistView, groupqueryView, groupdetailView, groupmodifyView +from functools import wraps +from webViews.dockletrequest import dockletRequest +from webViews.cluster import * +from webViews.admin import * +from webViews.monitor import * +from webViews.authenticate.auth import login_required, administration_required,activated_required +from webViews.authenticate.register import registerView +from webViews.authenticate.login import loginView, logoutView +import webViews.dockletrequest +from webViews import cookie_tool + + + + + +external_login = env.getenv('EXTERNAL_LOGIN') +#default config +external_login_url = '/external_auth/' +external_login_callback_url = '/external_auth_callback/' +if (external_login == 'True'): + sys.path.insert(0, os.path.realpath(os.path.abspath(os.path.join(this_folder,"../src", "plugin")))) + import external_generate + from webViews.authenticate.login import external_loginView, external_login_callbackView + external_login_url = external_generate.external_login_url + external_login_callback_url = external_generate.external_login_callback_url + + +app = Flask(__name__) + + + +@app.route("/", methods=['GET']) +def home(): + return render_template('home.html') + +@app.route("/login/", methods=['GET', 'POST']) +def login(): + return loginView.as_view() + +@app.route(external_login_url, methods=['GET']) +def external_login_func(): + try: + return external_loginView.as_view() + except: + abort(404) + +@app.route(external_login_callback_url, methods=['GET']) +def external_login_callback(): + try: + return external_login_callbackView.as_view() + except: + abort(404) + +@app.route("/logout/", methods=["GET"]) +@login_required +def logout(): + return logoutView.as_view() + +@app.route("/register/", methods=['GET', 'POST']) +@administration_required +#now forbidden,only used by SEI & PKU Staffs and students. +#can be used by admin for testing +def register(): + return registerView.as_view() + + + +@app.route("/activate/", methods=['GET', 'POST']) +@login_required +def activate(): + return userActivateView.as_view() + +@app.route("/dashboard/", methods=['GET']) +@login_required +def dashboard(): + return dashboardView.as_view() + +@app.route("/dashboard_guest/", methods=['GET']) +def dashboard_guest(): + resp = make_response(dashboard_guestView.as_view()) + resp.set_cookie('guest-cookie', cookie_tool.generate_cookie('guest', app.secret_key)) + return resp + +@app.route("/document/", methods=['GET']) +def redirect_dochome(): + return redirect("http://docklet.unias.org/userguide") + +@app.route("/config/", methods=['GET']) +@login_required +def config(): + return configView.as_view() + + +@app.route("/workspace/create/", methods=['GET']) +@activated_required +def addCluster(): + return addClusterView.as_view() + +@app.route("/workspace/list/", methods=['GET']) +@login_required +def listCluster(): + return listClusterView.as_view() + +@app.route("/workspace/add/", methods=['POST']) +@login_required +def createCluster(): + createClusterView.clustername = request.form["clusterName"] + createClusterView.image = request.form["image"] + return createClusterView.as_view() + +@app.route("/workspace/scaleout//", methods=['POST']) +@login_required +def scaleout(clustername): + scaleoutView.image = request.form["image"] + scaleoutView.clustername = clustername + return scaleoutView.as_view() + +@app.route("/workspace/scalein///", methods=['GET']) +@login_required +def scalein(clustername,containername): + scaleinView.clustername = clustername + scaleinView.containername = containername + return scaleinView.as_view() + +@app.route("/workspace/start//", methods=['GET']) +@login_required +def startClustet(clustername): + startClusterView.clustername = clustername + return startClusterView.as_view() + +@app.route("/workspace/stop//", methods=['GET']) +@login_required +def stopClustet(clustername): + stopClusterView.clustername = clustername + return stopClusterView.as_view() + +@app.route("/workspace/delete//", methods=['GET']) +@login_required +def deleteClustet(clustername): + deleteClusterView.clustername = clustername + return deleteClusterView.as_view() + +@app.route("/workspace/detail//", methods=['GET']) +@login_required +def detailCluster(clustername): + detailClusterView.clustername = clustername + return detailClusterView.as_view() + +@app.route("/workspace/flush///", methods=['GET']) +@login_required +def flushCluster(clustername,containername): + flushClusterView.clustername = clustername + flushClusterView.containername = containername + return flushClusterView.as_view() + +@app.route("/workspace/save///", methods=['POST']) +@login_required +def saveImage(clustername,containername): + saveImageView.clustername = clustername + saveImageView.containername = containername + saveImageView.isforce = "false" + saveImageView.imagename = request.form['ImageName'] + saveImageView.description = request.form['description'] + return saveImageView.as_view() + +@app.route("/workspace/save///force/", methods=['POST']) +@login_required +def saveImage_force(clustername,containername): + saveImageView.clustername = clustername + saveImageView.containername = containername + saveImageView.isforce = "true" + saveImageView.imagename = request.form['ImageName'] + saveImageView.description = request.form['description'] + return saveImageView.as_view() + +@app.route("/addproxy//", methods=['POST']) +@login_required +def addproxy(clustername): + addproxyView.clustername = clustername + addproxyView.ip = request.form['proxy_ip'] + addproxyView.port = request.form['proxy_port'] + return addproxyView.as_view() + +@app.route("/deleteproxy//", methods=['GET']) +@login_required +def deleteproxy(clustername): + deleteproxyView.clustername = clustername + return deleteproxyView.as_view() + +@app.route("/image/description//", methods=['GET']) +@login_required +def descriptionImage(image): + descriptionImageView.image = image + return descriptionImageView.as_view() + +@app.route("/image/share//", methods=['GET']) +@login_required +def shareImage(image): + shareImageView.image = image + return shareImageView.as_view() + +@app.route("/image/unshare//", methods=['GET']) +@login_required +def unshareImage(image): + unshareImageView.image = image + return unshareImageView.as_view() + +@app.route("/image/delete//", methods=['GET']) +@login_required +def deleteImage(image): + deleteImageView.image = image + return deleteImageView.as_view() + +@app.route("/hosts/", methods=['GET']) +@administration_required +def hosts(): + return hostsView.as_view() + +@app.route("/hosts//", methods=['GET']) +@administration_required +def hostsRealtime(com_ip): + hostsRealtimeView.com_ip = com_ip + return hostsRealtimeView.as_view() + +@app.route("/hosts//containers/", methods=['GET']) +@administration_required +def hostsConAll(com_ip): + hostsConAllView.com_ip = com_ip + return hostsConAllView.as_view() + +@app.route("/vclusters/", methods=['GET']) +@login_required +def status(): + return statusView.as_view() + +@app.route("/vclusters///", methods=['GET']) +@login_required +def statusRealtime(vcluster_name,node_name): + statusRealtimeView.node_name = node_name + return statusRealtimeView.as_view() + +@app.route("/monitor/hosts//", methods=['POST']) +@app.route("/monitor/vnodes//", methods=['POST']) +@login_required +def monitor_request(comid,infotype): + data = { + "user": session['username'] + } + result = dockletRequest.post(request.path, data) + return json.dumps(result) + +@app.route("/monitor/User/", methods=['GET']) +@administration_required +def monitorUserAll(): + return monitorUserAllView.as_view() + + + + +@app.route("/user/list/", methods=['GET', 'POST']) +@administration_required +def userlist(): + return userlistView.as_view() + +@app.route("/group/list/", methods=['POST']) +@administration_required +def grouplist(): + return grouplistView.as_view() + +@app.route("/group/detail/", methods=['POST']) +@administration_required +def groupdetail(): + return groupdetailView.as_view() + +@app.route("/group/query/", methods=['POST']) +@administration_required +def groupquery(): + return groupqueryView.as_view() + +@app.route("/group/modify/", methods=['POST']) +@administration_required +def groupmodify(): + return groupmodifyView.as_view() + +@app.route("/user/data/", methods=['GET', 'POST']) +@administration_required +def userdata(): + return userdataView.as_view() + +@app.route("/user/add/", methods=['POST']) +@administration_required +def useradd(): + return useraddView.as_view() + +@app.route("/user/modify/", methods=['POST']) +@administration_required +def usermodify(): + return usermodifyView.as_view() + +@app.route("/group/add/", methods=['POST']) +@administration_required +def groupadd(): + return groupaddView.as_view() + +@app.route("/user/info/", methods=['GET', 'POST']) +@login_required +def userinfo(): + return userinfoView.as_view() + +@app.route("/user/query/", methods=['GET', 'POST']) +@administration_required +def userquery(): + return userqueryView.as_view() + + +@app.route("/admin/", methods=['GET', 'POST']) +@administration_required +def adminpage(): + return adminView.as_view() + +@app.route('/index/', methods=['GET']) +def jupyter_control(): + return redirect('/dashboard/') + +# for download basefs.tar.bz +# remove, not the function of docklet +# should download it from a http server +#@app.route('/download/basefs', methods=['GET']) +#def download(): + #fsdir = env.getenv("FS_PREFIX") + #return send_from_directory(fsdir+'/local', 'basefs.tar.bz', as_attachment=True) + +# jupyter auth APIs +@app.route('/jupyter/', methods=['GET']) +def jupyter_prefix(): + path = request.args.get('next') + if path == None: + return redirect('/login/') + return redirect('/login/'+'?next='+path) + +@app.route('/jupyter/home/', methods=['GET']) +def jupyter_home(): + return redirect('/dashboard/') + +@app.route('/jupyter/login/', methods=['GET', 'POST']) +def jupyter_login(): + return redirect('/login/') + +@app.route('/jupyter/logout/', methods=['GET']) +def jupyter_logout(): + return redirect('/logout/') + +@app.route('/jupyter/authorizations/cookie///', methods=['GET']) +def jupyter_auth(cookie_name, cookie_content): + username = cookie_tool.parse_cookie(cookie_content, app.secret_key) + if username == None: + resp = make_response('cookie auth failed') + resp.status_code = 404 + return resp + return json.dumps({'name': username}) + +@app.errorhandler(401) +def not_authorized(error): + if "username" in session: + return render_template('error/401.html', mysession = session) + else: + return redirect('/login/') + +@app.errorhandler(500) +def internal_server_error(error): + if "username" in session: + return render_template('error/500.html', mysession = session) + else: + return redirect('/login/') +if __name__ == '__main__': + ''' + to generate a secret_key + + from base64 import b64encode + from os import urandom + + secret_key = urandom(24) + secret_key = b64encode(secret_key).decode('utf-8') + + ''' + logger.info('Start Flask...:') + try: + secret_key_file = open(env.getenv('FS_PREFIX') + '/local/web_secret_key.txt') + app.secret_key = secret_key_file.read() + secret_key_file.close() + except: + from base64 import b64encode + from os import urandom + secret_key = urandom(24) + secret_key = b64encode(secret_key).decode('utf-8') + app.secret_key = secret_key + secret_key_file = open(env.getenv('FS_PREFIX') + '/local/web_secret_key.txt', 'w') + secret_key_file.write(secret_key) + secret_key_file.close() + + os.environ['APP_KEY'] = app.secret_key + runcmd = sys.argv[0] + app.runpath = runcmd.rsplit('/', 1)[0] + + webip = "0.0.0.0" + webport = env.getenv("WEB_PORT") + + webViews.dockletrequest.endpoint = 'http://%s:%d' % (env.getenv('MASTER_IP'), env.getenv('MASTER_PORT')) + + + try: + opts, args = getopt.getopt(sys.argv[1:], "i:p:", ["ip=", "port="]) + except getopt.GetoptError: + print ("%s -i ip -p port" % sys.argv[0]) + sys.exit(2) + for opt, arg in opts: + if opt in ("-i", "--ip"): + webip = arg + elif opt in ("-p", "--port"): + webport = int(arg) + + app.run(host = webip, port = webport, debug = True, threaded=True) diff --git a/web/webViews/admin.py b/web/webViews/admin.py new file mode 100755 index 0000000..a043354 --- /dev/null +++ b/web/webViews/admin.py @@ -0,0 +1,14 @@ +from flask import session +from webViews.view import normalView +from webViews.dockletrequest import dockletRequest +from webViews.dashboard import * +import time, re + +class adminView(normalView): + template_path = "admin.html" + + @classmethod + def get(self): + groups = dockletRequest.post('/user/groupNameList/')["groups"] + return self.render(self.template_path, groups = groups) + diff --git a/web/webViews/authenticate/auth.py b/web/webViews/authenticate/auth.py new file mode 100644 index 0000000..730ee2c --- /dev/null +++ b/web/webViews/authenticate/auth.py @@ -0,0 +1,60 @@ +from flask import session, request, abort, redirect +from functools import wraps + + +def login_required(func): + @wraps(func) + def wrapper(*args, **kwargs): + if request.method == 'POST' : + if not is_authenticated(): + abort(401) + else: + return func(*args, **kwargs) + else: + if not is_authenticated(): + return redirect("/login/" + "?next=" + request.path) + else: + return func(*args, **kwargs) + + return wrapper + +def administration_required(func): + @wraps(func) + def wrapper(*args, **kwargs): + if not is_admin(): + abort(401) + else: + return func(*args, **kwargs) + + + return wrapper + +def activated_required(func): + @wraps(func) + def wrapper(*args, **kwargs): + if not is_activated(): + abort(401) + else: + return func(*args, **kwargs) + + + return wrapper + +def is_authenticated(): + if "username" in session: + return True + else: + return False +def is_admin(): + if not "username" in session: + return False + if not (session['usergroup'] == 'root' or session['usergroup'] == 'admin'): + return False + return True + +def is_activated(): + if not "username" in session: + return False + if not (session['status']=='normal'): + return False + return True diff --git a/web/webViews/authenticate/login.py b/web/webViews/authenticate/login.py new file mode 100755 index 0000000..bdf728f --- /dev/null +++ b/web/webViews/authenticate/login.py @@ -0,0 +1,138 @@ +from webViews.view import normalView +from webViews.authenticate.auth import is_authenticated +from webViews.dockletrequest import dockletRequest +from flask import redirect, request, render_template, session, make_response +from webViews import cookie_tool + +import hashlib +#from suds.client import Client + +import os, sys, inspect +this_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0])) +src_folder = os.path.realpath(os.path.abspath(os.path.join(this_folder,"../../..", "src"))) +if src_folder not in sys.path: + sys.path.insert(0, src_folder) + +import env + +if (env.getenv('EXTERNAL_LOGIN') == 'True'): + sys.path.insert(0, os.path.realpath(os.path.abspath(os.path.join(this_folder,"../../../src", "plugin")))) + import external_generate + +def refreshInfo(): + '''not used now''' + result = dockletRequest.post('/login/', data) + ok = result and result.get('success', None) + session['username'] = request.form['username'] + session['nickname'] = result['data']['nickname'] + session['description'] = result['data']['description'][0:10] + session['avatar'] = '/static/avatar/'+ result['data']['avatar'] + session['usergroup'] = result['data']['group'] + session['status'] = result['data']['status'] + session['token'] = result['data']['token'] + +class loginView(normalView): + template_path = "login.html" + + @classmethod + def get(self): + if is_authenticated(): + #refreshInfo() + return redirect(request.args.get('next',None) or '/dashboard/') + if (env.getenv('EXTERNAL_LOGIN') == 'True'): + link = external_generate.external_login_link + else: + link = '' + return render_template(self.template_path, link = link) + + @classmethod + def post(self): + if (request.form['username']): + data = {"user": request.form['username'], "key": request.form['password']} + result = dockletRequest.unauthorizedpost('/login/', data) + ok = result and result.get('success', None) + if (ok and (ok == "true")): + # set cookie:docklet-jupyter-cookie for jupyter notebook + resp = make_response(redirect(request.args.get('next',None) or '/dashboard/')) + app_key = os.environ['APP_KEY'] + resp.set_cookie('docklet-jupyter-cookie', cookie_tool.generate_cookie(request.form['username'], app_key)) + # set session for docklet + session['username'] = request.form['username'] + session['nickname'] = result['data']['nickname'] + session['description'] = result['data']['description'] + session['avatar'] = '/static/avatar/'+ result['data']['avatar'] + session['usergroup'] = result['data']['group'] + session['status'] = result['data']['status'] + session['token'] = result['data']['token'] + return resp + else: + return redirect('/login/') + else: + self.error() + +class logoutView(normalView): + + @classmethod + def get(self): + resp = make_response(redirect('/login/')) + session.pop('username', None) + session.pop('nickname', None) + session.pop('description', None) + session.pop('avatar', None) + session.pop('status', None) + session.pop('usergroup', None) + session.pop('token', None) + resp.set_cookie('docklet-jupyter-cookie', '', expires=0) + return resp + + +class external_login_callbackView(normalView): + @classmethod + def get(self): + + form = external_generate.external_auth_generate_request() + result = dockletRequest.unauthorizedpost('/external_login/', form) + ok = result and result.get('success', None) + if (ok and (ok == "true")): + # set cookie:docklet-jupyter-cookie for jupyter notebook + resp = make_response(redirect(request.args.get('next',None) or '/dashboard/')) + app_key = os.environ['APP_KEY'] + resp.set_cookie('docklet-jupyter-cookie', cookie_tool.generate_cookie(result['data']['username'], app_key)) + # set session for docklet + session['username'] = result['data']['username'] + session['nickname'] = result['data']['nickname'] + session['description'] = result['data']['description'] + session['avatar'] = '/static/avatar/'+ result['data']['avatar'] + session['usergroup'] = result['data']['group'] + session['status'] = result['data']['status'] + session['token'] = result['data']['token'] + return resp + else: + return redirect('/login/') + + @classmethod + def post(self): + + form = external_generate.external_auth_generate_request() + result = dockletRequest.unauthorizedpost('/external_login/', form) + ok = result and result.get('success', None) + if (ok and (ok == "true")): + # set cookie:docklet-jupyter-cookie for jupyter notebook + resp = make_response(redirect(request.args.get('next',None) or '/dashboard/')) + app_key = os.environ['APP_KEY'] + resp.set_cookie('docklet-jupyter-cookie', cookie_tool.generate_cookie(result['data']['username'], app_key)) + # set session for docklet + session['username'] = result['data']['username'] + session['nickname'] = result['data']['nickname'] + session['description'] = result['data']['description'] + session['avatar'] = '/static/avatar/'+ result['data']['avatar'] + session['usergroup'] = result['data']['group'] + session['status'] = result['data']['status'] + session['token'] = result['data']['token'] + return resp + else: + return redirect('/login/') + +class external_loginView(normalView): + if (env.getenv('EXTERNAL_LOGIN') == 'True'): + template_path = external_generate.html_path diff --git a/web/webViews/authenticate/register.py b/web/webViews/authenticate/register.py new file mode 100644 index 0000000..1302ea0 --- /dev/null +++ b/web/webViews/authenticate/register.py @@ -0,0 +1,14 @@ +from webViews.view import normalView +from webViews.dockletrequest import dockletRequest +from flask import redirect, request, abort + +class registerView(normalView): + template_path = 'register.html' + + @classmethod + def post(self): + form = dict(request.form) + if (request.form.get('username') == None or request.form.get('password') == None or request.form.get('password') != request.form.get('password2') or request.form.get('email') == None or request.form.get('description') == None): + abort(500) + result = dockletRequest.unauthorizedpost('/register/', form) + return self.render('waitingRegister.html') diff --git a/web/webViews/cluster.py b/web/webViews/cluster.py new file mode 100755 index 0000000..6c130b6 --- /dev/null +++ b/web/webViews/cluster.py @@ -0,0 +1,297 @@ +from flask import session +from webViews.view import normalView +from webViews.dockletrequest import dockletRequest +from webViews.dashboard import * +import time, re + +class addClusterView(normalView): + template_path = "addCluster.html" + + @classmethod + def get(self): + result = dockletRequest.post("/image/list/") + images = result.get("images") + if (result): + return self.render(self.template_path, user = session['username'], images = images) + else: + self.error() + +class createClusterView(normalView): + template_path = "dashboard.html" + error_path = "error.html" + + @classmethod + def post(self): + index1 = self.image.rindex("_") + index2 = self.image[:index1].rindex("_") + data = { + "clustername": self.clustername, + 'imagename': self.image[:index2], + 'imageowner': self.image[index2+1:index1], + 'imagetype': self.image[index1+1:], + } + result = dockletRequest.post("/cluster/create/", data) + if(result.get('success', None) == "true"): + return dashboardView.as_view() + #return self.render(self.template_path, user = session['username']) + else: + return self.render(self.error_path, message = result.get('message')) + +class descriptionImageView(normalView): + template_path = "image_description.html" + + @classmethod + def get(self): + index1 = self.image.rindex("_") + index2 = self.image[:index1].rindex("_") + data = { + "imagename": self.image[:index2], + "imageowner": self.image[index2+1:index1], + "imagetype": self.image[index1+1:] + } + result = dockletRequest.post("/image/description/", data) + if(result): + description = result.get("message") + return self.render(self.template_path, description = description) + else: + self.error() + +class scaleoutView(normalView): + error_path = "error.html" + + @classmethod + def post(self): + index1 = self.image.rindex("_") + index2 = self.image[:index1].rindex("_") + data = { + "clustername": self.clustername, + 'imagename': self.image[:index2], + 'imageowner': self.image[index2+1:index1], + 'imagetype': self.image[index1+1:] + } + result = dockletRequest.post("/cluster/scaleout/", data) + if(result.get('success', None) == "true"): + return configView.as_view() + else: + return self.render(self.error_path, message = result.get('message')) + +class scaleinView(normalView): + @classmethod + def get(self): + data = { + "clustername": self.clustername, + "containername":self.containername + } + result = dockletRequest.post("/cluster/scalein/", data) + if(result): + return configView.as_view() + else: + self.error() + +class listClusterView(normalView): + template_path = "listCluster.html" + + @classmethod + def get(self): + result = dockletRequest.post("/cluster/list/") + clusters = result.get("clusters") + if(result): + return self.render(self.template_path, user = session['username'], clusters = clusters) + else: + self.error() + +class startClusterView(normalView): + template_path = "dashboard.html" + + @classmethod + def get(self): + data = { + "clustername": self.clustername + } + result = dockletRequest.post("/cluster/start/", data) + if(result): + return dashboardView.as_view() + else: + return self.error() + +class stopClusterView(normalView): + template_path = "dashboard.html" + + @classmethod + def get(self): + data = { + "clustername": self.clustername + } + result = dockletRequest.post("/cluster/stop/", data) + if(result): + return dashboardView.as_view() + else: + return self.error() + +class flushClusterView(normalView): + success_path = "opsuccess.html" + failed_path = "opfailed.html" + + @classmethod + def get(self): + data = { + "clustername": self.clustername, + "from_lxc": self.containername + } + result = dockletRequest.post("/cluster/flush/", data) + + if(result): + if result.get('success') == "true": + return self.render(self.success_path, user = session['username']) + else: + return self.render(self.failed_path, user = session['username']) + else: + self.error() + +class deleteClusterView(normalView): + template_path = "dashboard.html" + + @classmethod + def get(self): + data = { + "clustername": self.clustername + } + result = dockletRequest.post("/cluster/delete/", data) + if(result): + return dashboardView.as_view() + else: + return self.error() + +class detailClusterView(normalView): + template_path = "listcontainer.html" + + @classmethod + def get(self): + data = { + "clustername": self.clustername + } + result = dockletRequest.post("/cluster/info/", data) + if(result): + message = result.get('message') + containers = message['containers'] + status = message['status'] + return self.render(self.template_path, containers = containers, user = session['username'], clustername = self.clustername, status = status) + else: + self.error() + +class saveImageView(normalView): + template_path = "saveconfirm.html" + success_path = "opsuccess.html" + + @classmethod + def post(self): + data = { + "clustername": self.clustername, + "image": self.imagename, + "containername": self.containername, + "description": self.description, + "isforce": self.isforce + } + result = dockletRequest.post("/cluster/save/", data) + if(result): + if result.get('success') == 'true': + #return self.render(self.success_path, user = session['username']) + return configView.as_view() + #res = detailClusterView() + #res.clustername = self.clustername + #return res.as_view() + else: + return self.render(self.template_path, containername = self.containername, clustername = self.clustername, image = self.imagename, user = session['username'], description = self.description) + else: + self.error() + +class shareImageView(normalView): + template_path = "dashboard.html" + + @classmethod + def get(self): + data = { + "image": self.image + } + result = dockletRequest.post("/image/share/", data) + if(result): + return configView.as_view() + else: + self.error() + +class unshareImageView(normalView): + template_path = "dashboard.html" + + @classmethod + def get(self): + data = { + "image": self.image + } + result = dockletRequest.post("/image/unshare/", data) + if(result): + return configView.as_view() + else: + self.error() + +class deleteImageView(normalView): + template_path = "dashboard.html" + + @classmethod + def get(self): + data = { + "image": self.image + } + result = dockletRequest.post("/image/delete/", data) + if(result): + return configView.as_view() + else: + self.error() + +class addproxyView(normalView): + + @classmethod + def post(self): + data = { + "clustername": self.clustername, + "ip": self.ip, + "port": self.port + } + result = dockletRequest.post("/addproxy/", data) + if(result): + return configView.as_view() + else: + self.error() + +class deleteproxyView(normalView): + + @classmethod + def get(self): + data = { + "clustername":self.clustername + } + result = dockletRequest.post("/deleteproxy/", data) + if(result): + return configView.as_view() + else: + self.error() + + @classmethod + def post(self): + return self.get() + +class configView(normalView): + @classmethod + def get(self): + images = dockletRequest.post('/image/list/').get('images') + clusters = dockletRequest.post("/cluster/list/").get("clusters") + clusters_info = {} + data={} + for cluster in clusters: + data["clustername"] = cluster + result = dockletRequest.post("/cluster/info/",data).get("message") + clusters_info[cluster] = result + return self.render("config.html", images = images, clusters = clusters_info, mysession=dict(session)) + + @classmethod + def post(self): + return self.get() diff --git a/web/webViews/cookie_tool.py b/web/webViews/cookie_tool.py new file mode 100755 index 0000000..83a3326 --- /dev/null +++ b/web/webViews/cookie_tool.py @@ -0,0 +1,52 @@ +#!/usr/bin/python3 + +import json, hashlib, base64, time +import sys +from webViews.log import logger + +# generate cookie : +# name = 'leebaok' +# | +# { "name":"leebaok", "login-time":time} Secure-Key +# | | +# | json.dumps | +# | | +# '{ "name":"leebaok", "login-time":time}' ______________| +# | | concat +# | encode('ascii') -> base64 | encode('ascii') -> md5().hexdigest() +# | str(*, encoding='utf-8') | +# | | +# < XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX >.< XXXXXXXXXXXXXXXXXXXX > +# + +def generate_cookie(name, securekey): + #print (">> generate cookie for %s" % name) + content = { 'name':name, 'login-time': time.asctime() } + text = json.dumps(content) + part1 = base64.b64encode(text.encode('ascii')) + part2 = hashlib.md5( (text+securekey).encode('ascii') ).hexdigest() + # part1 is binary(ascii) and part2 is str(utf-8) + cookie = str(part1, encoding='utf-8') +"."+ part2 + #print ("cookie : %s" % cookie) + return cookie + +def parse_cookie(cookie, securekey): + logger.info (">> parse cookie : %s" % cookie) + parts = cookie.split('.') + part1 = parts[0] + part2 = '' if len(parts) < 2 else parts[1] + try: + text = str(base64.b64decode(part1.encode('ascii')), encoding='utf-8') + except: + logger.info ("decode cookie failed") + return None + logger.info ("cookie content : %s" % text) + thatpart2 = hashlib.md5((text+securekey).encode('ascii')).hexdigest() + logger.info ("hash from part1 : %s" % thatpart2) + logger.info ("hash from part2 : %s" % part2) + if part2 == thatpart2: + result = json.loads(text)['name'] + else: + result = None + logger.info ("parse from cookie : %s" % result) + return result diff --git a/web/webViews/dashboard.py b/web/webViews/dashboard.py new file mode 100644 index 0000000..cf07cb5 --- /dev/null +++ b/web/webViews/dashboard.py @@ -0,0 +1,53 @@ +from flask import session,render_template +from webViews.view import normalView +from webViews.dockletrequest import dockletRequest + + +class dashboardView(normalView): + template_path = "dashboard.html" + + @classmethod + def get(self): + result = dockletRequest.post('/cluster/list/') + images = dockletRequest.post('/image/list/').get("images") + ok = result and result.get('clusters') + clusters = result.get("clusters") + if (result): + full_clusters = [] + data={} + for cluster in clusters: + data["clustername"] = cluster + single_cluster = {} + single_cluster['name'] = cluster + message = dockletRequest.post("/cluster/info/", data) + if(message): + message = message.get("message") + single_cluster['status'] = message['status'] + single_cluster['id'] = message['clusterid'] + full_clusters.append(single_cluster) + else: + self.error() + return self.render(self.template_path, ok = ok, clusters = full_clusters, images = images) + else: + self.error() + + @classmethod + def post(self): + return self.get() + +class dashboard_guestView(normalView): + template_path = "dashboard_guest.html" + + @classmethod + def get(self): + mysession = {} + mysession['avatar'] = "/static/avatar/default.png" + mysession['nickname'] = "guest" + mysession['description'] = "you are a guest" + mysession['status'] = "guest" + mysession['usergroup'] = "normal" + return render_template(self.template_path, mysession = mysession) + + @classmethod + def post(self): + return self.get() diff --git a/web/webViews/dockletrequest.py b/web/webViews/dockletrequest.py new file mode 100644 index 0000000..c6e1267 --- /dev/null +++ b/web/webViews/dockletrequest.py @@ -0,0 +1,32 @@ +import requests +import json +from flask import abort, session +from webViews.log import logger + + +endpoint = "http://0.0.0.0:9000" + +class dockletRequest(): + + @classmethod + def post(self, url = '/', data = {}): + #try: + data = dict(data) + data['token'] = session['token'] + logger.info ("Docklet Request: user = %s data = %s, url = %s"%(session['username'], data, url)) + + result = requests.post(endpoint + url, data = data).json() + if (result.get('success', None) == "false" and (result.get('reason', None) == "Unauthorized Action" or result.get('Unauthorized', None) == 'True')): + abort(401) + logger.info ("Docklet Response: user = %s result = %s, url = %s"%(session['username'], result, url)) + return result + #except: + #abort(500) + + @classmethod + def unauthorizedpost(self, url = '/', data = None): + data = dict(data) + logger.info("Docklet Unauthorized Request: data = %s, url = %s" % (data, url)) + result = requests.post(endpoint + url, data = data).json() + logger.info("Docklet Unauthorized Response: result = %s, url = %s"%(result, url)) + return result diff --git a/web/webViews/log.py b/web/webViews/log.py new file mode 100644 index 0000000..4459491 --- /dev/null +++ b/web/webViews/log.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python + +import logging +import logging.handlers +import argparse +import sys +import time # this is only being used as part of the example +import os + +import os, sys, inspect +this_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0])) +src_folder = os.path.realpath(os.path.abspath(os.path.join(this_folder,"../..", "src"))) +if src_folder not in sys.path: + sys.path.insert(0, src_folder) +import env + +# logger should only be imported after initlogging has been called +logger = None + +def initlogging(name='docklet'): + # Deafults + global logger + + homepath = env.getenv('FS_PREFIX') + LOG_FILENAME = homepath + '/local/log/' + name + '.log' + + LOG_LEVEL = env.getenv('WEB_LOG_LEVEL') + if LOG_LEVEL == "DEBUG": + LOG_LEVEL = logging.DEBUG + elif LOG_LEVEL == "INFO": + LOG_LEVEL = logging.INFO + elif LOG_LEVEL == "WARNING": + LOG_LEVEL = logging.WARNING + elif LOG_LEVEL == "ERROR": + LOG_LEVEL = logging.ERROR + elif LOG_LEVEL == "CRITICAL": + LOG_LEVEL = logging.CRITIAL + else: + LOG_LEVEL = logging.DEBUG + + logger = logging.getLogger(name) + # Configure logging to log to a file, making a new file at midnight and keeping the last 3 day's data + # Give the logger a unique name (good practice) + # Set the log level to LOG_LEVEL + logger.setLevel(LOG_LEVEL) + # Make a handler that writes to a file, making a new file at midnight and keeping 3 backups + handler = logging.handlers.TimedRotatingFileHandler(LOG_FILENAME, + when="midnight", backupCount=0) + # Format each log message like this + formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(module)s[%(lineno)d] %(message)s') + # Attach the formatter to the handler + handler.setFormatter(formatter) + # Attach the handler to the logger + logger.addHandler(handler) + + # Replace stdout with logging to file at INFO level + sys.stdout = RedirectLogger(logger, logging.INFO) + # Replace stderr with logging to file at ERROR level + sys.stderr = RedirectLogger(logger, logging.ERROR) + + # Make a class we can use to capture stdout and sterr in the log +class RedirectLogger(object): + def __init__(self, logger, level): + """Needs a logger and a logger level.""" + self.logger = logger + self.level = level + + def write(self, message): + # Only log if there is a message (not just a new line) + if message.rstrip() != "": + self.logger.log(self.level, message.rstrip()) + + def flush(self): + for handler in self.logger.handlers: + handler.flush() diff --git a/web/webViews/monitor.py b/web/webViews/monitor.py new file mode 100755 index 0000000..e25eb42 --- /dev/null +++ b/web/webViews/monitor.py @@ -0,0 +1,113 @@ +from flask import session +from webViews.view import normalView +from webViews.dockletrequest import dockletRequest + + +class statusView(normalView): + template_path = "monitor/status.html" + + @classmethod + def get(self): + data = { + "user": session['username'], + } + result = dockletRequest.post('/cluster/list/', data) + clusters = result.get('clusters') + if (result): + containers = {} + for cluster in clusters: + data["clustername"] = cluster + message = dockletRequest.post('/cluster/info/', data) + if (message): + message = message.get('message') + else: + self.error() + containers[cluster] = message + return self.render(self.template_path, clusters = clusters, containers = containers, user = session['username']) + else: + self.error() + +class statusRealtimeView(normalView): + template_path = "monitor/statusRealtime.html" + node_name = "" + + @classmethod + def get(self): + data = { + "user": session['username'], + } + result = dockletRequest.post('/monitor/vnodes/%s/basic_info'%(self.node_name), data) + basic_info = result.get('monitor').get('basic_info') + return self.render(self.template_path, node_name = self.node_name, user = session['username'], container = basic_info) + +class hostsRealtimeView(normalView): + template_path = "monitor/hostsRealtime.html" + com_ip = "" + + @classmethod + def get(self): + data = { + "user": session['username'], + } + result = dockletRequest.post('/monitor/hosts/%s/cpuconfig'%(self.com_ip), data) + proc = result.get('monitor').get('cpuconfig') + result = dockletRequest.post('/monitor/hosts/%s/osinfo'%(self.com_ip), data) + osinfo = result.get('monitor').get('osinfo') + result = dockletRequest.post('/monitor/hosts/%s/diskinfo'%(self.com_ip), data) + diskinfos = result.get('monitor').get('diskinfo') + + return self.render(self.template_path, com_ip = self.com_ip, user = session['username'],processors = proc, OSinfo = osinfo, diskinfos = diskinfos) + +class hostsConAllView(normalView): + template_path = "monitor/hostsConAll.html" + com_ip = "" + + @classmethod + def get(self): + data = { + "user": session['username'], + } + result = dockletRequest.post('/monitor/hosts/%s/containerslist'%(self.com_ip), data) + containers = result.get('monitor').get('containerslist') + containerslist = [] + for container in containers: + result = dockletRequest.post('/monitor/vnodes/%s/basic_info'%(container), data) + basic_info = result.get('monitor').get('basic_info') + containerslist.append(basic_info) + return self.render(self.template_path, containerslist = containerslist, com_ip = self.com_ip, user = session['username']) + +class hostsView(normalView): + template_path = "monitor/hosts.html" + + @classmethod + def get(self): + data = { + "user": session['username'], + } + result = dockletRequest.post('/monitor/listphynodes', data) + iplist = result.get('monitor').get('allnodes') + machines = [] + for ip in iplist: + containers = {} + result = dockletRequest.post('/monitor/hosts/%s/containers'%(ip), data) + containers = result.get('monitor').get('containers') + result = dockletRequest.post('/monitor/hosts/%s/status'%(ip), data) + status = result.get('monitor').get('status') + machines.append({'ip':ip,'containers':containers, 'status':status}) + #print(machines) + return self.render(self.template_path, machines = machines, user = session['username']) + +class monitorUserAllView(normalView): + template_path = "monitor/monitorUserAll.html" + + @classmethod + def get(self): + data = { + "user": session['username'], + } + result = dockletRequest.post('/monitor/listphynodes', data) + userslist = [{'name':'root'},{'name':'libao'}] + for user in userslist: + result = dockletRequest.post('/monitor/user/%s/clustercnt'%(user['name']), data) + user['clustercnt'] = result.get('monitor').get('clustercnt') + return self.render(self.template_path, userslist = userslist, user = session['username']) diff --git a/web/webViews/user/grouplist.py b/web/webViews/user/grouplist.py new file mode 100644 index 0000000..d096238 --- /dev/null +++ b/web/webViews/user/grouplist.py @@ -0,0 +1,23 @@ +from flask import redirect, request +from webViews.dockletrequest import dockletRequest +from webViews.view import normalView +import json + +class grouplistView(normalView): + template_path = "user/grouplist.html" + +class groupdetailView(normalView): + @classmethod + def post(self): + return json.dumps(dockletRequest.post('/user/groupList/')) + +class groupqueryView(normalView): + @classmethod + def post(self): + return json.dumps(dockletRequest.post('/user/groupQuery/', request.form)) + +class groupmodifyView(normalView): + @classmethod + def post(self): + result = json.dumps(dockletRequest.post('/user/groupModify/', request.form)) + return redirect('/admin/') diff --git a/web/webViews/user/userActivate.py b/web/webViews/user/userActivate.py new file mode 100644 index 0000000..c8fe2b1 --- /dev/null +++ b/web/webViews/user/userActivate.py @@ -0,0 +1,20 @@ +from flask import render_template, redirect, request +from webViews.dockletrequest import dockletRequest +from webViews.view import normalView + + +class userActivateView(normalView): + template_path = 'user/activate.html' + + @classmethod + def get(self): + userinfo = dockletRequest.post('/user/selfQuery/') + userinfo = userinfo["data"] + if (userinfo["description"] == ''): + userinfo["description"] = "Describe why you want to use Docklet" + return self.render(self.template_path, info = userinfo) + + @classmethod + def post(self): + dockletRequest.post('/register', request.form) + return redirect('/logout/') diff --git a/web/webViews/user/userinfo.py b/web/webViews/user/userinfo.py new file mode 100644 index 0000000..5f6b792 --- /dev/null +++ b/web/webViews/user/userinfo.py @@ -0,0 +1,18 @@ +from flask import redirect, request +from webViews.dockletrequest import dockletRequest +from webViews.view import normalView +import json + +class userinfoView(normalView): + template_path = "user/info.html" + + @classmethod + def get(self): + userinfo = dockletRequest.post('/user/selfQuery/') + userinfo = userinfo["data"] + return self.render(self.template_path, info = userinfo) + + @classmethod + def post(self): + result = json.dumps(dockletRequest.post('/user/selfModify/', request.form)) + return result diff --git a/web/webViews/user/userlist.py b/web/webViews/user/userlist.py new file mode 100644 index 0000000..c3cc62a --- /dev/null +++ b/web/webViews/user/userlist.py @@ -0,0 +1,56 @@ +from flask import render_template, redirect, request +from webViews.dockletrequest import dockletRequest +from webViews.view import normalView +import json + +class userlistView(normalView): + template_path = "user_list.html" + + @classmethod + def get(self): + groups = dockletRequest.post('/user/groupNameList/')["groups"] + return self.render(self.template_path, groups = groups) + + @classmethod + def post(self): + return json.dumps(dockletRequest.post('/user/data/')) + + +class useraddView(normalView): + @classmethod + def post(self): + dockletRequest.post('/user/add', request.form) + return redirect('/user/list/') + +class userdataView(normalView): + @classmethod + def get(self): + return json.dumps(dockletRequest.post('/user/data', request.form)) + + @classmethod + def post(self): + return json.dumps(dockletRequest.post('/user/data', request.form)) + +class userqueryView(normalView): + @classmethod + def get(self): + return json.dumps(dockletRequest.post('/user/query', request.form)) + + @classmethod + def post(self): + return json.dumps(dockletRequest.post('/user/query', request.form)) + +class usermodifyView(normalView): + @classmethod + def post(self): + try: + dockletRequest.post('/user/modify', request.form) + except: + return self.render('user/mailservererror.html') + return redirect('/user/list/') + +class groupaddView(normalView): + @classmethod + def post(self): + dockletRequest.post('/user/groupadd', request.form) + return redirect('/admin/') diff --git a/web/webViews/view.py b/web/webViews/view.py new file mode 100644 index 0000000..f1b4497 --- /dev/null +++ b/web/webViews/view.py @@ -0,0 +1,39 @@ +from flask import render_template, request, abort, session + +import os, inspect +this_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0])) + +version_file = open(this_folder + '/../../VERSION') +version = version_file.read() +version_file.close() + +class normalView(): + template_path = "dashboard.html" + + @classmethod + def get(self): + return self.render(self.template_path) + + @classmethod + def post(self): + return self.render(self.template_path) + + @classmethod + def error(self): + abort(404) + + @classmethod + def as_view(self): + if request.method == 'GET': + return self.get() + elif request.method == 'POST': + return self.post() + else: + return self.error() + + @classmethod + def render(self, *args, **kwargs): + self.mysession = dict(session) + kwargs['mysession'] = self.mysession + kwargs['version'] = version + return render_template(*args, **kwargs)

%t%o_@M$3TPm(B^HYKdMnyDjw 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 Xz_U^X>6X+d00000NkvXXu0mjfm;62h literal 0 HcmV?d00001 diff --git a/web/static/img/web.png b/web/static/img/web.png new file mode 100644 index 0000000000000000000000000000000000000000..2a47a3a384260cbd3a1ebf1e83655adc569454b8 GIT binary patch literal 27561 zcmZ5{WmsEFv^ErXDK5bsij?BP9f}k$?p{i9m*BKG1&W8ZxEFUQUfeZkafcuQ^5vX! z@BQ)pNSy)goJ#9_*r41BmOhF-2)K?$R6*M zWRa@IX$}w%sP-~%Wss0+6LB6b(GbsAAC-+fkdVk&kdVlUkgr-h_>hpCB~|2QbbZZE zaxpS(6z00%**?SEYU7m57_lj+qzcmEHrj-e@{c46yC^-R{Nao;3JQd1D9$ff*hN7# zDK^8|DAaa7Y`31bf5zd!riouO;%mTM*!n31Cb3uA>Q#QIFXr{30tS~)H>|blZ+^C< zAD2&Dr_d@UDlM~}URcPGC+^Hb{=(OjszlD|p1Q!+4f5EUdf||n1)u?@4DZmj1Ljky z{m*L%gLFCdLPFf!+}bddFh+8#kUpPpfX{zDUHAsF5n%JCd5{2aaQhlq^o|P#C!lKz za?5kTY|FVHAGC%-{3xS0v{eV{Yu6!bpk7c0PpD#M?CTL9J=9AH=JWtQWN3?U=-8`7 z{eX5{WPmQ|Bcb0#NkdrHqlnapIfCP8%1=32uk90VO_2d6L65!z6a;0|X81ZF7_g-E z?!rlY^>U-X^sV2cVOb!>`POXX<^GZ^K^d1>&azh&U3FJ|y$1?G8IBol8~*-9!C~J8 zRFzhU0y!So{PS)TMWV#}BYI;3U0ao}`ymQ2u8W!hm!T;S4I2^`B!6>GC(tLw_k;fT&u<;g7ZwLUjRaXrXW%ec2h~g zx{S#p6T(F(xld66qfzMXYaN@#RH>w2?&AXb)ZTDPW;*Se3*b(Oo>pS2`h?ycv^3{1DjU!3g_-OTK{LWR)Cb_U7piVjJ3 z8jccVoXv2HAzIn)H5JHyuy+L4q;r`HA^cZgxqJ|8iYjyVT=@ zbmpYHxw-<^RvQ}|gFr~p&E-sI?(nZN1v-@@I-Bx@S})KH03jdqtBQ-+l=+fse*B1J z=L*Lm3m+K&_U5Qg7!v3~KmN(%i<90u6qN2!=lAjI@ZN&EGaz~^3;*CA3Wd@qxA29_ zLOt-;rgw9kpB>VImdv zDEHjuY1fh%CagQ%E-22LY%TWo^vp?l+uGKq$xzv0^_6ToCy%EJ3#J|(_{7&IyPA_; zjcRoDb9&`%z9g`k+pOJJoVD>pnJ(r>&$aCraYODrIy*yjPV={qT2q6Zau^lc*PZv1O@0FGtzEn!MNpI&Dk;I3{htrAQA_esOS9AlPRbr-)vyiA35l462u9 z%01Oakr4UjOZ!5igkC}=6hi@rHy{*)G}1IX;L<@5sqcX%>QsXHX{+{(6KkTEwRcp4 zJTa85kId&7{=u7##WT#T^Pm>1{XgqOb0i&{GFb;NbF)MqN{>d z86v29`gcX!!hX76pee2iKP^)%C;UG+N od>(cfIPqAA2M6~t>Cqac&yMc)_Isk< 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 UYRMAd^IBK5)%DfNRiB6bFTDnBQ2+n{ literal 0 HcmV?d00001 diff --git a/web/static/img/workspace.png b/web/static/img/workspace.png new file mode 100644 index 0000000000000000000000000000000000000000..092caa831ed0310d3ba991cae5a6803241ca2e7f GIT binary patch literal 81627 zcmafbWmFqo)GqE?9E!WUYiMzIcPJEx;_gm?qNNamd!R^*yF+mZTD&-f;C^|(@2>mz z{>ZGEH7hfdJ$s+?$UceJR9C>pAjg1%gTq!*{HP5Fhd=@c2XBpr^0wt$9^-vG0slo? zK^6`?`Tp?j0LdPp27rV6nS%Lbh5UAm?yhL`1rCk`|Gy9X7}KRR9NcTE(no-$x*6+Wl7xRCeOyU>A$hq7QNO-5KIn0|VYCSa1 z;8OS_=Bu#x?P*uzN~Jqt?u7p-QiM7N_~Oo0v0ZSkUtF-yewc zdYj&^AXSGAJaUkWkI#)pSvZ}~@afU050=+a@E<`6A?Le7)aOtuN|>a>a8H@qkF&aj zM>|=wrJyhr5e+*?Z@R7wklFv6*p=Hluuv0k!mX(O{udTO39g@KB`KcS#Jg(2JbLSS>yQ9AM?S5By;4r^krwZ>MXin04)pni`dF@n20R>v#EdE9LP+5Ip2p5yJd3A zyiod*&g9;+(M)B`0?fmze`95&65@p&e&S;;L~k=<9@=)@>y4J6nkU*lRUymh{F@^- zax2k64?S00E6tzAkw`>&9rjBNZ*uEjNAP9m>Rv@Z?P(%HI3ZVLg=hE?(L)N)e!N1>8saTqnk#wOmo z94b3K&!SAcr*egYc;+h57!M620GWKgg z!sY5ImdCJ-=UPM4$dySg`vVR;-vV}EXcYS|RXTyKl3LQil1lJETMi5d1R_5wSP=fJ z8DX#)?it2VKWf@O)>`bSZw~4$uHLt#OXC@0PUEJfvL2Dj{B@jjRk8_EH;47bP+_~K z0|eEwI&r<{G76-ASj{*j*#P3nlm5J$?m!}1?vkjwW*(A%^K$ptR`>F&@qlUfe$y@x zDd;qc(*l|z(#IHi%5b3;qiBMcGQg0o0CuWZ4~ zaN