commit 4e4210e87ab572c22dd415ef5b0ae51609f324e8 Author: Dmitriy Shesterkin Date: Wed Sep 20 13:02:53 2017 +0300 move app to client diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3b3a030 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +*.*~ +*.pyc +.DS_Store +._* +pip-log.txt +ENV/ +.idea/ +local_settings.py +Thumbs.db +distribute-*.tar.gz +*.bak + +public_html/* +log/* + +djapian_spaces/* +*.swp +*.swa +*.swo diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..63deb43 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,102 @@ +FROM python:2 +ENV PYTHONUNBUFFERED 1 + +ENV NGINX_VERSION="1.12.0" \ + NGINX_OPTS="--with-http_ssl_module \ + --with-http_gzip_static_module \ + --prefix=/usr/share/nginx \ + --sbin-path=/usr/sbin/nginx \ + --conf-path=/etc/nginx/nginx.conf \ + --pid-path=/var/run/nginx.pid \ + --http-log-path=/var/log/nginx/access.log \ + --error-log-path=/var/log/nginx/error.log \ + --user=www-data \ + --group=www-data \ + --add-module=/tmp/modules/nginx_requestid-master" + +ENV XAPIAN_VERSION="1.2.21" + +COPY requirements.txt /opt/app/requirements.txt + +RUN apt-get update -y && \ + apt-get upgrade -y && \ + apt-get install -y --no-install-recommends apt-utils \ + libxml2 \ + xz-utils \ + uuid-dev \ + python-xapian \ + memcached \ + supervisor \ + cron \ + php5 \ + php5-fpm \ + make && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + + pip install --upgrade pip && \ + pip install --no-cache-dir --no-deps -r /opt/app/requirements.txt && \ + + # Download additional nginx modules + mkdir -p /tmp/modules && \ + cd /tmp/modules && \ + wget -O nginx-requestid.tar.gz https://github.com/hhru/nginx_requestid/archive/master.tar.gz && \ + tar xvzf nginx-requestid.tar.gz && \ + # Download and compile nginx + cd /tmp && \ + curl -fSL http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz -o nginx-${NGINX_VERSION}.tar.gz && \ + tar xzvf nginx-${NGINX_VERSION}.tar.gz && \ + cd nginx-${NGINX_VERSION} && \ + ./configure ${NGINX_OPTS} && \ + make && \ + make install && \ + + # Delete build dependencies after use + cd /tmp \ + + && rm -rf \ + modules \ + nginx-${NGINX_VERSION} \ + nginx-${NGINX_VERSION}.tar.gz \ + /var/cache/apt/* \ + /root/.cache \ + + # Patch Djapian + && rm /usr/local/lib/python2.7/site-packages/djapian/resultset.py + +COPY conf/djapian-patch/resultset.py /usr/local/lib/python2.7/site-packages/djapian/resultset.py + +# Install xapian from source +RUN cd /tmp && \ + curl -O https://oligarchy.co.uk/xapian/${XAPIAN_VERSION}/xapian-core-${XAPIAN_VERSION}.tar.xz && \ + tar -xvf xapian-core-${XAPIAN_VERSION}.tar.xz && \ + cd xapian-core-${XAPIAN_VERSION} && \ + ./configure && \ + make && \ + make install && \ + cd /tmp && \ + curl -O https://oligarchy.co.uk/xapian/${XAPIAN_VERSION}/xapian-bindings-${XAPIAN_VERSION}.tar.xz && \ + tar -xvf xapian-bindings-${XAPIAN_VERSION}.tar.xz && \ + cd xapian-bindings-${XAPIAN_VERSION} && \ + ./configure --with-python && \ + make && \ + make install && \ + rm -rf xapian-* + +ADD . /opt/app +VOLUME ["/opt/app/public_html"] +WORKDIR /opt/app + +# Nginx config +RUN rm -v /etc/nginx/nginx.conf +ADD /conf/nginx.conf /etc/nginx/ + +# Add crontab file in the cron directory +ADD /conf/crontab /etc/cron.d/penfond-cron + +# Give execution rights on the cron job +RUN chmod 0644 /etc/cron.d/penfond-cron + +EXPOSE 80 + +CMD ["conf/docker/entrypoint_prod.sh"] \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..1c73db3 --- /dev/null +++ b/README @@ -0,0 +1 @@ +Пенсионный фонд diff --git a/conf/crontab b/conf/crontab new file mode 100644 index 0000000..bd7f410 --- /dev/null +++ b/conf/crontab @@ -0,0 +1,4 @@ +*/24 * * * * root python manage.py index # доиндексация +34 */3 * * * root python manage.py index --rebuild # переиндексация +*/15 * * * * root python manage.py clear_path_teasers # удаление старых тизеров +# An empty line is required at the end of this file for a valid cron file. \ No newline at end of file diff --git a/conf/djapian-patch/resultset.py b/conf/djapian-patch/resultset.py new file mode 100644 index 0000000..92e5c7b --- /dev/null +++ b/conf/djapian-patch/resultset.py @@ -0,0 +1,259 @@ +import xapian +import operator +from copy import deepcopy + +from django.db.models import get_model +from django.utils.encoding import force_unicode + +from djapian import utils, decider + +class ResultSet(object): + def __init__(self, indexer, query_str, offset=0, limit=utils.DEFAULT_MAX_RESULTS, + order_by=None, prefetch=False, flags=None, stemming_lang=None, + filter=None, exclude=None, prefetch_select_related=False): + self._indexer = indexer + self._query_str = query_str + self._offset = offset + self._limit = limit + self._order_by = order_by + self._prefetch = prefetch + self._prefetch_select_related = prefetch_select_related + self._filter = filter or decider.X() + self._exclude = exclude or decider.X() + + if flags is None: + flags = xapian.QueryParser.FLAG_PHRASE\ + | xapian.QueryParser.FLAG_BOOLEAN\ + | xapian.QueryParser.FLAG_LOVEHATE + self._flags = flags + self._stemming_lang = stemming_lang + + self._resultset_cache = None + self._mset = None + self._query = None + self._query_parser = None + + # Public methods that produce another ResultSet + + def all(self): + return self._clone() + + def spell_correction(self): + return self._clone( + flags=self._flags | xapian.QueryParser.FLAG_SPELLING_CORRECTION\ + | xapian.QueryParser.FLAG_WILDCARD + ) + + def prefetch(self, select_related=False): + return self._clone( + prefetch=True, + prefetch_select_related=select_related + ) + + def order_by(self, field): + return self._clone(order_by=field) + + def flags(self, flags): + return self._clone(flags=flags) + + def stemming(self, lang): + return self._clone(stemming_lang=lang) + + def count(self): + return self._clone()._do_count() + + def get_corrected_query_string(self): + self._get_mset() + return self._query_parser.get_corrected_query_string() + + def filter(self, *fields, **raw_fields): + clone = self._clone() + clone._add_filter_fields(fields, raw_fields) + return clone + + def exclude(self, *fields, **raw_fields): + clone = self._clone() + clone._add_exclude_fields(fields, raw_fields) + return clone + + # Private methods + + def _prepare_fields(self, fields=None, raw_fields=None): + fields = fields and reduce(operator.and_, fields) or decider.X() + + if raw_fields: + fields = fields & reduce( + operator.and_, + map( + lambda value: decider.X(**{value[0]: value[1]}), + raw_fields.iteritems() + ) + ) + self._check_fields(fields) + return fields + + def _add_filter_fields(self, fields=None, raw_fields=None): + self._filter &= self._prepare_fields(fields, raw_fields) + + def _add_exclude_fields(self, fields=None, raw_fields=None): + self._exclude &= self._prepare_fields(fields, raw_fields) + + def _check_fields(self, fields): + known_fields = set([f.prefix for f in self._indexer.tags]) + + for field in fields.children: + if isinstance(field, decider.X): + self._check_fields(field) + else: + if field[0].split('__', 1)[0] not in known_fields: + raise ValueError("Unknown field '%s'" % field[0]) + + def _clone(self, **kwargs): + data = { + "indexer": self._indexer, + "query_str": self._query_str, + "offset": self._offset, + "limit": self._limit, + "order_by": self._order_by, + "prefetch": self._prefetch, + "prefetch_select_related": self._prefetch_select_related, + "flags": self._flags, + "stemming_lang": self._stemming_lang, + "filter": deepcopy(self._filter), + "exclude": deepcopy(self._exclude), + } + data.update(kwargs) + + return ResultSet(**data) + + def _do_count(self): + self._get_mset() + + return self._mset.size() + + def _do_prefetch(self): + model_map = {} + + for hit in self._resultset_cache: + model_map.setdefault(hit.model, []).append(hit) + + for model, hits in model_map.iteritems(): + pks = [hit.pk for hit in hits] + + instances = model._default_manager.all() + + if self._prefetch_select_related: + instances = instances.select_related() + + instances = instances.in_bulk(pks) + + for hit in hits: + hit.instance = instances[hit.pk] + + def _get_mset(self): + if self._mset is None: + self._mset, self._query, self._query_parser = self._indexer._do_search( + self._query_str, + self._offset, + self._limit, + self._order_by, + self._flags, + self._stemming_lang, + self._filter, + self._exclude, + ) + + def _fetch_results(self): + if self._resultset_cache is None: + self._get_mset() + self._parse_results() + + return self._resultset_cache + + def _parse_results(self): + self._resultset_cache = [] + + for match in self._mset: + doc = match.document + + model = doc.get_value(2) + model = get_model(*model.split('.')) + pk = model._meta.pk.to_python(doc.get_value(1)) + + percent = match.percent + rank = match.rank + weight = match.weight + + tags = dict([(tag.prefix, tag.extract(doc))\ + for tag in self._indexer.tags]) + + self._resultset_cache.append( + Hit(pk, model, percent, rank, weight, tags) + ) + + if self._prefetch: + self._do_prefetch() + + def __iter__(self): + self._fetch_results() + return iter(self._resultset_cache) + + def __len__(self): + self._fetch_results() + return len(self._resultset_cache) + + def __getitem__(self, k): + if not isinstance(k, (slice, int, long)): + raise TypeError + assert ((not isinstance(k, slice) and (k >= 0)) + or (isinstance(k, slice) and (k.start is None or k.start >= 0) + and (k.stop is None or k.stop >= 0))), \ + "Negative indexing is not supported." + + if self._resultset_cache is not None: + return self._fetch_results()[k] + else: + if isinstance(k, slice): + start, stop = k.start, k.stop + if start is None: + start = 0 + if stop is None: + kstop = utils.DEFAULT_MAX_RESULTS + + return self._clone( + offset=start, + limit=stop - start + ) + else: + return list(self._clone( + offset=k, + limit=1 + ))[k] + + def __unicode__(self): + return u"" % force_unicode(self._query_str) + +class Hit(object): + def __init__(self, pk, model, percent, rank, weight, tags): + self.pk = pk + self.model = model + self.percent = percent + self.rank = rank + self.weight = weight + self.tags = tags + self._instance = None + + def get_instance(self): + if self._instance is None: + self._instance = self.model._default_manager.get(pk=self.pk) + return self._instance + + def set_instance(self, instance): + self._instance = instance + + instance = property(get_instance, set_instance) + + def __repr__(self): + return "" % ( + utils.model_name(self.model), self.pk, self.percent, self.rank, self.weight + ) diff --git a/conf/docker/entrypoint_prod.sh b/conf/docker/entrypoint_prod.sh new file mode 100755 index 0000000..23663b0 --- /dev/null +++ b/conf/docker/entrypoint_prod.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -e +set -u + +export ENV=prod + +# Apply database migrations +echo "Apply database migrations" +python manage.py syncdb --noinput +python manage.py migrate --noinput +python manage.py collectstatic --noinput + +supervisord -c /opt/app/conf/supervisor.conf + diff --git a/conf/gunicorn_logging.ini b/conf/gunicorn_logging.ini new file mode 100644 index 0000000..4b1c526 --- /dev/null +++ b/conf/gunicorn_logging.ini @@ -0,0 +1,44 @@ +[loggers] +keys=root,gunicorn.access,gunicorn.error + +[logger_root] +level=INFO +handlers=root + +[logger_gunicorn.access] +level=INFO +handlers=gunicorn.access +qualname=gunicorn.access +propagate=0 + +[logger_gunicorn.error] +level=INFO +handlers=gunicorn.error +qualname=gunicorn.error +propagate=0 + +[handlers] +keys=root,gunicorn.access,gunicorn.error + +[handler_root] +class=logging.StreamHandler +formatter=default +args=(sys.stdout,) + +[handler_gunicorn.access] +class=logging.StreamHandler +formatter=default +args=(sys.stdout,) + +[handler_gunicorn.error] +class=logging.StreamHandler +formatter=default +args=(sys.stdout,) + +[formatters] +keys=default + +[formatter_default] +class=logging.Formatter +format=* %(asctime)s [%(levelname)s] {%(filename)s} - %(message)s +datefmt=%x %X diff --git a/conf/gunicorn_prod.py b/conf/gunicorn_prod.py new file mode 100644 index 0000000..1668c5c --- /dev/null +++ b/conf/gunicorn_prod.py @@ -0,0 +1,67 @@ +# Settings http://docs.gunicorn.org/en/stable/settings.html +import os + +bind = 'unix:/tmp/gunicorn.sock' +backlog = 2048 # The number of pending connections +preload = True # Load application code before the worker processes are forked + +workers = 2 +worker_class = 'sync' +worker_connections = 1000 +threads = 1 +timeout = 120 +keepalive = 2 + +reload = False +spew = False +check_config = False + +daemon = False +pidfile = None +umask = 0 +user = None +group = None +tmp_upload_dir = None +proc_name = None + +# Logging +# ------- +logconfig = '/opt/app/conf/gunicorn_logging.ini' + + +def post_fork(server, worker): + server.log.info("Worker spawned (pid: %s)", worker.pid) + + +def pre_fork(server, worker): + pass + + +def pre_exec(server): + server.log.info("Forked child, re-executing.") + + +def when_ready(server): + server.log.info("Server is ready. Spawning workers") + + +def worker_int(worker): + worker.log.info("Worker received INT or QUIT signal") + + ## get traceback info + import threading, sys, traceback + id2name = dict([(th.ident, th.name) for th in threading.enumerate()]) + code = [] + for threadId, stack in sys._current_frames().items(): + code.append("\n# Thread: %s(%d)" % (id2name.get(threadId,""), + threadId)) + for filename, lineno, name, line in traceback.extract_stack(stack): + code.append('File: "%s", line %d, in %s' % (filename, + lineno, name)) + if line: + code.append(" %s" % (line.strip())) + worker.log.debug("\n".join(code)) + + +def worker_abort(worker): + worker.log.info("Worker received SIGABRT signal") diff --git a/conf/nginx.conf b/conf/nginx.conf new file mode 100644 index 0000000..ab3586c --- /dev/null +++ b/conf/nginx.conf @@ -0,0 +1,278 @@ +worker_processes 1; + +user www-data; +pid /var/run/nginx.pid; +error_log /var/log/nginx/error.log; + +events { + worker_connections 1024; + accept_mutex off; + use epoll; +} + +http { + sendfile on; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + keepalive_timeout 65; + + upstream django { + server unix:/tmp/gunicorn.sock fail_timeout=0; + } + + server { + listen 80; + server_name _; + charset utf-8; + keepalive_timeout 5; + client_max_body_size 64M; + access_log /var/log/nginx/access.log; + + location / { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + # we don't want nginx trying to do something clever with + # redirects, we set the Host: header above already. + proxy_redirect off; + proxy_connect_timeout 600; + proxy_send_timeout 600; + proxy_read_timeout 600; + send_timeout 600; + proxy_http_version 1.1; + proxy_pass http://django; + proxy_pass_header Server; + } + + location /_1504785325778.php { + root /opt/app/public_html/leadia_proxy; + include /etc/nginx/fastcgi_params; + fastcgi_pass unix:/run/php5-fpm.sock; + fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; + break; + } + + location = /robots.txt { + alias /opt/app/public_html/static/robots.txt; + } + + location = /favicon.ico { + alias /opt/app/public_html/static/favicon.ico; + } + + location /download/ { + rewrite ^/download/(.*)$ /$1 break; + root /opt/app/public_html/media/cms_page_media; + } + + location /m/ { + rewrite ^/m/(.*)$ /$1 break; + root /opt/app/public_html/media; + } + + location /s/ { + rewrite ^/s/(.*)$ /$1 break; + root /opt/app/public_html/static; + } + + # 301 redirect urls + + location /raschyot-pensij-s-2015-goda/ { + rewrite ^ https://$server_name/rasschet-pensij/s-2015-goda/? permanent; + } + + location /spravochnaya-informaciya/monetizaciya-lgot-v-rossii/ { + rewrite ^ https://$server_name/lgoty/monetizaciya-lgot/? permanent; + } + + location /poleznaya-informaciya/severnoe-nadbavki/ { + rewrite ^ https://$server_name/poleznaya-informaciya/severnye-nadbavki/? permanent; + } + + location /pensii/indeksaciya-i-uvelichenie-pensij-v-2014-godu/ { + rewrite ^ https://$server_name/rasschet-pensij/indeksaciya-i-uvelichenie-pensij-v-2014-godu/? permanent; + } + + location /pensii/pereraschyot-pensij-rabotayushim-pensioneram/ { + rewrite ^ https://$server_name/rasschet-pensij/pereraschyot-pensij-rabotayushim-pensioneram/? permanent; + } + + location /rasschet-pensij/osobennosti-pensionnogo-obespecheniya-rabotayushih-grazhdan/ { + rewrite ^ https://$server_name/rasschet-pensij/rabotayushim-pensioneram/? permanent; + } + + location /rasschet-pensij/kakie-vidy-deyatelnosti-zaschityvayutsya-v-strahovoj-trudovoj-st/ { + rewrite ^ https://$server_name/rasschet-pensij/strahovoj-trudovoj-stazh/? permanent; + } + + location /materinskij-kapital/priobretenie-zhilya/ { + rewrite ^ https://$server_name/materinskij-kapital/pokupka-zhilya/? permanent; + } + + location /materinskij-kapital/na-formirovanie-pensii/ { + rewrite ^ https://$server_name/materinskij-kapital/na-pensiu/? permanent; + } + + location /lgoty/socialnye-programmy-v-rossijskoj-federacii/ { + rewrite ^ https://$server_name/lgoty/socialnye-programmy/? permanent; + } + + location /lgoty/vyplaty-po-uhodu-za-netrudosposobnymi-grazhdanami/ { + rewrite ^ https://$server_name/lgoty/netrudosposobnym-grazhdanam/? permanent; + } + + location /poleznaya-informaciya/strahovoe-svidetelstvo-obyazatelnogo-pensionnogo-strahovaniya/ { + rewrite ^ https://$server_name/poleznaya-informaciya/snils-i-pensionnoe-svidetelstvo/? permanent; + } + + location /poleznaya-informaciya/vygodnye-vklady-dlya-pensionerov-v-rossijskih-banka/ { + rewrite ^ https://$server_name/poleznaya-informaciya/vklady-dlya-pensionerov/? permanent; + } + + location /poleznaya-informaciya/personificirovannyj-uchet-grazhdan-v-pfr/ { + rewrite ^ https://$server_name/poleznaya-informaciya/personificirovannyj-uchet-v-pfr/? permanent; + } + + location /rasschet-pensij/ { + rewrite ^ https://$server_name/raschet-pensij/? permanent; + } + + location /materinskij-kapital/zajmy-i-kredity-pod-materinskij-kapital/ { + rewrite ^ https://$server_name/materinskij-kapital/zajmy-i-kredity/? permanent; + } + + location /raschet-pensij/indeksaciya-i-uvelichenie-pensij-v-2014-godu/ { + rewrite ^ https://$server_name/poleznaya-informaciya/indeksaciya-i-uvelichenie-pensij-v-2014-godu/? permanent; + } + + location /raschet-pensij/s-2015-goda/ { + rewrite ^ https://$server_name/raschet-pensij/? permanent; + } + + location /otdeleniya-pensionnogo-fonda/ { + rewrite ^ https://$server_name/otdeleniya/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/ { + rewrite ^ https://$server_name/npf/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-blagosostoyanie/ { + rewrite ^ https://$server_name/npf/blagosostoyanie/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-gazfond/ { + rewrite ^ https://$server_name/npf/gazfond/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-elektroenergetiki/ { + rewrite ^ https://$server_name/npf/elektroenergetiki/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-lukojl-garant/ { + rewrite ^ https://$server_name/npf/lukojl-garant/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-promagrofond/ { + rewrite ^ https://$server_name/npf/promagrofond/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/npf-neftegarant/ { + rewrite ^ https://$server_name/npf/neftegarant/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-sberbanka/ { + rewrite ^ https://$server_name/npf/sberbank/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-almaznaya-osen/ { + rewrite ^ https://$server_name/npf/almaznaya-osen/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-telekom-soyuz/ { + rewrite ^ https://$server_name/npf/telekom-soyuz/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/npf-evropejskij-pensionnyj-fond/ { + rewrite ^ https://$server_name/npf/evropejskij/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-stalfond/ { + rewrite ^ https://$server_name/npf/stalfond/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-vtb/ { + rewrite ^ https://$server_name/npf/vtb/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-kit-finans/ { + rewrite ^ https://$server_name/npf/kit-finans/? permanent; + } + + location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-metallurgov/ { + rewrite ^ https://$server_name/npf/metallurgov/? permanent; + } + + location /materinskij-kapital/kak-obnalichit/ { + rewrite ^ https://$server_name/materinskij-kapital/? permanent; + } + + location /poleznaya-informaciya/snils-i-pensionnoe-svidetelstvo/ { + rewrite ^ https://$server_name/poleznaya-informaciya/snils/? permanent; + } + + location /raschet-pensij/strahovoj-trudovoj-stazh/ { + rewrite ^ https://$server_name/raschet-pensij/strahovoj-stazh/? permanent; + } + + location /poleznaya-informaciya/ustanovlenie-pfv/ { + rewrite ^ https://$server_name/raschet-pensij/fiksirovannaya-vyplata/? permanent; + } + + location /poleznaya-informaciya/pereezd-pensionerov-severa/ { + rewrite ^ https://$server_name/lgoty/pereezd-pensionerov-severa/? permanent; + } + + location /otdeleniya/moskovskaya-oblast/schyolkovo/ { + rewrite ^ https://$server_name/otdeleniya/moskovskaya-oblast/schelkovo/? permanent; + } + + location /otdeleniya/altajskij-kraj/krasnoschekovo/ { + rewrite ^ https://$server_name/otdeleniya/altajskij-kraj/krasnoschyokovo/? permanent; + } + + location /otdeleniya/zabajkalskij-kraj/nova-chara/ { + rewrite ^ https://$server_name/otdeleniya/zabajkalskij-kraj/novaya-chara/? permanent; + } + + location /otdeleniya/omskaya-oblast/znamenka/ { + rewrite ^ https://$server_name/otdeleniya/omskaya-oblast/znamenskoe/? permanent; + } + + location /otdeleniya/omskaya-oblast/lyubino/ { + rewrite ^ https://$server_name/otdeleniya/omskaya-oblast/lyubinskij/? permanent; + } + + # redirect whole subpath to single url + + location ~ ^/otdeleniya/evrejskaya-ao/(.*) { + rewrite ^/otdeleniya/evrejskaya-ao/(.*) https://$server_name/otdeleniya/evrejskaya-avtonomnaya-oblast/? permanent; + } + + location ~ ^/otdeleniya/chukotskij-ao/(.*) { + rewrite ^/otdeleniya/chukotskij-ao/(.*) https://$server_name/otdeleniya/chukotskij-avtonomnyj-okrug/? permanent; + } + + location ~ ^/otdeleniya/kabardino-balkariya/(.*) { + rewrite ^/otdeleniya/kabardino-balkariya/(.*) https://$server_name/otdeleniya/kabardino-balkarskaya-respublika/? permanent; + } + + location ~ ^/otdeleniya/yamalo-neneckij-ao/(.*) { + rewrite ^/otdeleniya/yamalo-neneckij-ao/(.*) https://$server_name/otdeleniya/yamalo-neneckij-avtonomnyj-okrug/? permanent; + } + + } +} diff --git a/conf/nginx_vds.conf b/conf/nginx_vds.conf new file mode 100644 index 0000000..34b198c --- /dev/null +++ b/conf/nginx_vds.conf @@ -0,0 +1,20 @@ +upstream pensfond { + server localhost:32770; +} + +server { + client_max_body_size 175M; + listen 0.0.0.0:80; + server_name p-fond.ru www.p-fond.ru; + + location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-NginX-Proxy true; + + proxy_pass http://pensfond/; + proxy_redirect off; + } + +} diff --git a/conf/nginx_vds_ssl.conf b/conf/nginx_vds_ssl.conf new file mode 100644 index 0000000..3d96401 --- /dev/null +++ b/conf/nginx_vds_ssl.conf @@ -0,0 +1,29 @@ +upstream pensfond { + server localhost:32770; +} + +server { + listen 80; + server_name p-fond.ru www.p-fond.ru; + return 301 https://$sqerver_name$request_uri; +} + +server { + client_max_body_size 175M; + listen 0.0.0.0:443 ssl; + server_name p-fond.ru www.p-fond.ru; + + ssl_certificate /opt/apps/pensfond/conf/ssl-keys/pensfond.org.crt; + ssl_certificate_key /opt/apps/pensfond/conf/ssl-keys/pensfond.org.key; + add_header Strict-Transport-Security 'max-age=604800'; + + location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-NginX-Proxy true; + + proxy_pass http://mirmebeli/; + proxy_redirect off; + } +} \ No newline at end of file diff --git a/conf/supervisor.conf b/conf/supervisor.conf new file mode 100644 index 0000000..11ed540 --- /dev/null +++ b/conf/supervisor.conf @@ -0,0 +1,40 @@ +[supervisord] +logfile=/var/log/supervisord.log +loglevel=debug +directory=/opt/app +pidfile=/tmp/supervisord.pid +nodaemon=true +minfds=65535 +minprocs=200 +environment=PATH="/opt/app" +user=root + +[program:nginx] +command=/usr/sbin/nginx "-g" "daemon off;" +priority=1 +autorestart=true +stdout_events_enabled=true +stderr_events_enabled=true + +[program:gunicorn] +command=gunicorn project.wsgi:application -c /opt/app/conf/gunicorn_prod.py +directory=/opt/app +priority=2 +stdout_logfile=/var/log/gunicorn.log +redirect_stderr=true +stdout_events_enabled=true +stderr_events_enabled=true +autorestart=true + +[program:cron] +directory = /etc/cron.d/ +command = /usr/sbin/cron -f +autorestart = true + +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +redirect_stderr=true + +; RQ requires the TERM signal to perform a warm shutdown. If RQ does not die +; within 10 seconds, supervisor will forcefully kill it +stopsignal=TERM diff --git a/data/PG_VERSION b/data/PG_VERSION new file mode 100644 index 0000000..c026ac8 --- /dev/null +++ b/data/PG_VERSION @@ -0,0 +1 @@ +9.6 diff --git a/data/base/1/112 b/data/base/1/112 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/112 differ diff --git a/data/base/1/113 b/data/base/1/113 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/113 differ diff --git a/data/base/1/12242 b/data/base/1/12242 new file mode 100644 index 0000000..e3202ef Binary files /dev/null and b/data/base/1/12242 differ diff --git a/data/base/1/12242_fsm b/data/base/1/12242_fsm new file mode 100644 index 0000000..7658735 Binary files /dev/null and b/data/base/1/12242_fsm differ diff --git a/data/base/1/12242_vm b/data/base/1/12242_vm new file mode 100644 index 0000000..1931c13 Binary files /dev/null and b/data/base/1/12242_vm differ diff --git a/data/base/1/12244 b/data/base/1/12244 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/12246 b/data/base/1/12246 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/12246 differ diff --git a/data/base/1/12247 b/data/base/1/12247 new file mode 100644 index 0000000..a2db1a1 Binary files /dev/null and b/data/base/1/12247 differ diff --git a/data/base/1/12247_fsm b/data/base/1/12247_fsm new file mode 100644 index 0000000..ce7c26e Binary files /dev/null and b/data/base/1/12247_fsm differ diff --git a/data/base/1/12247_vm b/data/base/1/12247_vm new file mode 100644 index 0000000..bb406d1 Binary files /dev/null and b/data/base/1/12247_vm differ diff --git a/data/base/1/12249 b/data/base/1/12249 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/12251 b/data/base/1/12251 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/12251 differ diff --git a/data/base/1/12252 b/data/base/1/12252 new file mode 100644 index 0000000..46a5d07 Binary files /dev/null and b/data/base/1/12252 differ diff --git a/data/base/1/12252_fsm b/data/base/1/12252_fsm new file mode 100644 index 0000000..98dc620 Binary files /dev/null and b/data/base/1/12252_fsm differ diff --git a/data/base/1/12252_vm b/data/base/1/12252_vm new file mode 100644 index 0000000..21fc85a Binary files /dev/null and b/data/base/1/12252_vm differ diff --git a/data/base/1/12254 b/data/base/1/12254 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/12256 b/data/base/1/12256 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/12256 differ diff --git a/data/base/1/12257 b/data/base/1/12257 new file mode 100644 index 0000000..de0cda4 Binary files /dev/null and b/data/base/1/12257 differ diff --git a/data/base/1/12257_fsm b/data/base/1/12257_fsm new file mode 100644 index 0000000..f8a0e25 Binary files /dev/null and b/data/base/1/12257_fsm differ diff --git a/data/base/1/12257_vm b/data/base/1/12257_vm new file mode 100644 index 0000000..1f7d263 Binary files /dev/null and b/data/base/1/12257_vm differ diff --git a/data/base/1/12259 b/data/base/1/12259 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/12261 b/data/base/1/12261 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/12261 differ diff --git a/data/base/1/12262 b/data/base/1/12262 new file mode 100644 index 0000000..1f1e925 Binary files /dev/null and b/data/base/1/12262 differ diff --git a/data/base/1/12262_fsm b/data/base/1/12262_fsm new file mode 100644 index 0000000..ecbfaee Binary files /dev/null and b/data/base/1/12262_fsm differ diff --git a/data/base/1/12262_vm b/data/base/1/12262_vm new file mode 100644 index 0000000..346c620 Binary files /dev/null and b/data/base/1/12262_vm differ diff --git a/data/base/1/12264 b/data/base/1/12264 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/12266 b/data/base/1/12266 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/12266 differ diff --git a/data/base/1/12267 b/data/base/1/12267 new file mode 100644 index 0000000..8b140bf Binary files /dev/null and b/data/base/1/12267 differ diff --git a/data/base/1/12267_fsm b/data/base/1/12267_fsm new file mode 100644 index 0000000..a836ddf Binary files /dev/null and b/data/base/1/12267_fsm differ diff --git a/data/base/1/12267_vm b/data/base/1/12267_vm new file mode 100644 index 0000000..5d9b385 Binary files /dev/null and b/data/base/1/12267_vm differ diff --git a/data/base/1/12269 b/data/base/1/12269 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/12271 b/data/base/1/12271 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/12271 differ diff --git a/data/base/1/12272 b/data/base/1/12272 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/12274 b/data/base/1/12274 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/12276 b/data/base/1/12276 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/12276 differ diff --git a/data/base/1/1247 b/data/base/1/1247 new file mode 100644 index 0000000..f6b4c3d Binary files /dev/null and b/data/base/1/1247 differ diff --git a/data/base/1/1247_fsm b/data/base/1/1247_fsm new file mode 100644 index 0000000..da24b40 Binary files /dev/null and b/data/base/1/1247_fsm differ diff --git a/data/base/1/1247_vm b/data/base/1/1247_vm new file mode 100644 index 0000000..09d86e6 Binary files /dev/null and b/data/base/1/1247_vm differ diff --git a/data/base/1/1249 b/data/base/1/1249 new file mode 100644 index 0000000..bdaa22e Binary files /dev/null and b/data/base/1/1249 differ diff --git a/data/base/1/1249_fsm b/data/base/1/1249_fsm new file mode 100644 index 0000000..38f7abb Binary files /dev/null and b/data/base/1/1249_fsm differ diff --git a/data/base/1/1249_vm b/data/base/1/1249_vm new file mode 100644 index 0000000..15efa73 Binary files /dev/null and b/data/base/1/1249_vm differ diff --git a/data/base/1/1255 b/data/base/1/1255 new file mode 100644 index 0000000..26eba8f Binary files /dev/null and b/data/base/1/1255 differ diff --git a/data/base/1/1255_fsm b/data/base/1/1255_fsm new file mode 100644 index 0000000..17a1a3f Binary files /dev/null and b/data/base/1/1255_fsm differ diff --git a/data/base/1/1255_vm b/data/base/1/1255_vm new file mode 100644 index 0000000..4bc9d69 Binary files /dev/null and b/data/base/1/1255_vm differ diff --git a/data/base/1/1259 b/data/base/1/1259 new file mode 100644 index 0000000..228585e Binary files /dev/null and b/data/base/1/1259 differ diff --git a/data/base/1/1259_fsm b/data/base/1/1259_fsm new file mode 100644 index 0000000..ded84fe Binary files /dev/null and b/data/base/1/1259_fsm differ diff --git a/data/base/1/1259_vm b/data/base/1/1259_vm new file mode 100644 index 0000000..fcf77a0 Binary files /dev/null and b/data/base/1/1259_vm differ diff --git a/data/base/1/1417 b/data/base/1/1417 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/1417_vm b/data/base/1/1417_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/1418 b/data/base/1/1418 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/1418_vm b/data/base/1/1418_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/174 b/data/base/1/174 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/174 differ diff --git a/data/base/1/175 b/data/base/1/175 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/175 differ diff --git a/data/base/1/2187 b/data/base/1/2187 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2187 differ diff --git a/data/base/1/2328 b/data/base/1/2328 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2328_vm b/data/base/1/2328_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2336 b/data/base/1/2336 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2336_vm b/data/base/1/2336_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2337 b/data/base/1/2337 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2337 differ diff --git a/data/base/1/2600 b/data/base/1/2600 new file mode 100644 index 0000000..980d98e Binary files /dev/null and b/data/base/1/2600 differ diff --git a/data/base/1/2600_fsm b/data/base/1/2600_fsm new file mode 100644 index 0000000..e63ffab Binary files /dev/null and b/data/base/1/2600_fsm differ diff --git a/data/base/1/2600_vm b/data/base/1/2600_vm new file mode 100644 index 0000000..092d0cd Binary files /dev/null and b/data/base/1/2600_vm differ diff --git a/data/base/1/2601 b/data/base/1/2601 new file mode 100644 index 0000000..1d44fa5 Binary files /dev/null and b/data/base/1/2601 differ diff --git a/data/base/1/2601_fsm b/data/base/1/2601_fsm new file mode 100644 index 0000000..0908076 Binary files /dev/null and b/data/base/1/2601_fsm differ diff --git a/data/base/1/2601_vm b/data/base/1/2601_vm new file mode 100644 index 0000000..0c8d813 Binary files /dev/null and b/data/base/1/2601_vm differ diff --git a/data/base/1/2602 b/data/base/1/2602 new file mode 100644 index 0000000..f9ceea7 Binary files /dev/null and b/data/base/1/2602 differ diff --git a/data/base/1/2602_fsm b/data/base/1/2602_fsm new file mode 100644 index 0000000..d0a4a07 Binary files /dev/null and b/data/base/1/2602_fsm differ diff --git a/data/base/1/2602_vm b/data/base/1/2602_vm new file mode 100644 index 0000000..2b36504 Binary files /dev/null and b/data/base/1/2602_vm differ diff --git a/data/base/1/2603 b/data/base/1/2603 new file mode 100644 index 0000000..05e95f5 Binary files /dev/null and b/data/base/1/2603 differ diff --git a/data/base/1/2603_fsm b/data/base/1/2603_fsm new file mode 100644 index 0000000..8ddf62f Binary files /dev/null and b/data/base/1/2603_fsm differ diff --git a/data/base/1/2603_vm b/data/base/1/2603_vm new file mode 100644 index 0000000..4ca4ef5 Binary files /dev/null and b/data/base/1/2603_vm differ diff --git a/data/base/1/2604 b/data/base/1/2604 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2604_vm b/data/base/1/2604_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2605 b/data/base/1/2605 new file mode 100644 index 0000000..a9f2997 Binary files /dev/null and b/data/base/1/2605 differ diff --git a/data/base/1/2605_fsm b/data/base/1/2605_fsm new file mode 100644 index 0000000..05d7313 Binary files /dev/null and b/data/base/1/2605_fsm differ diff --git a/data/base/1/2605_vm b/data/base/1/2605_vm new file mode 100644 index 0000000..dd51e5c Binary files /dev/null and b/data/base/1/2605_vm differ diff --git a/data/base/1/2606 b/data/base/1/2606 new file mode 100644 index 0000000..b35cb2e Binary files /dev/null and b/data/base/1/2606 differ diff --git a/data/base/1/2606_fsm b/data/base/1/2606_fsm new file mode 100644 index 0000000..d37e4dd Binary files /dev/null and b/data/base/1/2606_fsm differ diff --git a/data/base/1/2606_vm b/data/base/1/2606_vm new file mode 100644 index 0000000..6dcfa35 Binary files /dev/null and b/data/base/1/2606_vm differ diff --git a/data/base/1/2607 b/data/base/1/2607 new file mode 100644 index 0000000..1ec77d5 Binary files /dev/null and b/data/base/1/2607 differ diff --git a/data/base/1/2607_fsm b/data/base/1/2607_fsm new file mode 100644 index 0000000..5b066f1 Binary files /dev/null and b/data/base/1/2607_fsm differ diff --git a/data/base/1/2607_vm b/data/base/1/2607_vm new file mode 100644 index 0000000..4ed3b2c Binary files /dev/null and b/data/base/1/2607_vm differ diff --git a/data/base/1/2608 b/data/base/1/2608 new file mode 100644 index 0000000..ef88f0c Binary files /dev/null and b/data/base/1/2608 differ diff --git a/data/base/1/2608_fsm b/data/base/1/2608_fsm new file mode 100644 index 0000000..b5fe460 Binary files /dev/null and b/data/base/1/2608_fsm differ diff --git a/data/base/1/2608_vm b/data/base/1/2608_vm new file mode 100644 index 0000000..14a96f4 Binary files /dev/null and b/data/base/1/2608_vm differ diff --git a/data/base/1/2609 b/data/base/1/2609 new file mode 100644 index 0000000..7cbbe41 Binary files /dev/null and b/data/base/1/2609 differ diff --git a/data/base/1/2609_fsm b/data/base/1/2609_fsm new file mode 100644 index 0000000..28a9bbf Binary files /dev/null and b/data/base/1/2609_fsm differ diff --git a/data/base/1/2609_vm b/data/base/1/2609_vm new file mode 100644 index 0000000..08e91a6 Binary files /dev/null and b/data/base/1/2609_vm differ diff --git a/data/base/1/2610 b/data/base/1/2610 new file mode 100644 index 0000000..e14edc3 Binary files /dev/null and b/data/base/1/2610 differ diff --git a/data/base/1/2610_fsm b/data/base/1/2610_fsm new file mode 100644 index 0000000..9d98308 Binary files /dev/null and b/data/base/1/2610_fsm differ diff --git a/data/base/1/2610_vm b/data/base/1/2610_vm new file mode 100644 index 0000000..30c5073 Binary files /dev/null and b/data/base/1/2610_vm differ diff --git a/data/base/1/2611 b/data/base/1/2611 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2611_vm b/data/base/1/2611_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2612 b/data/base/1/2612 new file mode 100644 index 0000000..a884a66 Binary files /dev/null and b/data/base/1/2612 differ diff --git a/data/base/1/2612_fsm b/data/base/1/2612_fsm new file mode 100644 index 0000000..877976a Binary files /dev/null and b/data/base/1/2612_fsm differ diff --git a/data/base/1/2612_vm b/data/base/1/2612_vm new file mode 100644 index 0000000..5837065 Binary files /dev/null and b/data/base/1/2612_vm differ diff --git a/data/base/1/2613 b/data/base/1/2613 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2613_vm b/data/base/1/2613_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2615 b/data/base/1/2615 new file mode 100644 index 0000000..8f9b5f7 Binary files /dev/null and b/data/base/1/2615 differ diff --git a/data/base/1/2615_fsm b/data/base/1/2615_fsm new file mode 100644 index 0000000..948882c Binary files /dev/null and b/data/base/1/2615_fsm differ diff --git a/data/base/1/2615_vm b/data/base/1/2615_vm new file mode 100644 index 0000000..bbebcd7 Binary files /dev/null and b/data/base/1/2615_vm differ diff --git a/data/base/1/2616 b/data/base/1/2616 new file mode 100644 index 0000000..dd16ef9 Binary files /dev/null and b/data/base/1/2616 differ diff --git a/data/base/1/2616_fsm b/data/base/1/2616_fsm new file mode 100644 index 0000000..671e592 Binary files /dev/null and b/data/base/1/2616_fsm differ diff --git a/data/base/1/2616_vm b/data/base/1/2616_vm new file mode 100644 index 0000000..c3ac9fa Binary files /dev/null and b/data/base/1/2616_vm differ diff --git a/data/base/1/2617 b/data/base/1/2617 new file mode 100644 index 0000000..814c637 Binary files /dev/null and b/data/base/1/2617 differ diff --git a/data/base/1/2617_fsm b/data/base/1/2617_fsm new file mode 100644 index 0000000..90baa94 Binary files /dev/null and b/data/base/1/2617_fsm differ diff --git a/data/base/1/2617_vm b/data/base/1/2617_vm new file mode 100644 index 0000000..b8a7aec Binary files /dev/null and b/data/base/1/2617_vm differ diff --git a/data/base/1/2618 b/data/base/1/2618 new file mode 100644 index 0000000..4e9dc18 Binary files /dev/null and b/data/base/1/2618 differ diff --git a/data/base/1/2618_fsm b/data/base/1/2618_fsm new file mode 100644 index 0000000..bd14159 Binary files /dev/null and b/data/base/1/2618_fsm differ diff --git a/data/base/1/2618_vm b/data/base/1/2618_vm new file mode 100644 index 0000000..92befd7 Binary files /dev/null and b/data/base/1/2618_vm differ diff --git a/data/base/1/2619 b/data/base/1/2619 new file mode 100644 index 0000000..cf2bfc7 Binary files /dev/null and b/data/base/1/2619 differ diff --git a/data/base/1/2619_fsm b/data/base/1/2619_fsm new file mode 100644 index 0000000..2014f42 Binary files /dev/null and b/data/base/1/2619_fsm differ diff --git a/data/base/1/2619_vm b/data/base/1/2619_vm new file mode 100644 index 0000000..df2d859 Binary files /dev/null and b/data/base/1/2619_vm differ diff --git a/data/base/1/2620 b/data/base/1/2620 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2620_vm b/data/base/1/2620_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2650 b/data/base/1/2650 new file mode 100644 index 0000000..bed34cb Binary files /dev/null and b/data/base/1/2650 differ diff --git a/data/base/1/2651 b/data/base/1/2651 new file mode 100644 index 0000000..4b34967 Binary files /dev/null and b/data/base/1/2651 differ diff --git a/data/base/1/2652 b/data/base/1/2652 new file mode 100644 index 0000000..ccb4c86 Binary files /dev/null and b/data/base/1/2652 differ diff --git a/data/base/1/2653 b/data/base/1/2653 new file mode 100644 index 0000000..fbe21b4 Binary files /dev/null and b/data/base/1/2653 differ diff --git a/data/base/1/2654 b/data/base/1/2654 new file mode 100644 index 0000000..b6973e3 Binary files /dev/null and b/data/base/1/2654 differ diff --git a/data/base/1/2655 b/data/base/1/2655 new file mode 100644 index 0000000..5b2eb49 Binary files /dev/null and b/data/base/1/2655 differ diff --git a/data/base/1/2656 b/data/base/1/2656 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2656 differ diff --git a/data/base/1/2657 b/data/base/1/2657 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2657 differ diff --git a/data/base/1/2658 b/data/base/1/2658 new file mode 100644 index 0000000..6e34dce Binary files /dev/null and b/data/base/1/2658 differ diff --git a/data/base/1/2659 b/data/base/1/2659 new file mode 100644 index 0000000..718bd08 Binary files /dev/null and b/data/base/1/2659 differ diff --git a/data/base/1/2660 b/data/base/1/2660 new file mode 100644 index 0000000..2dd3d7d Binary files /dev/null and b/data/base/1/2660 differ diff --git a/data/base/1/2661 b/data/base/1/2661 new file mode 100644 index 0000000..781cf2a Binary files /dev/null and b/data/base/1/2661 differ diff --git a/data/base/1/2662 b/data/base/1/2662 new file mode 100644 index 0000000..eb31468 Binary files /dev/null and b/data/base/1/2662 differ diff --git a/data/base/1/2663 b/data/base/1/2663 new file mode 100644 index 0000000..7da4d5c Binary files /dev/null and b/data/base/1/2663 differ diff --git a/data/base/1/2664 b/data/base/1/2664 new file mode 100644 index 0000000..16c9525 Binary files /dev/null and b/data/base/1/2664 differ diff --git a/data/base/1/2665 b/data/base/1/2665 new file mode 100644 index 0000000..c083a81 Binary files /dev/null and b/data/base/1/2665 differ diff --git a/data/base/1/2666 b/data/base/1/2666 new file mode 100644 index 0000000..af3913a Binary files /dev/null and b/data/base/1/2666 differ diff --git a/data/base/1/2667 b/data/base/1/2667 new file mode 100644 index 0000000..60196dc Binary files /dev/null and b/data/base/1/2667 differ diff --git a/data/base/1/2668 b/data/base/1/2668 new file mode 100644 index 0000000..1a8334e Binary files /dev/null and b/data/base/1/2668 differ diff --git a/data/base/1/2669 b/data/base/1/2669 new file mode 100644 index 0000000..ecdceeb Binary files /dev/null and b/data/base/1/2669 differ diff --git a/data/base/1/2670 b/data/base/1/2670 new file mode 100644 index 0000000..7fb8be1 Binary files /dev/null and b/data/base/1/2670 differ diff --git a/data/base/1/2673 b/data/base/1/2673 new file mode 100644 index 0000000..1f47c02 Binary files /dev/null and b/data/base/1/2673 differ diff --git a/data/base/1/2674 b/data/base/1/2674 new file mode 100644 index 0000000..5b332da Binary files /dev/null and b/data/base/1/2674 differ diff --git a/data/base/1/2675 b/data/base/1/2675 new file mode 100644 index 0000000..084f665 Binary files /dev/null and b/data/base/1/2675 differ diff --git a/data/base/1/2678 b/data/base/1/2678 new file mode 100644 index 0000000..f1dba2e Binary files /dev/null and b/data/base/1/2678 differ diff --git a/data/base/1/2679 b/data/base/1/2679 new file mode 100644 index 0000000..2063f1d Binary files /dev/null and b/data/base/1/2679 differ diff --git a/data/base/1/2680 b/data/base/1/2680 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2680 differ diff --git a/data/base/1/2681 b/data/base/1/2681 new file mode 100644 index 0000000..0b9c07a Binary files /dev/null and b/data/base/1/2681 differ diff --git a/data/base/1/2682 b/data/base/1/2682 new file mode 100644 index 0000000..e333215 Binary files /dev/null and b/data/base/1/2682 differ diff --git a/data/base/1/2683 b/data/base/1/2683 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2683 differ diff --git a/data/base/1/2684 b/data/base/1/2684 new file mode 100644 index 0000000..15f2d21 Binary files /dev/null and b/data/base/1/2684 differ diff --git a/data/base/1/2685 b/data/base/1/2685 new file mode 100644 index 0000000..8e5b9dd Binary files /dev/null and b/data/base/1/2685 differ diff --git a/data/base/1/2686 b/data/base/1/2686 new file mode 100644 index 0000000..3279a51 Binary files /dev/null and b/data/base/1/2686 differ diff --git a/data/base/1/2687 b/data/base/1/2687 new file mode 100644 index 0000000..17e2305 Binary files /dev/null and b/data/base/1/2687 differ diff --git a/data/base/1/2688 b/data/base/1/2688 new file mode 100644 index 0000000..aae5004 Binary files /dev/null and b/data/base/1/2688 differ diff --git a/data/base/1/2689 b/data/base/1/2689 new file mode 100644 index 0000000..801bab2 Binary files /dev/null and b/data/base/1/2689 differ diff --git a/data/base/1/2690 b/data/base/1/2690 new file mode 100644 index 0000000..0eab5c2 Binary files /dev/null and b/data/base/1/2690 differ diff --git a/data/base/1/2691 b/data/base/1/2691 new file mode 100644 index 0000000..0eee67a Binary files /dev/null and b/data/base/1/2691 differ diff --git a/data/base/1/2692 b/data/base/1/2692 new file mode 100644 index 0000000..eb49372 Binary files /dev/null and b/data/base/1/2692 differ diff --git a/data/base/1/2693 b/data/base/1/2693 new file mode 100644 index 0000000..98ddf04 Binary files /dev/null and b/data/base/1/2693 differ diff --git a/data/base/1/2696 b/data/base/1/2696 new file mode 100644 index 0000000..d0945b9 Binary files /dev/null and b/data/base/1/2696 differ diff --git a/data/base/1/2699 b/data/base/1/2699 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2699 differ diff --git a/data/base/1/2701 b/data/base/1/2701 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2701 differ diff --git a/data/base/1/2702 b/data/base/1/2702 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2702 differ diff --git a/data/base/1/2703 b/data/base/1/2703 new file mode 100644 index 0000000..f601911 Binary files /dev/null and b/data/base/1/2703 differ diff --git a/data/base/1/2704 b/data/base/1/2704 new file mode 100644 index 0000000..6c44706 Binary files /dev/null and b/data/base/1/2704 differ diff --git a/data/base/1/2753 b/data/base/1/2753 new file mode 100644 index 0000000..bec6fa9 Binary files /dev/null and b/data/base/1/2753 differ diff --git a/data/base/1/2753_fsm b/data/base/1/2753_fsm new file mode 100644 index 0000000..e8403db Binary files /dev/null and b/data/base/1/2753_fsm differ diff --git a/data/base/1/2753_vm b/data/base/1/2753_vm new file mode 100644 index 0000000..875c3e8 Binary files /dev/null and b/data/base/1/2753_vm differ diff --git a/data/base/1/2754 b/data/base/1/2754 new file mode 100644 index 0000000..7e1726d Binary files /dev/null and b/data/base/1/2754 differ diff --git a/data/base/1/2755 b/data/base/1/2755 new file mode 100644 index 0000000..1f20059 Binary files /dev/null and b/data/base/1/2755 differ diff --git a/data/base/1/2756 b/data/base/1/2756 new file mode 100644 index 0000000..d211e46 Binary files /dev/null and b/data/base/1/2756 differ diff --git a/data/base/1/2757 b/data/base/1/2757 new file mode 100644 index 0000000..8bd7505 Binary files /dev/null and b/data/base/1/2757 differ diff --git a/data/base/1/2830 b/data/base/1/2830 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2830_vm b/data/base/1/2830_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2831 b/data/base/1/2831 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2831 differ diff --git a/data/base/1/2832 b/data/base/1/2832 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2832_vm b/data/base/1/2832_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2833 b/data/base/1/2833 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2833 differ diff --git a/data/base/1/2834 b/data/base/1/2834 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2834_vm b/data/base/1/2834_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2835 b/data/base/1/2835 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2835 differ diff --git a/data/base/1/2836 b/data/base/1/2836 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2836_vm b/data/base/1/2836_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2837 b/data/base/1/2837 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2837 differ diff --git a/data/base/1/2838 b/data/base/1/2838 new file mode 100644 index 0000000..4c2ae1d Binary files /dev/null and b/data/base/1/2838 differ diff --git a/data/base/1/2838_fsm b/data/base/1/2838_fsm new file mode 100644 index 0000000..c2f0170 Binary files /dev/null and b/data/base/1/2838_fsm differ diff --git a/data/base/1/2838_vm b/data/base/1/2838_vm new file mode 100644 index 0000000..606fd5a Binary files /dev/null and b/data/base/1/2838_vm differ diff --git a/data/base/1/2839 b/data/base/1/2839 new file mode 100644 index 0000000..6faa51c Binary files /dev/null and b/data/base/1/2839 differ diff --git a/data/base/1/2840 b/data/base/1/2840 new file mode 100644 index 0000000..87b447a Binary files /dev/null and b/data/base/1/2840 differ diff --git a/data/base/1/2840_fsm b/data/base/1/2840_fsm new file mode 100644 index 0000000..e1d388f Binary files /dev/null and b/data/base/1/2840_fsm differ diff --git a/data/base/1/2840_vm b/data/base/1/2840_vm new file mode 100644 index 0000000..de7b7de Binary files /dev/null and b/data/base/1/2840_vm differ diff --git a/data/base/1/2841 b/data/base/1/2841 new file mode 100644 index 0000000..627f963 Binary files /dev/null and b/data/base/1/2841 differ diff --git a/data/base/1/2995 b/data/base/1/2995 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2995_vm b/data/base/1/2995_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/2996 b/data/base/1/2996 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/2996 differ diff --git a/data/base/1/3079 b/data/base/1/3079 new file mode 100644 index 0000000..4c96adb Binary files /dev/null and b/data/base/1/3079 differ diff --git a/data/base/1/3079_fsm b/data/base/1/3079_fsm new file mode 100644 index 0000000..7732d22 Binary files /dev/null and b/data/base/1/3079_fsm differ diff --git a/data/base/1/3079_vm b/data/base/1/3079_vm new file mode 100644 index 0000000..311cfbf Binary files /dev/null and b/data/base/1/3079_vm differ diff --git a/data/base/1/3080 b/data/base/1/3080 new file mode 100644 index 0000000..34a5590 Binary files /dev/null and b/data/base/1/3080 differ diff --git a/data/base/1/3081 b/data/base/1/3081 new file mode 100644 index 0000000..ffbfd27 Binary files /dev/null and b/data/base/1/3081 differ diff --git a/data/base/1/3085 b/data/base/1/3085 new file mode 100644 index 0000000..5fd5684 Binary files /dev/null and b/data/base/1/3085 differ diff --git a/data/base/1/3118 b/data/base/1/3118 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3118_vm b/data/base/1/3118_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3119 b/data/base/1/3119 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3119 differ diff --git a/data/base/1/3164 b/data/base/1/3164 new file mode 100644 index 0000000..581480f Binary files /dev/null and b/data/base/1/3164 differ diff --git a/data/base/1/3256 b/data/base/1/3256 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3256_vm b/data/base/1/3256_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3257 b/data/base/1/3257 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3257 differ diff --git a/data/base/1/3258 b/data/base/1/3258 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3258 differ diff --git a/data/base/1/3394 b/data/base/1/3394 new file mode 100644 index 0000000..85045b6 Binary files /dev/null and b/data/base/1/3394 differ diff --git a/data/base/1/3394_fsm b/data/base/1/3394_fsm new file mode 100644 index 0000000..b0cde0f Binary files /dev/null and b/data/base/1/3394_fsm differ diff --git a/data/base/1/3394_vm b/data/base/1/3394_vm new file mode 100644 index 0000000..8e9dd93 Binary files /dev/null and b/data/base/1/3394_vm differ diff --git a/data/base/1/3395 b/data/base/1/3395 new file mode 100644 index 0000000..4cb7af3 Binary files /dev/null and b/data/base/1/3395 differ diff --git a/data/base/1/3455 b/data/base/1/3455 new file mode 100644 index 0000000..efdb287 Binary files /dev/null and b/data/base/1/3455 differ diff --git a/data/base/1/3456 b/data/base/1/3456 new file mode 100644 index 0000000..ce3d787 Binary files /dev/null and b/data/base/1/3456 differ diff --git a/data/base/1/3456_fsm b/data/base/1/3456_fsm new file mode 100644 index 0000000..d7469db Binary files /dev/null and b/data/base/1/3456_fsm differ diff --git a/data/base/1/3456_vm b/data/base/1/3456_vm new file mode 100644 index 0000000..deb5f8b Binary files /dev/null and b/data/base/1/3456_vm differ diff --git a/data/base/1/3466 b/data/base/1/3466 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3466_vm b/data/base/1/3466_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3467 b/data/base/1/3467 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3467 differ diff --git a/data/base/1/3468 b/data/base/1/3468 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3468 differ diff --git a/data/base/1/3501 b/data/base/1/3501 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3501_vm b/data/base/1/3501_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3502 b/data/base/1/3502 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3502 differ diff --git a/data/base/1/3503 b/data/base/1/3503 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3503 differ diff --git a/data/base/1/3534 b/data/base/1/3534 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3534 differ diff --git a/data/base/1/3541 b/data/base/1/3541 new file mode 100644 index 0000000..ad69913 Binary files /dev/null and b/data/base/1/3541 differ diff --git a/data/base/1/3541_fsm b/data/base/1/3541_fsm new file mode 100644 index 0000000..62f0156 Binary files /dev/null and b/data/base/1/3541_fsm differ diff --git a/data/base/1/3541_vm b/data/base/1/3541_vm new file mode 100644 index 0000000..5760fba Binary files /dev/null and b/data/base/1/3541_vm differ diff --git a/data/base/1/3542 b/data/base/1/3542 new file mode 100644 index 0000000..aad1202 Binary files /dev/null and b/data/base/1/3542 differ diff --git a/data/base/1/3574 b/data/base/1/3574 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3574 differ diff --git a/data/base/1/3575 b/data/base/1/3575 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3575 differ diff --git a/data/base/1/3576 b/data/base/1/3576 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3576_vm b/data/base/1/3576_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3596 b/data/base/1/3596 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3596_vm b/data/base/1/3596_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3597 b/data/base/1/3597 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3597 differ diff --git a/data/base/1/3598 b/data/base/1/3598 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3598_vm b/data/base/1/3598_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/3599 b/data/base/1/3599 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/3599 differ diff --git a/data/base/1/3600 b/data/base/1/3600 new file mode 100644 index 0000000..6a1944f Binary files /dev/null and b/data/base/1/3600 differ diff --git a/data/base/1/3600_fsm b/data/base/1/3600_fsm new file mode 100644 index 0000000..ffd4b15 Binary files /dev/null and b/data/base/1/3600_fsm differ diff --git a/data/base/1/3600_vm b/data/base/1/3600_vm new file mode 100644 index 0000000..884f674 Binary files /dev/null and b/data/base/1/3600_vm differ diff --git a/data/base/1/3601 b/data/base/1/3601 new file mode 100644 index 0000000..065e4e1 Binary files /dev/null and b/data/base/1/3601 differ diff --git a/data/base/1/3601_fsm b/data/base/1/3601_fsm new file mode 100644 index 0000000..7732d22 Binary files /dev/null and b/data/base/1/3601_fsm differ diff --git a/data/base/1/3601_vm b/data/base/1/3601_vm new file mode 100644 index 0000000..53829d3 Binary files /dev/null and b/data/base/1/3601_vm differ diff --git a/data/base/1/3602 b/data/base/1/3602 new file mode 100644 index 0000000..b135a1a Binary files /dev/null and b/data/base/1/3602 differ diff --git a/data/base/1/3602_fsm b/data/base/1/3602_fsm new file mode 100644 index 0000000..7cbf834 Binary files /dev/null and b/data/base/1/3602_fsm differ diff --git a/data/base/1/3602_vm b/data/base/1/3602_vm new file mode 100644 index 0000000..e14dc46 Binary files /dev/null and b/data/base/1/3602_vm differ diff --git a/data/base/1/3603 b/data/base/1/3603 new file mode 100644 index 0000000..520bbaa Binary files /dev/null and b/data/base/1/3603 differ diff --git a/data/base/1/3603_fsm b/data/base/1/3603_fsm new file mode 100644 index 0000000..6d00d68 Binary files /dev/null and b/data/base/1/3603_fsm differ diff --git a/data/base/1/3603_vm b/data/base/1/3603_vm new file mode 100644 index 0000000..f1b0906 Binary files /dev/null and b/data/base/1/3603_vm differ diff --git a/data/base/1/3604 b/data/base/1/3604 new file mode 100644 index 0000000..d883ba6 Binary files /dev/null and b/data/base/1/3604 differ diff --git a/data/base/1/3605 b/data/base/1/3605 new file mode 100644 index 0000000..17069a0 Binary files /dev/null and b/data/base/1/3605 differ diff --git a/data/base/1/3606 b/data/base/1/3606 new file mode 100644 index 0000000..89cc066 Binary files /dev/null and b/data/base/1/3606 differ diff --git a/data/base/1/3607 b/data/base/1/3607 new file mode 100644 index 0000000..c5209f0 Binary files /dev/null and b/data/base/1/3607 differ diff --git a/data/base/1/3608 b/data/base/1/3608 new file mode 100644 index 0000000..8966cc3 Binary files /dev/null and b/data/base/1/3608 differ diff --git a/data/base/1/3609 b/data/base/1/3609 new file mode 100644 index 0000000..e491b31 Binary files /dev/null and b/data/base/1/3609 differ diff --git a/data/base/1/3712 b/data/base/1/3712 new file mode 100644 index 0000000..bac4859 Binary files /dev/null and b/data/base/1/3712 differ diff --git a/data/base/1/3764 b/data/base/1/3764 new file mode 100644 index 0000000..1bcd058 Binary files /dev/null and b/data/base/1/3764 differ diff --git a/data/base/1/3764_fsm b/data/base/1/3764_fsm new file mode 100644 index 0000000..d041693 Binary files /dev/null and b/data/base/1/3764_fsm differ diff --git a/data/base/1/3764_vm b/data/base/1/3764_vm new file mode 100644 index 0000000..d34e273 Binary files /dev/null and b/data/base/1/3764_vm differ diff --git a/data/base/1/3766 b/data/base/1/3766 new file mode 100644 index 0000000..5bc8fb7 Binary files /dev/null and b/data/base/1/3766 differ diff --git a/data/base/1/3767 b/data/base/1/3767 new file mode 100644 index 0000000..0a55910 Binary files /dev/null and b/data/base/1/3767 differ diff --git a/data/base/1/548 b/data/base/1/548 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/548 differ diff --git a/data/base/1/549 b/data/base/1/549 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/549 differ diff --git a/data/base/1/826 b/data/base/1/826 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/826_vm b/data/base/1/826_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/1/827 b/data/base/1/827 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/827 differ diff --git a/data/base/1/828 b/data/base/1/828 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/1/828 differ diff --git a/data/base/1/PG_VERSION b/data/base/1/PG_VERSION new file mode 100644 index 0000000..c026ac8 --- /dev/null +++ b/data/base/1/PG_VERSION @@ -0,0 +1 @@ +9.6 diff --git a/data/base/1/pg_filenode.map b/data/base/1/pg_filenode.map new file mode 100644 index 0000000..428c97e Binary files /dev/null and b/data/base/1/pg_filenode.map differ diff --git a/data/base/12406/112 b/data/base/12406/112 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/112 differ diff --git a/data/base/12406/113 b/data/base/12406/113 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/113 differ diff --git a/data/base/12406/12242 b/data/base/12406/12242 new file mode 100644 index 0000000..e3202ef Binary files /dev/null and b/data/base/12406/12242 differ diff --git a/data/base/12406/12242_fsm b/data/base/12406/12242_fsm new file mode 100644 index 0000000..7658735 Binary files /dev/null and b/data/base/12406/12242_fsm differ diff --git a/data/base/12406/12242_vm b/data/base/12406/12242_vm new file mode 100644 index 0000000..1931c13 Binary files /dev/null and b/data/base/12406/12242_vm differ diff --git a/data/base/12406/12244 b/data/base/12406/12244 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/12246 b/data/base/12406/12246 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/12246 differ diff --git a/data/base/12406/12247 b/data/base/12406/12247 new file mode 100644 index 0000000..a2db1a1 Binary files /dev/null and b/data/base/12406/12247 differ diff --git a/data/base/12406/12247_fsm b/data/base/12406/12247_fsm new file mode 100644 index 0000000..ce7c26e Binary files /dev/null and b/data/base/12406/12247_fsm differ diff --git a/data/base/12406/12247_vm b/data/base/12406/12247_vm new file mode 100644 index 0000000..bb406d1 Binary files /dev/null and b/data/base/12406/12247_vm differ diff --git a/data/base/12406/12249 b/data/base/12406/12249 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/12251 b/data/base/12406/12251 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/12251 differ diff --git a/data/base/12406/12252 b/data/base/12406/12252 new file mode 100644 index 0000000..46a5d07 Binary files /dev/null and b/data/base/12406/12252 differ diff --git a/data/base/12406/12252_fsm b/data/base/12406/12252_fsm new file mode 100644 index 0000000..98dc620 Binary files /dev/null and b/data/base/12406/12252_fsm differ diff --git a/data/base/12406/12252_vm b/data/base/12406/12252_vm new file mode 100644 index 0000000..21fc85a Binary files /dev/null and b/data/base/12406/12252_vm differ diff --git a/data/base/12406/12254 b/data/base/12406/12254 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/12256 b/data/base/12406/12256 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/12256 differ diff --git a/data/base/12406/12257 b/data/base/12406/12257 new file mode 100644 index 0000000..de0cda4 Binary files /dev/null and b/data/base/12406/12257 differ diff --git a/data/base/12406/12257_fsm b/data/base/12406/12257_fsm new file mode 100644 index 0000000..f8a0e25 Binary files /dev/null and b/data/base/12406/12257_fsm differ diff --git a/data/base/12406/12257_vm b/data/base/12406/12257_vm new file mode 100644 index 0000000..1f7d263 Binary files /dev/null and b/data/base/12406/12257_vm differ diff --git a/data/base/12406/12259 b/data/base/12406/12259 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/12261 b/data/base/12406/12261 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/12261 differ diff --git a/data/base/12406/12262 b/data/base/12406/12262 new file mode 100644 index 0000000..1f1e925 Binary files /dev/null and b/data/base/12406/12262 differ diff --git a/data/base/12406/12262_fsm b/data/base/12406/12262_fsm new file mode 100644 index 0000000..ecbfaee Binary files /dev/null and b/data/base/12406/12262_fsm differ diff --git a/data/base/12406/12262_vm b/data/base/12406/12262_vm new file mode 100644 index 0000000..346c620 Binary files /dev/null and b/data/base/12406/12262_vm differ diff --git a/data/base/12406/12264 b/data/base/12406/12264 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/12266 b/data/base/12406/12266 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/12266 differ diff --git a/data/base/12406/12267 b/data/base/12406/12267 new file mode 100644 index 0000000..8b140bf Binary files /dev/null and b/data/base/12406/12267 differ diff --git a/data/base/12406/12267_fsm b/data/base/12406/12267_fsm new file mode 100644 index 0000000..a836ddf Binary files /dev/null and b/data/base/12406/12267_fsm differ diff --git a/data/base/12406/12267_vm b/data/base/12406/12267_vm new file mode 100644 index 0000000..5d9b385 Binary files /dev/null and b/data/base/12406/12267_vm differ diff --git a/data/base/12406/12269 b/data/base/12406/12269 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/12271 b/data/base/12406/12271 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/12271 differ diff --git a/data/base/12406/12272 b/data/base/12406/12272 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/12274 b/data/base/12406/12274 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/12276 b/data/base/12406/12276 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/12276 differ diff --git a/data/base/12406/1247 b/data/base/12406/1247 new file mode 100644 index 0000000..f6b4c3d Binary files /dev/null and b/data/base/12406/1247 differ diff --git a/data/base/12406/1247_fsm b/data/base/12406/1247_fsm new file mode 100644 index 0000000..da24b40 Binary files /dev/null and b/data/base/12406/1247_fsm differ diff --git a/data/base/12406/1247_vm b/data/base/12406/1247_vm new file mode 100644 index 0000000..09d86e6 Binary files /dev/null and b/data/base/12406/1247_vm differ diff --git a/data/base/12406/1249 b/data/base/12406/1249 new file mode 100644 index 0000000..bdaa22e Binary files /dev/null and b/data/base/12406/1249 differ diff --git a/data/base/12406/1249_fsm b/data/base/12406/1249_fsm new file mode 100644 index 0000000..38f7abb Binary files /dev/null and b/data/base/12406/1249_fsm differ diff --git a/data/base/12406/1249_vm b/data/base/12406/1249_vm new file mode 100644 index 0000000..15efa73 Binary files /dev/null and b/data/base/12406/1249_vm differ diff --git a/data/base/12406/1255 b/data/base/12406/1255 new file mode 100644 index 0000000..26eba8f Binary files /dev/null and b/data/base/12406/1255 differ diff --git a/data/base/12406/1255_fsm b/data/base/12406/1255_fsm new file mode 100644 index 0000000..17a1a3f Binary files /dev/null and b/data/base/12406/1255_fsm differ diff --git a/data/base/12406/1255_vm b/data/base/12406/1255_vm new file mode 100644 index 0000000..4bc9d69 Binary files /dev/null and b/data/base/12406/1255_vm differ diff --git a/data/base/12406/1259 b/data/base/12406/1259 new file mode 100644 index 0000000..e8eb26d Binary files /dev/null and b/data/base/12406/1259 differ diff --git a/data/base/12406/1259_fsm b/data/base/12406/1259_fsm new file mode 100644 index 0000000..ded84fe Binary files /dev/null and b/data/base/12406/1259_fsm differ diff --git a/data/base/12406/1259_vm b/data/base/12406/1259_vm new file mode 100644 index 0000000..fcf77a0 Binary files /dev/null and b/data/base/12406/1259_vm differ diff --git a/data/base/12406/1417 b/data/base/12406/1417 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/1417_vm b/data/base/12406/1417_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/1418 b/data/base/12406/1418 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/1418_vm b/data/base/12406/1418_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/174 b/data/base/12406/174 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/174 differ diff --git a/data/base/12406/175 b/data/base/12406/175 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/175 differ diff --git a/data/base/12406/2187 b/data/base/12406/2187 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2187 differ diff --git a/data/base/12406/2328 b/data/base/12406/2328 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2328_vm b/data/base/12406/2328_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2336 b/data/base/12406/2336 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2336_vm b/data/base/12406/2336_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2337 b/data/base/12406/2337 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2337 differ diff --git a/data/base/12406/2600 b/data/base/12406/2600 new file mode 100644 index 0000000..980d98e Binary files /dev/null and b/data/base/12406/2600 differ diff --git a/data/base/12406/2600_fsm b/data/base/12406/2600_fsm new file mode 100644 index 0000000..e63ffab Binary files /dev/null and b/data/base/12406/2600_fsm differ diff --git a/data/base/12406/2600_vm b/data/base/12406/2600_vm new file mode 100644 index 0000000..092d0cd Binary files /dev/null and b/data/base/12406/2600_vm differ diff --git a/data/base/12406/2601 b/data/base/12406/2601 new file mode 100644 index 0000000..1d44fa5 Binary files /dev/null and b/data/base/12406/2601 differ diff --git a/data/base/12406/2601_fsm b/data/base/12406/2601_fsm new file mode 100644 index 0000000..0908076 Binary files /dev/null and b/data/base/12406/2601_fsm differ diff --git a/data/base/12406/2601_vm b/data/base/12406/2601_vm new file mode 100644 index 0000000..0c8d813 Binary files /dev/null and b/data/base/12406/2601_vm differ diff --git a/data/base/12406/2602 b/data/base/12406/2602 new file mode 100644 index 0000000..f9ceea7 Binary files /dev/null and b/data/base/12406/2602 differ diff --git a/data/base/12406/2602_fsm b/data/base/12406/2602_fsm new file mode 100644 index 0000000..d0a4a07 Binary files /dev/null and b/data/base/12406/2602_fsm differ diff --git a/data/base/12406/2602_vm b/data/base/12406/2602_vm new file mode 100644 index 0000000..2b36504 Binary files /dev/null and b/data/base/12406/2602_vm differ diff --git a/data/base/12406/2603 b/data/base/12406/2603 new file mode 100644 index 0000000..05e95f5 Binary files /dev/null and b/data/base/12406/2603 differ diff --git a/data/base/12406/2603_fsm b/data/base/12406/2603_fsm new file mode 100644 index 0000000..8ddf62f Binary files /dev/null and b/data/base/12406/2603_fsm differ diff --git a/data/base/12406/2603_vm b/data/base/12406/2603_vm new file mode 100644 index 0000000..4ca4ef5 Binary files /dev/null and b/data/base/12406/2603_vm differ diff --git a/data/base/12406/2604 b/data/base/12406/2604 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2604_vm b/data/base/12406/2604_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2605 b/data/base/12406/2605 new file mode 100644 index 0000000..a9f2997 Binary files /dev/null and b/data/base/12406/2605 differ diff --git a/data/base/12406/2605_fsm b/data/base/12406/2605_fsm new file mode 100644 index 0000000..05d7313 Binary files /dev/null and b/data/base/12406/2605_fsm differ diff --git a/data/base/12406/2605_vm b/data/base/12406/2605_vm new file mode 100644 index 0000000..dd51e5c Binary files /dev/null and b/data/base/12406/2605_vm differ diff --git a/data/base/12406/2606 b/data/base/12406/2606 new file mode 100644 index 0000000..b35cb2e Binary files /dev/null and b/data/base/12406/2606 differ diff --git a/data/base/12406/2606_fsm b/data/base/12406/2606_fsm new file mode 100644 index 0000000..d37e4dd Binary files /dev/null and b/data/base/12406/2606_fsm differ diff --git a/data/base/12406/2606_vm b/data/base/12406/2606_vm new file mode 100644 index 0000000..6dcfa35 Binary files /dev/null and b/data/base/12406/2606_vm differ diff --git a/data/base/12406/2607 b/data/base/12406/2607 new file mode 100644 index 0000000..1ec77d5 Binary files /dev/null and b/data/base/12406/2607 differ diff --git a/data/base/12406/2607_fsm b/data/base/12406/2607_fsm new file mode 100644 index 0000000..5b066f1 Binary files /dev/null and b/data/base/12406/2607_fsm differ diff --git a/data/base/12406/2607_vm b/data/base/12406/2607_vm new file mode 100644 index 0000000..4ed3b2c Binary files /dev/null and b/data/base/12406/2607_vm differ diff --git a/data/base/12406/2608 b/data/base/12406/2608 new file mode 100644 index 0000000..ef88f0c Binary files /dev/null and b/data/base/12406/2608 differ diff --git a/data/base/12406/2608_fsm b/data/base/12406/2608_fsm new file mode 100644 index 0000000..b5fe460 Binary files /dev/null and b/data/base/12406/2608_fsm differ diff --git a/data/base/12406/2608_vm b/data/base/12406/2608_vm new file mode 100644 index 0000000..14a96f4 Binary files /dev/null and b/data/base/12406/2608_vm differ diff --git a/data/base/12406/2609 b/data/base/12406/2609 new file mode 100644 index 0000000..7cbbe41 Binary files /dev/null and b/data/base/12406/2609 differ diff --git a/data/base/12406/2609_fsm b/data/base/12406/2609_fsm new file mode 100644 index 0000000..28a9bbf Binary files /dev/null and b/data/base/12406/2609_fsm differ diff --git a/data/base/12406/2609_vm b/data/base/12406/2609_vm new file mode 100644 index 0000000..08e91a6 Binary files /dev/null and b/data/base/12406/2609_vm differ diff --git a/data/base/12406/2610 b/data/base/12406/2610 new file mode 100644 index 0000000..e14edc3 Binary files /dev/null and b/data/base/12406/2610 differ diff --git a/data/base/12406/2610_fsm b/data/base/12406/2610_fsm new file mode 100644 index 0000000..9d98308 Binary files /dev/null and b/data/base/12406/2610_fsm differ diff --git a/data/base/12406/2610_vm b/data/base/12406/2610_vm new file mode 100644 index 0000000..30c5073 Binary files /dev/null and b/data/base/12406/2610_vm differ diff --git a/data/base/12406/2611 b/data/base/12406/2611 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2611_vm b/data/base/12406/2611_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2612 b/data/base/12406/2612 new file mode 100644 index 0000000..a884a66 Binary files /dev/null and b/data/base/12406/2612 differ diff --git a/data/base/12406/2612_fsm b/data/base/12406/2612_fsm new file mode 100644 index 0000000..877976a Binary files /dev/null and b/data/base/12406/2612_fsm differ diff --git a/data/base/12406/2612_vm b/data/base/12406/2612_vm new file mode 100644 index 0000000..5837065 Binary files /dev/null and b/data/base/12406/2612_vm differ diff --git a/data/base/12406/2613 b/data/base/12406/2613 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2613_vm b/data/base/12406/2613_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2615 b/data/base/12406/2615 new file mode 100644 index 0000000..8f9b5f7 Binary files /dev/null and b/data/base/12406/2615 differ diff --git a/data/base/12406/2615_fsm b/data/base/12406/2615_fsm new file mode 100644 index 0000000..948882c Binary files /dev/null and b/data/base/12406/2615_fsm differ diff --git a/data/base/12406/2615_vm b/data/base/12406/2615_vm new file mode 100644 index 0000000..bbebcd7 Binary files /dev/null and b/data/base/12406/2615_vm differ diff --git a/data/base/12406/2616 b/data/base/12406/2616 new file mode 100644 index 0000000..dd16ef9 Binary files /dev/null and b/data/base/12406/2616 differ diff --git a/data/base/12406/2616_fsm b/data/base/12406/2616_fsm new file mode 100644 index 0000000..671e592 Binary files /dev/null and b/data/base/12406/2616_fsm differ diff --git a/data/base/12406/2616_vm b/data/base/12406/2616_vm new file mode 100644 index 0000000..c3ac9fa Binary files /dev/null and b/data/base/12406/2616_vm differ diff --git a/data/base/12406/2617 b/data/base/12406/2617 new file mode 100644 index 0000000..814c637 Binary files /dev/null and b/data/base/12406/2617 differ diff --git a/data/base/12406/2617_fsm b/data/base/12406/2617_fsm new file mode 100644 index 0000000..90baa94 Binary files /dev/null and b/data/base/12406/2617_fsm differ diff --git a/data/base/12406/2617_vm b/data/base/12406/2617_vm new file mode 100644 index 0000000..b8a7aec Binary files /dev/null and b/data/base/12406/2617_vm differ diff --git a/data/base/12406/2618 b/data/base/12406/2618 new file mode 100644 index 0000000..4e9dc18 Binary files /dev/null and b/data/base/12406/2618 differ diff --git a/data/base/12406/2618_fsm b/data/base/12406/2618_fsm new file mode 100644 index 0000000..bd14159 Binary files /dev/null and b/data/base/12406/2618_fsm differ diff --git a/data/base/12406/2618_vm b/data/base/12406/2618_vm new file mode 100644 index 0000000..92befd7 Binary files /dev/null and b/data/base/12406/2618_vm differ diff --git a/data/base/12406/2619 b/data/base/12406/2619 new file mode 100644 index 0000000..cf2bfc7 Binary files /dev/null and b/data/base/12406/2619 differ diff --git a/data/base/12406/2619_fsm b/data/base/12406/2619_fsm new file mode 100644 index 0000000..2014f42 Binary files /dev/null and b/data/base/12406/2619_fsm differ diff --git a/data/base/12406/2619_vm b/data/base/12406/2619_vm new file mode 100644 index 0000000..df2d859 Binary files /dev/null and b/data/base/12406/2619_vm differ diff --git a/data/base/12406/2620 b/data/base/12406/2620 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2620_vm b/data/base/12406/2620_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2650 b/data/base/12406/2650 new file mode 100644 index 0000000..bed34cb Binary files /dev/null and b/data/base/12406/2650 differ diff --git a/data/base/12406/2651 b/data/base/12406/2651 new file mode 100644 index 0000000..4b34967 Binary files /dev/null and b/data/base/12406/2651 differ diff --git a/data/base/12406/2652 b/data/base/12406/2652 new file mode 100644 index 0000000..ccb4c86 Binary files /dev/null and b/data/base/12406/2652 differ diff --git a/data/base/12406/2653 b/data/base/12406/2653 new file mode 100644 index 0000000..fbe21b4 Binary files /dev/null and b/data/base/12406/2653 differ diff --git a/data/base/12406/2654 b/data/base/12406/2654 new file mode 100644 index 0000000..b6973e3 Binary files /dev/null and b/data/base/12406/2654 differ diff --git a/data/base/12406/2655 b/data/base/12406/2655 new file mode 100644 index 0000000..5b2eb49 Binary files /dev/null and b/data/base/12406/2655 differ diff --git a/data/base/12406/2656 b/data/base/12406/2656 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2656 differ diff --git a/data/base/12406/2657 b/data/base/12406/2657 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2657 differ diff --git a/data/base/12406/2658 b/data/base/12406/2658 new file mode 100644 index 0000000..6e34dce Binary files /dev/null and b/data/base/12406/2658 differ diff --git a/data/base/12406/2659 b/data/base/12406/2659 new file mode 100644 index 0000000..718bd08 Binary files /dev/null and b/data/base/12406/2659 differ diff --git a/data/base/12406/2660 b/data/base/12406/2660 new file mode 100644 index 0000000..2dd3d7d Binary files /dev/null and b/data/base/12406/2660 differ diff --git a/data/base/12406/2661 b/data/base/12406/2661 new file mode 100644 index 0000000..781cf2a Binary files /dev/null and b/data/base/12406/2661 differ diff --git a/data/base/12406/2662 b/data/base/12406/2662 new file mode 100644 index 0000000..eb31468 Binary files /dev/null and b/data/base/12406/2662 differ diff --git a/data/base/12406/2663 b/data/base/12406/2663 new file mode 100644 index 0000000..7da4d5c Binary files /dev/null and b/data/base/12406/2663 differ diff --git a/data/base/12406/2664 b/data/base/12406/2664 new file mode 100644 index 0000000..16c9525 Binary files /dev/null and b/data/base/12406/2664 differ diff --git a/data/base/12406/2665 b/data/base/12406/2665 new file mode 100644 index 0000000..c083a81 Binary files /dev/null and b/data/base/12406/2665 differ diff --git a/data/base/12406/2666 b/data/base/12406/2666 new file mode 100644 index 0000000..af3913a Binary files /dev/null and b/data/base/12406/2666 differ diff --git a/data/base/12406/2667 b/data/base/12406/2667 new file mode 100644 index 0000000..60196dc Binary files /dev/null and b/data/base/12406/2667 differ diff --git a/data/base/12406/2668 b/data/base/12406/2668 new file mode 100644 index 0000000..1a8334e Binary files /dev/null and b/data/base/12406/2668 differ diff --git a/data/base/12406/2669 b/data/base/12406/2669 new file mode 100644 index 0000000..ecdceeb Binary files /dev/null and b/data/base/12406/2669 differ diff --git a/data/base/12406/2670 b/data/base/12406/2670 new file mode 100644 index 0000000..7fb8be1 Binary files /dev/null and b/data/base/12406/2670 differ diff --git a/data/base/12406/2673 b/data/base/12406/2673 new file mode 100644 index 0000000..1f47c02 Binary files /dev/null and b/data/base/12406/2673 differ diff --git a/data/base/12406/2674 b/data/base/12406/2674 new file mode 100644 index 0000000..5b332da Binary files /dev/null and b/data/base/12406/2674 differ diff --git a/data/base/12406/2675 b/data/base/12406/2675 new file mode 100644 index 0000000..084f665 Binary files /dev/null and b/data/base/12406/2675 differ diff --git a/data/base/12406/2678 b/data/base/12406/2678 new file mode 100644 index 0000000..f1dba2e Binary files /dev/null and b/data/base/12406/2678 differ diff --git a/data/base/12406/2679 b/data/base/12406/2679 new file mode 100644 index 0000000..2063f1d Binary files /dev/null and b/data/base/12406/2679 differ diff --git a/data/base/12406/2680 b/data/base/12406/2680 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2680 differ diff --git a/data/base/12406/2681 b/data/base/12406/2681 new file mode 100644 index 0000000..0b9c07a Binary files /dev/null and b/data/base/12406/2681 differ diff --git a/data/base/12406/2682 b/data/base/12406/2682 new file mode 100644 index 0000000..e333215 Binary files /dev/null and b/data/base/12406/2682 differ diff --git a/data/base/12406/2683 b/data/base/12406/2683 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2683 differ diff --git a/data/base/12406/2684 b/data/base/12406/2684 new file mode 100644 index 0000000..15f2d21 Binary files /dev/null and b/data/base/12406/2684 differ diff --git a/data/base/12406/2685 b/data/base/12406/2685 new file mode 100644 index 0000000..8e5b9dd Binary files /dev/null and b/data/base/12406/2685 differ diff --git a/data/base/12406/2686 b/data/base/12406/2686 new file mode 100644 index 0000000..3279a51 Binary files /dev/null and b/data/base/12406/2686 differ diff --git a/data/base/12406/2687 b/data/base/12406/2687 new file mode 100644 index 0000000..17e2305 Binary files /dev/null and b/data/base/12406/2687 differ diff --git a/data/base/12406/2688 b/data/base/12406/2688 new file mode 100644 index 0000000..aae5004 Binary files /dev/null and b/data/base/12406/2688 differ diff --git a/data/base/12406/2689 b/data/base/12406/2689 new file mode 100644 index 0000000..801bab2 Binary files /dev/null and b/data/base/12406/2689 differ diff --git a/data/base/12406/2690 b/data/base/12406/2690 new file mode 100644 index 0000000..0eab5c2 Binary files /dev/null and b/data/base/12406/2690 differ diff --git a/data/base/12406/2691 b/data/base/12406/2691 new file mode 100644 index 0000000..0eee67a Binary files /dev/null and b/data/base/12406/2691 differ diff --git a/data/base/12406/2692 b/data/base/12406/2692 new file mode 100644 index 0000000..eb49372 Binary files /dev/null and b/data/base/12406/2692 differ diff --git a/data/base/12406/2693 b/data/base/12406/2693 new file mode 100644 index 0000000..98ddf04 Binary files /dev/null and b/data/base/12406/2693 differ diff --git a/data/base/12406/2696 b/data/base/12406/2696 new file mode 100644 index 0000000..d0945b9 Binary files /dev/null and b/data/base/12406/2696 differ diff --git a/data/base/12406/2699 b/data/base/12406/2699 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2699 differ diff --git a/data/base/12406/2701 b/data/base/12406/2701 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2701 differ diff --git a/data/base/12406/2702 b/data/base/12406/2702 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2702 differ diff --git a/data/base/12406/2703 b/data/base/12406/2703 new file mode 100644 index 0000000..f601911 Binary files /dev/null and b/data/base/12406/2703 differ diff --git a/data/base/12406/2704 b/data/base/12406/2704 new file mode 100644 index 0000000..6c44706 Binary files /dev/null and b/data/base/12406/2704 differ diff --git a/data/base/12406/2753 b/data/base/12406/2753 new file mode 100644 index 0000000..bec6fa9 Binary files /dev/null and b/data/base/12406/2753 differ diff --git a/data/base/12406/2753_fsm b/data/base/12406/2753_fsm new file mode 100644 index 0000000..e8403db Binary files /dev/null and b/data/base/12406/2753_fsm differ diff --git a/data/base/12406/2753_vm b/data/base/12406/2753_vm new file mode 100644 index 0000000..875c3e8 Binary files /dev/null and b/data/base/12406/2753_vm differ diff --git a/data/base/12406/2754 b/data/base/12406/2754 new file mode 100644 index 0000000..7e1726d Binary files /dev/null and b/data/base/12406/2754 differ diff --git a/data/base/12406/2755 b/data/base/12406/2755 new file mode 100644 index 0000000..1f20059 Binary files /dev/null and b/data/base/12406/2755 differ diff --git a/data/base/12406/2756 b/data/base/12406/2756 new file mode 100644 index 0000000..d211e46 Binary files /dev/null and b/data/base/12406/2756 differ diff --git a/data/base/12406/2757 b/data/base/12406/2757 new file mode 100644 index 0000000..8bd7505 Binary files /dev/null and b/data/base/12406/2757 differ diff --git a/data/base/12406/2830 b/data/base/12406/2830 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2830_vm b/data/base/12406/2830_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2831 b/data/base/12406/2831 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2831 differ diff --git a/data/base/12406/2832 b/data/base/12406/2832 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2832_vm b/data/base/12406/2832_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2833 b/data/base/12406/2833 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2833 differ diff --git a/data/base/12406/2834 b/data/base/12406/2834 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2834_vm b/data/base/12406/2834_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2835 b/data/base/12406/2835 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2835 differ diff --git a/data/base/12406/2836 b/data/base/12406/2836 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2836_vm b/data/base/12406/2836_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2837 b/data/base/12406/2837 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2837 differ diff --git a/data/base/12406/2838 b/data/base/12406/2838 new file mode 100644 index 0000000..4c2ae1d Binary files /dev/null and b/data/base/12406/2838 differ diff --git a/data/base/12406/2838_fsm b/data/base/12406/2838_fsm new file mode 100644 index 0000000..c2f0170 Binary files /dev/null and b/data/base/12406/2838_fsm differ diff --git a/data/base/12406/2838_vm b/data/base/12406/2838_vm new file mode 100644 index 0000000..606fd5a Binary files /dev/null and b/data/base/12406/2838_vm differ diff --git a/data/base/12406/2839 b/data/base/12406/2839 new file mode 100644 index 0000000..6faa51c Binary files /dev/null and b/data/base/12406/2839 differ diff --git a/data/base/12406/2840 b/data/base/12406/2840 new file mode 100644 index 0000000..87b447a Binary files /dev/null and b/data/base/12406/2840 differ diff --git a/data/base/12406/2840_fsm b/data/base/12406/2840_fsm new file mode 100644 index 0000000..e1d388f Binary files /dev/null and b/data/base/12406/2840_fsm differ diff --git a/data/base/12406/2840_vm b/data/base/12406/2840_vm new file mode 100644 index 0000000..de7b7de Binary files /dev/null and b/data/base/12406/2840_vm differ diff --git a/data/base/12406/2841 b/data/base/12406/2841 new file mode 100644 index 0000000..627f963 Binary files /dev/null and b/data/base/12406/2841 differ diff --git a/data/base/12406/2995 b/data/base/12406/2995 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2995_vm b/data/base/12406/2995_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/2996 b/data/base/12406/2996 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/2996 differ diff --git a/data/base/12406/3079 b/data/base/12406/3079 new file mode 100644 index 0000000..4c96adb Binary files /dev/null and b/data/base/12406/3079 differ diff --git a/data/base/12406/3079_fsm b/data/base/12406/3079_fsm new file mode 100644 index 0000000..7732d22 Binary files /dev/null and b/data/base/12406/3079_fsm differ diff --git a/data/base/12406/3079_vm b/data/base/12406/3079_vm new file mode 100644 index 0000000..311cfbf Binary files /dev/null and b/data/base/12406/3079_vm differ diff --git a/data/base/12406/3080 b/data/base/12406/3080 new file mode 100644 index 0000000..34a5590 Binary files /dev/null and b/data/base/12406/3080 differ diff --git a/data/base/12406/3081 b/data/base/12406/3081 new file mode 100644 index 0000000..ffbfd27 Binary files /dev/null and b/data/base/12406/3081 differ diff --git a/data/base/12406/3085 b/data/base/12406/3085 new file mode 100644 index 0000000..5fd5684 Binary files /dev/null and b/data/base/12406/3085 differ diff --git a/data/base/12406/3118 b/data/base/12406/3118 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3118_vm b/data/base/12406/3118_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3119 b/data/base/12406/3119 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3119 differ diff --git a/data/base/12406/3164 b/data/base/12406/3164 new file mode 100644 index 0000000..581480f Binary files /dev/null and b/data/base/12406/3164 differ diff --git a/data/base/12406/3256 b/data/base/12406/3256 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3256_vm b/data/base/12406/3256_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3257 b/data/base/12406/3257 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3257 differ diff --git a/data/base/12406/3258 b/data/base/12406/3258 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3258 differ diff --git a/data/base/12406/3394 b/data/base/12406/3394 new file mode 100644 index 0000000..85045b6 Binary files /dev/null and b/data/base/12406/3394 differ diff --git a/data/base/12406/3394_fsm b/data/base/12406/3394_fsm new file mode 100644 index 0000000..b0cde0f Binary files /dev/null and b/data/base/12406/3394_fsm differ diff --git a/data/base/12406/3394_vm b/data/base/12406/3394_vm new file mode 100644 index 0000000..8e9dd93 Binary files /dev/null and b/data/base/12406/3394_vm differ diff --git a/data/base/12406/3395 b/data/base/12406/3395 new file mode 100644 index 0000000..4cb7af3 Binary files /dev/null and b/data/base/12406/3395 differ diff --git a/data/base/12406/3455 b/data/base/12406/3455 new file mode 100644 index 0000000..efdb287 Binary files /dev/null and b/data/base/12406/3455 differ diff --git a/data/base/12406/3456 b/data/base/12406/3456 new file mode 100644 index 0000000..ce3d787 Binary files /dev/null and b/data/base/12406/3456 differ diff --git a/data/base/12406/3456_fsm b/data/base/12406/3456_fsm new file mode 100644 index 0000000..d7469db Binary files /dev/null and b/data/base/12406/3456_fsm differ diff --git a/data/base/12406/3456_vm b/data/base/12406/3456_vm new file mode 100644 index 0000000..deb5f8b Binary files /dev/null and b/data/base/12406/3456_vm differ diff --git a/data/base/12406/3466 b/data/base/12406/3466 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3466_vm b/data/base/12406/3466_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3467 b/data/base/12406/3467 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3467 differ diff --git a/data/base/12406/3468 b/data/base/12406/3468 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3468 differ diff --git a/data/base/12406/3501 b/data/base/12406/3501 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3501_vm b/data/base/12406/3501_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3502 b/data/base/12406/3502 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3502 differ diff --git a/data/base/12406/3503 b/data/base/12406/3503 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3503 differ diff --git a/data/base/12406/3534 b/data/base/12406/3534 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3534 differ diff --git a/data/base/12406/3541 b/data/base/12406/3541 new file mode 100644 index 0000000..ad69913 Binary files /dev/null and b/data/base/12406/3541 differ diff --git a/data/base/12406/3541_fsm b/data/base/12406/3541_fsm new file mode 100644 index 0000000..62f0156 Binary files /dev/null and b/data/base/12406/3541_fsm differ diff --git a/data/base/12406/3541_vm b/data/base/12406/3541_vm new file mode 100644 index 0000000..5760fba Binary files /dev/null and b/data/base/12406/3541_vm differ diff --git a/data/base/12406/3542 b/data/base/12406/3542 new file mode 100644 index 0000000..aad1202 Binary files /dev/null and b/data/base/12406/3542 differ diff --git a/data/base/12406/3574 b/data/base/12406/3574 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3574 differ diff --git a/data/base/12406/3575 b/data/base/12406/3575 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3575 differ diff --git a/data/base/12406/3576 b/data/base/12406/3576 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3576_vm b/data/base/12406/3576_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3596 b/data/base/12406/3596 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3596_vm b/data/base/12406/3596_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3597 b/data/base/12406/3597 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3597 differ diff --git a/data/base/12406/3598 b/data/base/12406/3598 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3598_vm b/data/base/12406/3598_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/3599 b/data/base/12406/3599 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/3599 differ diff --git a/data/base/12406/3600 b/data/base/12406/3600 new file mode 100644 index 0000000..6a1944f Binary files /dev/null and b/data/base/12406/3600 differ diff --git a/data/base/12406/3600_fsm b/data/base/12406/3600_fsm new file mode 100644 index 0000000..ffd4b15 Binary files /dev/null and b/data/base/12406/3600_fsm differ diff --git a/data/base/12406/3600_vm b/data/base/12406/3600_vm new file mode 100644 index 0000000..884f674 Binary files /dev/null and b/data/base/12406/3600_vm differ diff --git a/data/base/12406/3601 b/data/base/12406/3601 new file mode 100644 index 0000000..065e4e1 Binary files /dev/null and b/data/base/12406/3601 differ diff --git a/data/base/12406/3601_fsm b/data/base/12406/3601_fsm new file mode 100644 index 0000000..7732d22 Binary files /dev/null and b/data/base/12406/3601_fsm differ diff --git a/data/base/12406/3601_vm b/data/base/12406/3601_vm new file mode 100644 index 0000000..53829d3 Binary files /dev/null and b/data/base/12406/3601_vm differ diff --git a/data/base/12406/3602 b/data/base/12406/3602 new file mode 100644 index 0000000..b135a1a Binary files /dev/null and b/data/base/12406/3602 differ diff --git a/data/base/12406/3602_fsm b/data/base/12406/3602_fsm new file mode 100644 index 0000000..7cbf834 Binary files /dev/null and b/data/base/12406/3602_fsm differ diff --git a/data/base/12406/3602_vm b/data/base/12406/3602_vm new file mode 100644 index 0000000..e14dc46 Binary files /dev/null and b/data/base/12406/3602_vm differ diff --git a/data/base/12406/3603 b/data/base/12406/3603 new file mode 100644 index 0000000..520bbaa Binary files /dev/null and b/data/base/12406/3603 differ diff --git a/data/base/12406/3603_fsm b/data/base/12406/3603_fsm new file mode 100644 index 0000000..6d00d68 Binary files /dev/null and b/data/base/12406/3603_fsm differ diff --git a/data/base/12406/3603_vm b/data/base/12406/3603_vm new file mode 100644 index 0000000..f1b0906 Binary files /dev/null and b/data/base/12406/3603_vm differ diff --git a/data/base/12406/3604 b/data/base/12406/3604 new file mode 100644 index 0000000..d883ba6 Binary files /dev/null and b/data/base/12406/3604 differ diff --git a/data/base/12406/3605 b/data/base/12406/3605 new file mode 100644 index 0000000..17069a0 Binary files /dev/null and b/data/base/12406/3605 differ diff --git a/data/base/12406/3606 b/data/base/12406/3606 new file mode 100644 index 0000000..89cc066 Binary files /dev/null and b/data/base/12406/3606 differ diff --git a/data/base/12406/3607 b/data/base/12406/3607 new file mode 100644 index 0000000..c5209f0 Binary files /dev/null and b/data/base/12406/3607 differ diff --git a/data/base/12406/3608 b/data/base/12406/3608 new file mode 100644 index 0000000..8966cc3 Binary files /dev/null and b/data/base/12406/3608 differ diff --git a/data/base/12406/3609 b/data/base/12406/3609 new file mode 100644 index 0000000..e491b31 Binary files /dev/null and b/data/base/12406/3609 differ diff --git a/data/base/12406/3712 b/data/base/12406/3712 new file mode 100644 index 0000000..bac4859 Binary files /dev/null and b/data/base/12406/3712 differ diff --git a/data/base/12406/3764 b/data/base/12406/3764 new file mode 100644 index 0000000..1bcd058 Binary files /dev/null and b/data/base/12406/3764 differ diff --git a/data/base/12406/3764_fsm b/data/base/12406/3764_fsm new file mode 100644 index 0000000..d041693 Binary files /dev/null and b/data/base/12406/3764_fsm differ diff --git a/data/base/12406/3764_vm b/data/base/12406/3764_vm new file mode 100644 index 0000000..d34e273 Binary files /dev/null and b/data/base/12406/3764_vm differ diff --git a/data/base/12406/3766 b/data/base/12406/3766 new file mode 100644 index 0000000..5bc8fb7 Binary files /dev/null and b/data/base/12406/3766 differ diff --git a/data/base/12406/3767 b/data/base/12406/3767 new file mode 100644 index 0000000..0a55910 Binary files /dev/null and b/data/base/12406/3767 differ diff --git a/data/base/12406/548 b/data/base/12406/548 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/548 differ diff --git a/data/base/12406/549 b/data/base/12406/549 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/549 differ diff --git a/data/base/12406/826 b/data/base/12406/826 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/826_vm b/data/base/12406/826_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12406/827 b/data/base/12406/827 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/827 differ diff --git a/data/base/12406/828 b/data/base/12406/828 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12406/828 differ diff --git a/data/base/12406/PG_VERSION b/data/base/12406/PG_VERSION new file mode 100644 index 0000000..c026ac8 --- /dev/null +++ b/data/base/12406/PG_VERSION @@ -0,0 +1 @@ +9.6 diff --git a/data/base/12406/pg_filenode.map b/data/base/12406/pg_filenode.map new file mode 100644 index 0000000..428c97e Binary files /dev/null and b/data/base/12406/pg_filenode.map differ diff --git a/data/base/12407/112 b/data/base/12407/112 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/112 differ diff --git a/data/base/12407/113 b/data/base/12407/113 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/113 differ diff --git a/data/base/12407/12242 b/data/base/12407/12242 new file mode 100644 index 0000000..e3202ef Binary files /dev/null and b/data/base/12407/12242 differ diff --git a/data/base/12407/12242_fsm b/data/base/12407/12242_fsm new file mode 100644 index 0000000..7658735 Binary files /dev/null and b/data/base/12407/12242_fsm differ diff --git a/data/base/12407/12242_vm b/data/base/12407/12242_vm new file mode 100644 index 0000000..1931c13 Binary files /dev/null and b/data/base/12407/12242_vm differ diff --git a/data/base/12407/12244 b/data/base/12407/12244 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/12246 b/data/base/12407/12246 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/12246 differ diff --git a/data/base/12407/12247 b/data/base/12407/12247 new file mode 100644 index 0000000..a2db1a1 Binary files /dev/null and b/data/base/12407/12247 differ diff --git a/data/base/12407/12247_fsm b/data/base/12407/12247_fsm new file mode 100644 index 0000000..ce7c26e Binary files /dev/null and b/data/base/12407/12247_fsm differ diff --git a/data/base/12407/12247_vm b/data/base/12407/12247_vm new file mode 100644 index 0000000..bb406d1 Binary files /dev/null and b/data/base/12407/12247_vm differ diff --git a/data/base/12407/12249 b/data/base/12407/12249 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/12251 b/data/base/12407/12251 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/12251 differ diff --git a/data/base/12407/12252 b/data/base/12407/12252 new file mode 100644 index 0000000..46a5d07 Binary files /dev/null and b/data/base/12407/12252 differ diff --git a/data/base/12407/12252_fsm b/data/base/12407/12252_fsm new file mode 100644 index 0000000..98dc620 Binary files /dev/null and b/data/base/12407/12252_fsm differ diff --git a/data/base/12407/12252_vm b/data/base/12407/12252_vm new file mode 100644 index 0000000..21fc85a Binary files /dev/null and b/data/base/12407/12252_vm differ diff --git a/data/base/12407/12254 b/data/base/12407/12254 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/12256 b/data/base/12407/12256 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/12256 differ diff --git a/data/base/12407/12257 b/data/base/12407/12257 new file mode 100644 index 0000000..de0cda4 Binary files /dev/null and b/data/base/12407/12257 differ diff --git a/data/base/12407/12257_fsm b/data/base/12407/12257_fsm new file mode 100644 index 0000000..f8a0e25 Binary files /dev/null and b/data/base/12407/12257_fsm differ diff --git a/data/base/12407/12257_vm b/data/base/12407/12257_vm new file mode 100644 index 0000000..1f7d263 Binary files /dev/null and b/data/base/12407/12257_vm differ diff --git a/data/base/12407/12259 b/data/base/12407/12259 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/12261 b/data/base/12407/12261 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/12261 differ diff --git a/data/base/12407/12262 b/data/base/12407/12262 new file mode 100644 index 0000000..1f1e925 Binary files /dev/null and b/data/base/12407/12262 differ diff --git a/data/base/12407/12262_fsm b/data/base/12407/12262_fsm new file mode 100644 index 0000000..ecbfaee Binary files /dev/null and b/data/base/12407/12262_fsm differ diff --git a/data/base/12407/12262_vm b/data/base/12407/12262_vm new file mode 100644 index 0000000..346c620 Binary files /dev/null and b/data/base/12407/12262_vm differ diff --git a/data/base/12407/12264 b/data/base/12407/12264 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/12266 b/data/base/12407/12266 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/12266 differ diff --git a/data/base/12407/12267 b/data/base/12407/12267 new file mode 100644 index 0000000..8b140bf Binary files /dev/null and b/data/base/12407/12267 differ diff --git a/data/base/12407/12267_fsm b/data/base/12407/12267_fsm new file mode 100644 index 0000000..a836ddf Binary files /dev/null and b/data/base/12407/12267_fsm differ diff --git a/data/base/12407/12267_vm b/data/base/12407/12267_vm new file mode 100644 index 0000000..5d9b385 Binary files /dev/null and b/data/base/12407/12267_vm differ diff --git a/data/base/12407/12269 b/data/base/12407/12269 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/12271 b/data/base/12407/12271 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/12271 differ diff --git a/data/base/12407/12272 b/data/base/12407/12272 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/12274 b/data/base/12407/12274 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/12276 b/data/base/12407/12276 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/12276 differ diff --git a/data/base/12407/1247 b/data/base/12407/1247 new file mode 100644 index 0000000..f6b4c3d Binary files /dev/null and b/data/base/12407/1247 differ diff --git a/data/base/12407/1247_fsm b/data/base/12407/1247_fsm new file mode 100644 index 0000000..da24b40 Binary files /dev/null and b/data/base/12407/1247_fsm differ diff --git a/data/base/12407/1247_vm b/data/base/12407/1247_vm new file mode 100644 index 0000000..09d86e6 Binary files /dev/null and b/data/base/12407/1247_vm differ diff --git a/data/base/12407/1249 b/data/base/12407/1249 new file mode 100644 index 0000000..bdaa22e Binary files /dev/null and b/data/base/12407/1249 differ diff --git a/data/base/12407/1249_fsm b/data/base/12407/1249_fsm new file mode 100644 index 0000000..38f7abb Binary files /dev/null and b/data/base/12407/1249_fsm differ diff --git a/data/base/12407/1249_vm b/data/base/12407/1249_vm new file mode 100644 index 0000000..15efa73 Binary files /dev/null and b/data/base/12407/1249_vm differ diff --git a/data/base/12407/1255 b/data/base/12407/1255 new file mode 100644 index 0000000..26eba8f Binary files /dev/null and b/data/base/12407/1255 differ diff --git a/data/base/12407/1255_fsm b/data/base/12407/1255_fsm new file mode 100644 index 0000000..17a1a3f Binary files /dev/null and b/data/base/12407/1255_fsm differ diff --git a/data/base/12407/1255_vm b/data/base/12407/1255_vm new file mode 100644 index 0000000..4bc9d69 Binary files /dev/null and b/data/base/12407/1255_vm differ diff --git a/data/base/12407/1259 b/data/base/12407/1259 new file mode 100644 index 0000000..d96fb72 Binary files /dev/null and b/data/base/12407/1259 differ diff --git a/data/base/12407/1259_fsm b/data/base/12407/1259_fsm new file mode 100644 index 0000000..ded84fe Binary files /dev/null and b/data/base/12407/1259_fsm differ diff --git a/data/base/12407/1259_vm b/data/base/12407/1259_vm new file mode 100644 index 0000000..fcf77a0 Binary files /dev/null and b/data/base/12407/1259_vm differ diff --git a/data/base/12407/1417 b/data/base/12407/1417 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/1417_vm b/data/base/12407/1417_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/1418 b/data/base/12407/1418 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/1418_vm b/data/base/12407/1418_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/174 b/data/base/12407/174 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/174 differ diff --git a/data/base/12407/175 b/data/base/12407/175 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/175 differ diff --git a/data/base/12407/2187 b/data/base/12407/2187 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2187 differ diff --git a/data/base/12407/2328 b/data/base/12407/2328 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2328_vm b/data/base/12407/2328_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2336 b/data/base/12407/2336 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2336_vm b/data/base/12407/2336_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2337 b/data/base/12407/2337 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2337 differ diff --git a/data/base/12407/2600 b/data/base/12407/2600 new file mode 100644 index 0000000..980d98e Binary files /dev/null and b/data/base/12407/2600 differ diff --git a/data/base/12407/2600_fsm b/data/base/12407/2600_fsm new file mode 100644 index 0000000..e63ffab Binary files /dev/null and b/data/base/12407/2600_fsm differ diff --git a/data/base/12407/2600_vm b/data/base/12407/2600_vm new file mode 100644 index 0000000..092d0cd Binary files /dev/null and b/data/base/12407/2600_vm differ diff --git a/data/base/12407/2601 b/data/base/12407/2601 new file mode 100644 index 0000000..1d44fa5 Binary files /dev/null and b/data/base/12407/2601 differ diff --git a/data/base/12407/2601_fsm b/data/base/12407/2601_fsm new file mode 100644 index 0000000..0908076 Binary files /dev/null and b/data/base/12407/2601_fsm differ diff --git a/data/base/12407/2601_vm b/data/base/12407/2601_vm new file mode 100644 index 0000000..0c8d813 Binary files /dev/null and b/data/base/12407/2601_vm differ diff --git a/data/base/12407/2602 b/data/base/12407/2602 new file mode 100644 index 0000000..f9ceea7 Binary files /dev/null and b/data/base/12407/2602 differ diff --git a/data/base/12407/2602_fsm b/data/base/12407/2602_fsm new file mode 100644 index 0000000..d0a4a07 Binary files /dev/null and b/data/base/12407/2602_fsm differ diff --git a/data/base/12407/2602_vm b/data/base/12407/2602_vm new file mode 100644 index 0000000..2b36504 Binary files /dev/null and b/data/base/12407/2602_vm differ diff --git a/data/base/12407/2603 b/data/base/12407/2603 new file mode 100644 index 0000000..05e95f5 Binary files /dev/null and b/data/base/12407/2603 differ diff --git a/data/base/12407/2603_fsm b/data/base/12407/2603_fsm new file mode 100644 index 0000000..8ddf62f Binary files /dev/null and b/data/base/12407/2603_fsm differ diff --git a/data/base/12407/2603_vm b/data/base/12407/2603_vm new file mode 100644 index 0000000..4ca4ef5 Binary files /dev/null and b/data/base/12407/2603_vm differ diff --git a/data/base/12407/2604 b/data/base/12407/2604 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2604_vm b/data/base/12407/2604_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2605 b/data/base/12407/2605 new file mode 100644 index 0000000..a9f2997 Binary files /dev/null and b/data/base/12407/2605 differ diff --git a/data/base/12407/2605_fsm b/data/base/12407/2605_fsm new file mode 100644 index 0000000..05d7313 Binary files /dev/null and b/data/base/12407/2605_fsm differ diff --git a/data/base/12407/2605_vm b/data/base/12407/2605_vm new file mode 100644 index 0000000..dd51e5c Binary files /dev/null and b/data/base/12407/2605_vm differ diff --git a/data/base/12407/2606 b/data/base/12407/2606 new file mode 100644 index 0000000..b35cb2e Binary files /dev/null and b/data/base/12407/2606 differ diff --git a/data/base/12407/2606_fsm b/data/base/12407/2606_fsm new file mode 100644 index 0000000..d37e4dd Binary files /dev/null and b/data/base/12407/2606_fsm differ diff --git a/data/base/12407/2606_vm b/data/base/12407/2606_vm new file mode 100644 index 0000000..6dcfa35 Binary files /dev/null and b/data/base/12407/2606_vm differ diff --git a/data/base/12407/2607 b/data/base/12407/2607 new file mode 100644 index 0000000..1ec77d5 Binary files /dev/null and b/data/base/12407/2607 differ diff --git a/data/base/12407/2607_fsm b/data/base/12407/2607_fsm new file mode 100644 index 0000000..5b066f1 Binary files /dev/null and b/data/base/12407/2607_fsm differ diff --git a/data/base/12407/2607_vm b/data/base/12407/2607_vm new file mode 100644 index 0000000..4ed3b2c Binary files /dev/null and b/data/base/12407/2607_vm differ diff --git a/data/base/12407/2608 b/data/base/12407/2608 new file mode 100644 index 0000000..ef88f0c Binary files /dev/null and b/data/base/12407/2608 differ diff --git a/data/base/12407/2608_fsm b/data/base/12407/2608_fsm new file mode 100644 index 0000000..b5fe460 Binary files /dev/null and b/data/base/12407/2608_fsm differ diff --git a/data/base/12407/2608_vm b/data/base/12407/2608_vm new file mode 100644 index 0000000..14a96f4 Binary files /dev/null and b/data/base/12407/2608_vm differ diff --git a/data/base/12407/2609 b/data/base/12407/2609 new file mode 100644 index 0000000..7cbbe41 Binary files /dev/null and b/data/base/12407/2609 differ diff --git a/data/base/12407/2609_fsm b/data/base/12407/2609_fsm new file mode 100644 index 0000000..28a9bbf Binary files /dev/null and b/data/base/12407/2609_fsm differ diff --git a/data/base/12407/2609_vm b/data/base/12407/2609_vm new file mode 100644 index 0000000..08e91a6 Binary files /dev/null and b/data/base/12407/2609_vm differ diff --git a/data/base/12407/2610 b/data/base/12407/2610 new file mode 100644 index 0000000..e14edc3 Binary files /dev/null and b/data/base/12407/2610 differ diff --git a/data/base/12407/2610_fsm b/data/base/12407/2610_fsm new file mode 100644 index 0000000..9d98308 Binary files /dev/null and b/data/base/12407/2610_fsm differ diff --git a/data/base/12407/2610_vm b/data/base/12407/2610_vm new file mode 100644 index 0000000..30c5073 Binary files /dev/null and b/data/base/12407/2610_vm differ diff --git a/data/base/12407/2611 b/data/base/12407/2611 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2611_vm b/data/base/12407/2611_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2612 b/data/base/12407/2612 new file mode 100644 index 0000000..a884a66 Binary files /dev/null and b/data/base/12407/2612 differ diff --git a/data/base/12407/2612_fsm b/data/base/12407/2612_fsm new file mode 100644 index 0000000..877976a Binary files /dev/null and b/data/base/12407/2612_fsm differ diff --git a/data/base/12407/2612_vm b/data/base/12407/2612_vm new file mode 100644 index 0000000..5837065 Binary files /dev/null and b/data/base/12407/2612_vm differ diff --git a/data/base/12407/2613 b/data/base/12407/2613 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2613_vm b/data/base/12407/2613_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2615 b/data/base/12407/2615 new file mode 100644 index 0000000..8f9b5f7 Binary files /dev/null and b/data/base/12407/2615 differ diff --git a/data/base/12407/2615_fsm b/data/base/12407/2615_fsm new file mode 100644 index 0000000..948882c Binary files /dev/null and b/data/base/12407/2615_fsm differ diff --git a/data/base/12407/2615_vm b/data/base/12407/2615_vm new file mode 100644 index 0000000..bbebcd7 Binary files /dev/null and b/data/base/12407/2615_vm differ diff --git a/data/base/12407/2616 b/data/base/12407/2616 new file mode 100644 index 0000000..dd16ef9 Binary files /dev/null and b/data/base/12407/2616 differ diff --git a/data/base/12407/2616_fsm b/data/base/12407/2616_fsm new file mode 100644 index 0000000..671e592 Binary files /dev/null and b/data/base/12407/2616_fsm differ diff --git a/data/base/12407/2616_vm b/data/base/12407/2616_vm new file mode 100644 index 0000000..c3ac9fa Binary files /dev/null and b/data/base/12407/2616_vm differ diff --git a/data/base/12407/2617 b/data/base/12407/2617 new file mode 100644 index 0000000..814c637 Binary files /dev/null and b/data/base/12407/2617 differ diff --git a/data/base/12407/2617_fsm b/data/base/12407/2617_fsm new file mode 100644 index 0000000..90baa94 Binary files /dev/null and b/data/base/12407/2617_fsm differ diff --git a/data/base/12407/2617_vm b/data/base/12407/2617_vm new file mode 100644 index 0000000..b8a7aec Binary files /dev/null and b/data/base/12407/2617_vm differ diff --git a/data/base/12407/2618 b/data/base/12407/2618 new file mode 100644 index 0000000..4e9dc18 Binary files /dev/null and b/data/base/12407/2618 differ diff --git a/data/base/12407/2618_fsm b/data/base/12407/2618_fsm new file mode 100644 index 0000000..bd14159 Binary files /dev/null and b/data/base/12407/2618_fsm differ diff --git a/data/base/12407/2618_vm b/data/base/12407/2618_vm new file mode 100644 index 0000000..92befd7 Binary files /dev/null and b/data/base/12407/2618_vm differ diff --git a/data/base/12407/2619 b/data/base/12407/2619 new file mode 100644 index 0000000..1ed9e96 Binary files /dev/null and b/data/base/12407/2619 differ diff --git a/data/base/12407/2619_fsm b/data/base/12407/2619_fsm new file mode 100644 index 0000000..c17b2c6 Binary files /dev/null and b/data/base/12407/2619_fsm differ diff --git a/data/base/12407/2619_vm b/data/base/12407/2619_vm new file mode 100644 index 0000000..5dfd707 Binary files /dev/null and b/data/base/12407/2619_vm differ diff --git a/data/base/12407/2620 b/data/base/12407/2620 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2620_vm b/data/base/12407/2620_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2650 b/data/base/12407/2650 new file mode 100644 index 0000000..bed34cb Binary files /dev/null and b/data/base/12407/2650 differ diff --git a/data/base/12407/2651 b/data/base/12407/2651 new file mode 100644 index 0000000..4b34967 Binary files /dev/null and b/data/base/12407/2651 differ diff --git a/data/base/12407/2652 b/data/base/12407/2652 new file mode 100644 index 0000000..ccb4c86 Binary files /dev/null and b/data/base/12407/2652 differ diff --git a/data/base/12407/2653 b/data/base/12407/2653 new file mode 100644 index 0000000..fbe21b4 Binary files /dev/null and b/data/base/12407/2653 differ diff --git a/data/base/12407/2654 b/data/base/12407/2654 new file mode 100644 index 0000000..b6973e3 Binary files /dev/null and b/data/base/12407/2654 differ diff --git a/data/base/12407/2655 b/data/base/12407/2655 new file mode 100644 index 0000000..5b2eb49 Binary files /dev/null and b/data/base/12407/2655 differ diff --git a/data/base/12407/2656 b/data/base/12407/2656 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2656 differ diff --git a/data/base/12407/2657 b/data/base/12407/2657 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2657 differ diff --git a/data/base/12407/2658 b/data/base/12407/2658 new file mode 100644 index 0000000..6e34dce Binary files /dev/null and b/data/base/12407/2658 differ diff --git a/data/base/12407/2659 b/data/base/12407/2659 new file mode 100644 index 0000000..718bd08 Binary files /dev/null and b/data/base/12407/2659 differ diff --git a/data/base/12407/2660 b/data/base/12407/2660 new file mode 100644 index 0000000..2dd3d7d Binary files /dev/null and b/data/base/12407/2660 differ diff --git a/data/base/12407/2661 b/data/base/12407/2661 new file mode 100644 index 0000000..781cf2a Binary files /dev/null and b/data/base/12407/2661 differ diff --git a/data/base/12407/2662 b/data/base/12407/2662 new file mode 100644 index 0000000..eb31468 Binary files /dev/null and b/data/base/12407/2662 differ diff --git a/data/base/12407/2663 b/data/base/12407/2663 new file mode 100644 index 0000000..7da4d5c Binary files /dev/null and b/data/base/12407/2663 differ diff --git a/data/base/12407/2664 b/data/base/12407/2664 new file mode 100644 index 0000000..16c9525 Binary files /dev/null and b/data/base/12407/2664 differ diff --git a/data/base/12407/2665 b/data/base/12407/2665 new file mode 100644 index 0000000..c083a81 Binary files /dev/null and b/data/base/12407/2665 differ diff --git a/data/base/12407/2666 b/data/base/12407/2666 new file mode 100644 index 0000000..af3913a Binary files /dev/null and b/data/base/12407/2666 differ diff --git a/data/base/12407/2667 b/data/base/12407/2667 new file mode 100644 index 0000000..60196dc Binary files /dev/null and b/data/base/12407/2667 differ diff --git a/data/base/12407/2668 b/data/base/12407/2668 new file mode 100644 index 0000000..1a8334e Binary files /dev/null and b/data/base/12407/2668 differ diff --git a/data/base/12407/2669 b/data/base/12407/2669 new file mode 100644 index 0000000..ecdceeb Binary files /dev/null and b/data/base/12407/2669 differ diff --git a/data/base/12407/2670 b/data/base/12407/2670 new file mode 100644 index 0000000..7fb8be1 Binary files /dev/null and b/data/base/12407/2670 differ diff --git a/data/base/12407/2673 b/data/base/12407/2673 new file mode 100644 index 0000000..1f47c02 Binary files /dev/null and b/data/base/12407/2673 differ diff --git a/data/base/12407/2674 b/data/base/12407/2674 new file mode 100644 index 0000000..5b332da Binary files /dev/null and b/data/base/12407/2674 differ diff --git a/data/base/12407/2675 b/data/base/12407/2675 new file mode 100644 index 0000000..084f665 Binary files /dev/null and b/data/base/12407/2675 differ diff --git a/data/base/12407/2678 b/data/base/12407/2678 new file mode 100644 index 0000000..f1dba2e Binary files /dev/null and b/data/base/12407/2678 differ diff --git a/data/base/12407/2679 b/data/base/12407/2679 new file mode 100644 index 0000000..2063f1d Binary files /dev/null and b/data/base/12407/2679 differ diff --git a/data/base/12407/2680 b/data/base/12407/2680 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2680 differ diff --git a/data/base/12407/2681 b/data/base/12407/2681 new file mode 100644 index 0000000..0b9c07a Binary files /dev/null and b/data/base/12407/2681 differ diff --git a/data/base/12407/2682 b/data/base/12407/2682 new file mode 100644 index 0000000..e333215 Binary files /dev/null and b/data/base/12407/2682 differ diff --git a/data/base/12407/2683 b/data/base/12407/2683 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2683 differ diff --git a/data/base/12407/2684 b/data/base/12407/2684 new file mode 100644 index 0000000..15f2d21 Binary files /dev/null and b/data/base/12407/2684 differ diff --git a/data/base/12407/2685 b/data/base/12407/2685 new file mode 100644 index 0000000..8e5b9dd Binary files /dev/null and b/data/base/12407/2685 differ diff --git a/data/base/12407/2686 b/data/base/12407/2686 new file mode 100644 index 0000000..3279a51 Binary files /dev/null and b/data/base/12407/2686 differ diff --git a/data/base/12407/2687 b/data/base/12407/2687 new file mode 100644 index 0000000..17e2305 Binary files /dev/null and b/data/base/12407/2687 differ diff --git a/data/base/12407/2688 b/data/base/12407/2688 new file mode 100644 index 0000000..aae5004 Binary files /dev/null and b/data/base/12407/2688 differ diff --git a/data/base/12407/2689 b/data/base/12407/2689 new file mode 100644 index 0000000..801bab2 Binary files /dev/null and b/data/base/12407/2689 differ diff --git a/data/base/12407/2690 b/data/base/12407/2690 new file mode 100644 index 0000000..0eab5c2 Binary files /dev/null and b/data/base/12407/2690 differ diff --git a/data/base/12407/2691 b/data/base/12407/2691 new file mode 100644 index 0000000..0eee67a Binary files /dev/null and b/data/base/12407/2691 differ diff --git a/data/base/12407/2692 b/data/base/12407/2692 new file mode 100644 index 0000000..eb49372 Binary files /dev/null and b/data/base/12407/2692 differ diff --git a/data/base/12407/2693 b/data/base/12407/2693 new file mode 100644 index 0000000..98ddf04 Binary files /dev/null and b/data/base/12407/2693 differ diff --git a/data/base/12407/2696 b/data/base/12407/2696 new file mode 100644 index 0000000..d3c556a Binary files /dev/null and b/data/base/12407/2696 differ diff --git a/data/base/12407/2699 b/data/base/12407/2699 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2699 differ diff --git a/data/base/12407/2701 b/data/base/12407/2701 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2701 differ diff --git a/data/base/12407/2702 b/data/base/12407/2702 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2702 differ diff --git a/data/base/12407/2703 b/data/base/12407/2703 new file mode 100644 index 0000000..f601911 Binary files /dev/null and b/data/base/12407/2703 differ diff --git a/data/base/12407/2704 b/data/base/12407/2704 new file mode 100644 index 0000000..6c44706 Binary files /dev/null and b/data/base/12407/2704 differ diff --git a/data/base/12407/2753 b/data/base/12407/2753 new file mode 100644 index 0000000..bec6fa9 Binary files /dev/null and b/data/base/12407/2753 differ diff --git a/data/base/12407/2753_fsm b/data/base/12407/2753_fsm new file mode 100644 index 0000000..e8403db Binary files /dev/null and b/data/base/12407/2753_fsm differ diff --git a/data/base/12407/2753_vm b/data/base/12407/2753_vm new file mode 100644 index 0000000..875c3e8 Binary files /dev/null and b/data/base/12407/2753_vm differ diff --git a/data/base/12407/2754 b/data/base/12407/2754 new file mode 100644 index 0000000..7e1726d Binary files /dev/null and b/data/base/12407/2754 differ diff --git a/data/base/12407/2755 b/data/base/12407/2755 new file mode 100644 index 0000000..1f20059 Binary files /dev/null and b/data/base/12407/2755 differ diff --git a/data/base/12407/2756 b/data/base/12407/2756 new file mode 100644 index 0000000..d211e46 Binary files /dev/null and b/data/base/12407/2756 differ diff --git a/data/base/12407/2757 b/data/base/12407/2757 new file mode 100644 index 0000000..8bd7505 Binary files /dev/null and b/data/base/12407/2757 differ diff --git a/data/base/12407/2830 b/data/base/12407/2830 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2830_vm b/data/base/12407/2830_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2831 b/data/base/12407/2831 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2831 differ diff --git a/data/base/12407/2832 b/data/base/12407/2832 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2832_vm b/data/base/12407/2832_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2833 b/data/base/12407/2833 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2833 differ diff --git a/data/base/12407/2834 b/data/base/12407/2834 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2834_vm b/data/base/12407/2834_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2835 b/data/base/12407/2835 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2835 differ diff --git a/data/base/12407/2836 b/data/base/12407/2836 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2836_vm b/data/base/12407/2836_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2837 b/data/base/12407/2837 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2837 differ diff --git a/data/base/12407/2838 b/data/base/12407/2838 new file mode 100644 index 0000000..4c2ae1d Binary files /dev/null and b/data/base/12407/2838 differ diff --git a/data/base/12407/2838_fsm b/data/base/12407/2838_fsm new file mode 100644 index 0000000..c2f0170 Binary files /dev/null and b/data/base/12407/2838_fsm differ diff --git a/data/base/12407/2838_vm b/data/base/12407/2838_vm new file mode 100644 index 0000000..606fd5a Binary files /dev/null and b/data/base/12407/2838_vm differ diff --git a/data/base/12407/2839 b/data/base/12407/2839 new file mode 100644 index 0000000..6faa51c Binary files /dev/null and b/data/base/12407/2839 differ diff --git a/data/base/12407/2840 b/data/base/12407/2840 new file mode 100644 index 0000000..87b447a Binary files /dev/null and b/data/base/12407/2840 differ diff --git a/data/base/12407/2840_fsm b/data/base/12407/2840_fsm new file mode 100644 index 0000000..e1d388f Binary files /dev/null and b/data/base/12407/2840_fsm differ diff --git a/data/base/12407/2840_vm b/data/base/12407/2840_vm new file mode 100644 index 0000000..de7b7de Binary files /dev/null and b/data/base/12407/2840_vm differ diff --git a/data/base/12407/2841 b/data/base/12407/2841 new file mode 100644 index 0000000..627f963 Binary files /dev/null and b/data/base/12407/2841 differ diff --git a/data/base/12407/2995 b/data/base/12407/2995 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2995_vm b/data/base/12407/2995_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/2996 b/data/base/12407/2996 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/2996 differ diff --git a/data/base/12407/3079 b/data/base/12407/3079 new file mode 100644 index 0000000..4c96adb Binary files /dev/null and b/data/base/12407/3079 differ diff --git a/data/base/12407/3079_fsm b/data/base/12407/3079_fsm new file mode 100644 index 0000000..7732d22 Binary files /dev/null and b/data/base/12407/3079_fsm differ diff --git a/data/base/12407/3079_vm b/data/base/12407/3079_vm new file mode 100644 index 0000000..311cfbf Binary files /dev/null and b/data/base/12407/3079_vm differ diff --git a/data/base/12407/3080 b/data/base/12407/3080 new file mode 100644 index 0000000..34a5590 Binary files /dev/null and b/data/base/12407/3080 differ diff --git a/data/base/12407/3081 b/data/base/12407/3081 new file mode 100644 index 0000000..ffbfd27 Binary files /dev/null and b/data/base/12407/3081 differ diff --git a/data/base/12407/3085 b/data/base/12407/3085 new file mode 100644 index 0000000..5fd5684 Binary files /dev/null and b/data/base/12407/3085 differ diff --git a/data/base/12407/3118 b/data/base/12407/3118 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3118_vm b/data/base/12407/3118_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3119 b/data/base/12407/3119 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3119 differ diff --git a/data/base/12407/3164 b/data/base/12407/3164 new file mode 100644 index 0000000..581480f Binary files /dev/null and b/data/base/12407/3164 differ diff --git a/data/base/12407/3256 b/data/base/12407/3256 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3256_vm b/data/base/12407/3256_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3257 b/data/base/12407/3257 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3257 differ diff --git a/data/base/12407/3258 b/data/base/12407/3258 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3258 differ diff --git a/data/base/12407/3394 b/data/base/12407/3394 new file mode 100644 index 0000000..85045b6 Binary files /dev/null and b/data/base/12407/3394 differ diff --git a/data/base/12407/3394_fsm b/data/base/12407/3394_fsm new file mode 100644 index 0000000..b0cde0f Binary files /dev/null and b/data/base/12407/3394_fsm differ diff --git a/data/base/12407/3394_vm b/data/base/12407/3394_vm new file mode 100644 index 0000000..8e9dd93 Binary files /dev/null and b/data/base/12407/3394_vm differ diff --git a/data/base/12407/3395 b/data/base/12407/3395 new file mode 100644 index 0000000..4cb7af3 Binary files /dev/null and b/data/base/12407/3395 differ diff --git a/data/base/12407/3455 b/data/base/12407/3455 new file mode 100644 index 0000000..efdb287 Binary files /dev/null and b/data/base/12407/3455 differ diff --git a/data/base/12407/3456 b/data/base/12407/3456 new file mode 100644 index 0000000..ce3d787 Binary files /dev/null and b/data/base/12407/3456 differ diff --git a/data/base/12407/3456_fsm b/data/base/12407/3456_fsm new file mode 100644 index 0000000..d7469db Binary files /dev/null and b/data/base/12407/3456_fsm differ diff --git a/data/base/12407/3456_vm b/data/base/12407/3456_vm new file mode 100644 index 0000000..deb5f8b Binary files /dev/null and b/data/base/12407/3456_vm differ diff --git a/data/base/12407/3466 b/data/base/12407/3466 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3466_vm b/data/base/12407/3466_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3467 b/data/base/12407/3467 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3467 differ diff --git a/data/base/12407/3468 b/data/base/12407/3468 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3468 differ diff --git a/data/base/12407/3501 b/data/base/12407/3501 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3501_vm b/data/base/12407/3501_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3502 b/data/base/12407/3502 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3502 differ diff --git a/data/base/12407/3503 b/data/base/12407/3503 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3503 differ diff --git a/data/base/12407/3534 b/data/base/12407/3534 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3534 differ diff --git a/data/base/12407/3541 b/data/base/12407/3541 new file mode 100644 index 0000000..ad69913 Binary files /dev/null and b/data/base/12407/3541 differ diff --git a/data/base/12407/3541_fsm b/data/base/12407/3541_fsm new file mode 100644 index 0000000..62f0156 Binary files /dev/null and b/data/base/12407/3541_fsm differ diff --git a/data/base/12407/3541_vm b/data/base/12407/3541_vm new file mode 100644 index 0000000..5760fba Binary files /dev/null and b/data/base/12407/3541_vm differ diff --git a/data/base/12407/3542 b/data/base/12407/3542 new file mode 100644 index 0000000..aad1202 Binary files /dev/null and b/data/base/12407/3542 differ diff --git a/data/base/12407/3574 b/data/base/12407/3574 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3574 differ diff --git a/data/base/12407/3575 b/data/base/12407/3575 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3575 differ diff --git a/data/base/12407/3576 b/data/base/12407/3576 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3576_vm b/data/base/12407/3576_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3596 b/data/base/12407/3596 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3596_vm b/data/base/12407/3596_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3597 b/data/base/12407/3597 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3597 differ diff --git a/data/base/12407/3598 b/data/base/12407/3598 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3598_vm b/data/base/12407/3598_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/3599 b/data/base/12407/3599 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/3599 differ diff --git a/data/base/12407/3600 b/data/base/12407/3600 new file mode 100644 index 0000000..6a1944f Binary files /dev/null and b/data/base/12407/3600 differ diff --git a/data/base/12407/3600_fsm b/data/base/12407/3600_fsm new file mode 100644 index 0000000..ffd4b15 Binary files /dev/null and b/data/base/12407/3600_fsm differ diff --git a/data/base/12407/3600_vm b/data/base/12407/3600_vm new file mode 100644 index 0000000..884f674 Binary files /dev/null and b/data/base/12407/3600_vm differ diff --git a/data/base/12407/3601 b/data/base/12407/3601 new file mode 100644 index 0000000..065e4e1 Binary files /dev/null and b/data/base/12407/3601 differ diff --git a/data/base/12407/3601_fsm b/data/base/12407/3601_fsm new file mode 100644 index 0000000..7732d22 Binary files /dev/null and b/data/base/12407/3601_fsm differ diff --git a/data/base/12407/3601_vm b/data/base/12407/3601_vm new file mode 100644 index 0000000..53829d3 Binary files /dev/null and b/data/base/12407/3601_vm differ diff --git a/data/base/12407/3602 b/data/base/12407/3602 new file mode 100644 index 0000000..b135a1a Binary files /dev/null and b/data/base/12407/3602 differ diff --git a/data/base/12407/3602_fsm b/data/base/12407/3602_fsm new file mode 100644 index 0000000..7cbf834 Binary files /dev/null and b/data/base/12407/3602_fsm differ diff --git a/data/base/12407/3602_vm b/data/base/12407/3602_vm new file mode 100644 index 0000000..e14dc46 Binary files /dev/null and b/data/base/12407/3602_vm differ diff --git a/data/base/12407/3603 b/data/base/12407/3603 new file mode 100644 index 0000000..520bbaa Binary files /dev/null and b/data/base/12407/3603 differ diff --git a/data/base/12407/3603_fsm b/data/base/12407/3603_fsm new file mode 100644 index 0000000..6d00d68 Binary files /dev/null and b/data/base/12407/3603_fsm differ diff --git a/data/base/12407/3603_vm b/data/base/12407/3603_vm new file mode 100644 index 0000000..f1b0906 Binary files /dev/null and b/data/base/12407/3603_vm differ diff --git a/data/base/12407/3604 b/data/base/12407/3604 new file mode 100644 index 0000000..d883ba6 Binary files /dev/null and b/data/base/12407/3604 differ diff --git a/data/base/12407/3605 b/data/base/12407/3605 new file mode 100644 index 0000000..17069a0 Binary files /dev/null and b/data/base/12407/3605 differ diff --git a/data/base/12407/3606 b/data/base/12407/3606 new file mode 100644 index 0000000..89cc066 Binary files /dev/null and b/data/base/12407/3606 differ diff --git a/data/base/12407/3607 b/data/base/12407/3607 new file mode 100644 index 0000000..c5209f0 Binary files /dev/null and b/data/base/12407/3607 differ diff --git a/data/base/12407/3608 b/data/base/12407/3608 new file mode 100644 index 0000000..8966cc3 Binary files /dev/null and b/data/base/12407/3608 differ diff --git a/data/base/12407/3609 b/data/base/12407/3609 new file mode 100644 index 0000000..e491b31 Binary files /dev/null and b/data/base/12407/3609 differ diff --git a/data/base/12407/3712 b/data/base/12407/3712 new file mode 100644 index 0000000..bac4859 Binary files /dev/null and b/data/base/12407/3712 differ diff --git a/data/base/12407/3764 b/data/base/12407/3764 new file mode 100644 index 0000000..1bcd058 Binary files /dev/null and b/data/base/12407/3764 differ diff --git a/data/base/12407/3764_fsm b/data/base/12407/3764_fsm new file mode 100644 index 0000000..d041693 Binary files /dev/null and b/data/base/12407/3764_fsm differ diff --git a/data/base/12407/3764_vm b/data/base/12407/3764_vm new file mode 100644 index 0000000..d34e273 Binary files /dev/null and b/data/base/12407/3764_vm differ diff --git a/data/base/12407/3766 b/data/base/12407/3766 new file mode 100644 index 0000000..5bc8fb7 Binary files /dev/null and b/data/base/12407/3766 differ diff --git a/data/base/12407/3767 b/data/base/12407/3767 new file mode 100644 index 0000000..0a55910 Binary files /dev/null and b/data/base/12407/3767 differ diff --git a/data/base/12407/548 b/data/base/12407/548 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/548 differ diff --git a/data/base/12407/549 b/data/base/12407/549 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/549 differ diff --git a/data/base/12407/826 b/data/base/12407/826 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/826_vm b/data/base/12407/826_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/12407/827 b/data/base/12407/827 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/827 differ diff --git a/data/base/12407/828 b/data/base/12407/828 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/12407/828 differ diff --git a/data/base/12407/PG_VERSION b/data/base/12407/PG_VERSION new file mode 100644 index 0000000..c026ac8 --- /dev/null +++ b/data/base/12407/PG_VERSION @@ -0,0 +1 @@ +9.6 diff --git a/data/base/12407/pg_filenode.map b/data/base/12407/pg_filenode.map new file mode 100644 index 0000000..428c97e Binary files /dev/null and b/data/base/12407/pg_filenode.map differ diff --git a/data/base/12407/pg_internal.init b/data/base/12407/pg_internal.init new file mode 100644 index 0000000..3bfb580 Binary files /dev/null and b/data/base/12407/pg_internal.init differ diff --git a/data/base/16384/112 b/data/base/16384/112 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/112 differ diff --git a/data/base/16384/113 b/data/base/16384/113 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/113 differ diff --git a/data/base/16384/12242 b/data/base/16384/12242 new file mode 100644 index 0000000..e3202ef Binary files /dev/null and b/data/base/16384/12242 differ diff --git a/data/base/16384/12242_fsm b/data/base/16384/12242_fsm new file mode 100644 index 0000000..7658735 Binary files /dev/null and b/data/base/16384/12242_fsm differ diff --git a/data/base/16384/12242_vm b/data/base/16384/12242_vm new file mode 100644 index 0000000..1931c13 Binary files /dev/null and b/data/base/16384/12242_vm differ diff --git a/data/base/16384/12244 b/data/base/16384/12244 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/12246 b/data/base/16384/12246 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/12246 differ diff --git a/data/base/16384/12247 b/data/base/16384/12247 new file mode 100644 index 0000000..a2db1a1 Binary files /dev/null and b/data/base/16384/12247 differ diff --git a/data/base/16384/12247_fsm b/data/base/16384/12247_fsm new file mode 100644 index 0000000..ce7c26e Binary files /dev/null and b/data/base/16384/12247_fsm differ diff --git a/data/base/16384/12247_vm b/data/base/16384/12247_vm new file mode 100644 index 0000000..bb406d1 Binary files /dev/null and b/data/base/16384/12247_vm differ diff --git a/data/base/16384/12249 b/data/base/16384/12249 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/12251 b/data/base/16384/12251 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/12251 differ diff --git a/data/base/16384/12252 b/data/base/16384/12252 new file mode 100644 index 0000000..46a5d07 Binary files /dev/null and b/data/base/16384/12252 differ diff --git a/data/base/16384/12252_fsm b/data/base/16384/12252_fsm new file mode 100644 index 0000000..98dc620 Binary files /dev/null and b/data/base/16384/12252_fsm differ diff --git a/data/base/16384/12252_vm b/data/base/16384/12252_vm new file mode 100644 index 0000000..21fc85a Binary files /dev/null and b/data/base/16384/12252_vm differ diff --git a/data/base/16384/12254 b/data/base/16384/12254 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/12256 b/data/base/16384/12256 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/12256 differ diff --git a/data/base/16384/12257 b/data/base/16384/12257 new file mode 100644 index 0000000..de0cda4 Binary files /dev/null and b/data/base/16384/12257 differ diff --git a/data/base/16384/12257_fsm b/data/base/16384/12257_fsm new file mode 100644 index 0000000..f8a0e25 Binary files /dev/null and b/data/base/16384/12257_fsm differ diff --git a/data/base/16384/12257_vm b/data/base/16384/12257_vm new file mode 100644 index 0000000..1f7d263 Binary files /dev/null and b/data/base/16384/12257_vm differ diff --git a/data/base/16384/12259 b/data/base/16384/12259 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/12261 b/data/base/16384/12261 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/12261 differ diff --git a/data/base/16384/12262 b/data/base/16384/12262 new file mode 100644 index 0000000..1f1e925 Binary files /dev/null and b/data/base/16384/12262 differ diff --git a/data/base/16384/12262_fsm b/data/base/16384/12262_fsm new file mode 100644 index 0000000..ecbfaee Binary files /dev/null and b/data/base/16384/12262_fsm differ diff --git a/data/base/16384/12262_vm b/data/base/16384/12262_vm new file mode 100644 index 0000000..346c620 Binary files /dev/null and b/data/base/16384/12262_vm differ diff --git a/data/base/16384/12264 b/data/base/16384/12264 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/12266 b/data/base/16384/12266 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/12266 differ diff --git a/data/base/16384/12267 b/data/base/16384/12267 new file mode 100644 index 0000000..8b140bf Binary files /dev/null and b/data/base/16384/12267 differ diff --git a/data/base/16384/12267_fsm b/data/base/16384/12267_fsm new file mode 100644 index 0000000..a836ddf Binary files /dev/null and b/data/base/16384/12267_fsm differ diff --git a/data/base/16384/12267_vm b/data/base/16384/12267_vm new file mode 100644 index 0000000..5d9b385 Binary files /dev/null and b/data/base/16384/12267_vm differ diff --git a/data/base/16384/12269 b/data/base/16384/12269 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/12271 b/data/base/16384/12271 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/12271 differ diff --git a/data/base/16384/12272 b/data/base/16384/12272 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/12274 b/data/base/16384/12274 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/12276 b/data/base/16384/12276 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/12276 differ diff --git a/data/base/16384/1247 b/data/base/16384/1247 new file mode 100644 index 0000000..e736cbf Binary files /dev/null and b/data/base/16384/1247 differ diff --git a/data/base/16384/1247_fsm b/data/base/16384/1247_fsm new file mode 100644 index 0000000..7759519 Binary files /dev/null and b/data/base/16384/1247_fsm differ diff --git a/data/base/16384/1247_vm b/data/base/16384/1247_vm new file mode 100644 index 0000000..b4d8925 Binary files /dev/null and b/data/base/16384/1247_vm differ diff --git a/data/base/16384/1249 b/data/base/16384/1249 new file mode 100644 index 0000000..e32035d Binary files /dev/null and b/data/base/16384/1249 differ diff --git a/data/base/16384/1249_fsm b/data/base/16384/1249_fsm new file mode 100644 index 0000000..f68aea6 Binary files /dev/null and b/data/base/16384/1249_fsm differ diff --git a/data/base/16384/1249_vm b/data/base/16384/1249_vm new file mode 100644 index 0000000..b1f5d45 Binary files /dev/null and b/data/base/16384/1249_vm differ diff --git a/data/base/16384/1255 b/data/base/16384/1255 new file mode 100644 index 0000000..134c403 Binary files /dev/null and b/data/base/16384/1255 differ diff --git a/data/base/16384/1255_fsm b/data/base/16384/1255_fsm new file mode 100644 index 0000000..b2ac270 Binary files /dev/null and b/data/base/16384/1255_fsm differ diff --git a/data/base/16384/1255_vm b/data/base/16384/1255_vm new file mode 100644 index 0000000..658ecd8 Binary files /dev/null and b/data/base/16384/1255_vm differ diff --git a/data/base/16384/1259 b/data/base/16384/1259 new file mode 100644 index 0000000..2f2bfc2 Binary files /dev/null and b/data/base/16384/1259 differ diff --git a/data/base/16384/1259_fsm b/data/base/16384/1259_fsm new file mode 100644 index 0000000..60fdb0c Binary files /dev/null and b/data/base/16384/1259_fsm differ diff --git a/data/base/16384/1259_vm b/data/base/16384/1259_vm new file mode 100644 index 0000000..3bf0bbc Binary files /dev/null and b/data/base/16384/1259_vm differ diff --git a/data/base/16384/1417 b/data/base/16384/1417 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/1417_vm b/data/base/16384/1417_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/1418 b/data/base/16384/1418 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/1418_vm b/data/base/16384/1418_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/174 b/data/base/16384/174 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/174 differ diff --git a/data/base/16384/175 b/data/base/16384/175 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/175 differ diff --git a/data/base/16384/18642 b/data/base/16384/18642 new file mode 100644 index 0000000..36db8e8 Binary files /dev/null and b/data/base/16384/18642 differ diff --git a/data/base/16384/18953 b/data/base/16384/18953 new file mode 100644 index 0000000..51998cc Binary files /dev/null and b/data/base/16384/18953 differ diff --git a/data/base/16384/18953_fsm b/data/base/16384/18953_fsm new file mode 100644 index 0000000..9bb2489 Binary files /dev/null and b/data/base/16384/18953_fsm differ diff --git a/data/base/16384/18960 b/data/base/16384/18960 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/18962 b/data/base/16384/18962 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/18962 differ diff --git a/data/base/16384/19206 b/data/base/16384/19206 new file mode 100644 index 0000000..2c84b00 Binary files /dev/null and b/data/base/16384/19206 differ diff --git a/data/base/16384/19340 b/data/base/16384/19340 new file mode 100644 index 0000000..afa089d Binary files /dev/null and b/data/base/16384/19340 differ diff --git a/data/base/16384/19711 b/data/base/16384/19711 new file mode 100644 index 0000000..cae603f Binary files /dev/null and b/data/base/16384/19711 differ diff --git a/data/base/16384/19714 b/data/base/16384/19714 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19716 b/data/base/16384/19716 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19716 differ diff --git a/data/base/16384/19717 b/data/base/16384/19717 new file mode 100644 index 0000000..4ed991d Binary files /dev/null and b/data/base/16384/19717 differ diff --git a/data/base/16384/19719 b/data/base/16384/19719 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19722 b/data/base/16384/19722 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19724 b/data/base/16384/19724 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19724 differ diff --git a/data/base/16384/19725 b/data/base/16384/19725 new file mode 100644 index 0000000..f962778 Binary files /dev/null and b/data/base/16384/19725 differ diff --git a/data/base/16384/19727 b/data/base/16384/19727 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19730 b/data/base/16384/19730 new file mode 100644 index 0000000..e20d413 Binary files /dev/null and b/data/base/16384/19730 differ diff --git a/data/base/16384/19732 b/data/base/16384/19732 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19735 b/data/base/16384/19735 new file mode 100644 index 0000000..3ebcc79 Binary files /dev/null and b/data/base/16384/19735 differ diff --git a/data/base/16384/19737 b/data/base/16384/19737 new file mode 100644 index 0000000..07f98d1 Binary files /dev/null and b/data/base/16384/19737 differ diff --git a/data/base/16384/19737_fsm b/data/base/16384/19737_fsm new file mode 100644 index 0000000..6b4fbb3 Binary files /dev/null and b/data/base/16384/19737_fsm differ diff --git a/data/base/16384/19740 b/data/base/16384/19740 new file mode 100644 index 0000000..ddfc564 Binary files /dev/null and b/data/base/16384/19740 differ diff --git a/data/base/16384/19742 b/data/base/16384/19742 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19745 b/data/base/16384/19745 new file mode 100644 index 0000000..13db782 Binary files /dev/null and b/data/base/16384/19745 differ diff --git a/data/base/16384/19747 b/data/base/16384/19747 new file mode 100644 index 0000000..0a0bd7b Binary files /dev/null and b/data/base/16384/19747 differ diff --git a/data/base/16384/19749 b/data/base/16384/19749 new file mode 100644 index 0000000..0c5bd37 Binary files /dev/null and b/data/base/16384/19749 differ diff --git a/data/base/16384/19752 b/data/base/16384/19752 new file mode 100644 index 0000000..9d3997f Binary files /dev/null and b/data/base/16384/19752 differ diff --git a/data/base/16384/19754 b/data/base/16384/19754 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19759 b/data/base/16384/19759 new file mode 100644 index 0000000..8c985c1 Binary files /dev/null and b/data/base/16384/19759 differ diff --git a/data/base/16384/19761 b/data/base/16384/19761 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19764 b/data/base/16384/19764 new file mode 100644 index 0000000..eed0815 Binary files /dev/null and b/data/base/16384/19764 differ diff --git a/data/base/16384/19766 b/data/base/16384/19766 new file mode 100644 index 0000000..971393d Binary files /dev/null and b/data/base/16384/19766 differ diff --git a/data/base/16384/19766_fsm b/data/base/16384/19766_fsm new file mode 100644 index 0000000..98b1a08 Binary files /dev/null and b/data/base/16384/19766_fsm differ diff --git a/data/base/16384/19769 b/data/base/16384/19769 new file mode 100644 index 0000000..3de24d1 Binary files /dev/null and b/data/base/16384/19769 differ diff --git a/data/base/16384/19771 b/data/base/16384/19771 new file mode 100644 index 0000000..a80d08d Binary files /dev/null and b/data/base/16384/19771 differ diff --git a/data/base/16384/19771_fsm b/data/base/16384/19771_fsm new file mode 100644 index 0000000..a112262 Binary files /dev/null and b/data/base/16384/19771_fsm differ diff --git a/data/base/16384/19779 b/data/base/16384/19779 new file mode 100644 index 0000000..4bd7f15 Binary files /dev/null and b/data/base/16384/19779 differ diff --git a/data/base/16384/19781 b/data/base/16384/19781 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19784 b/data/base/16384/19784 new file mode 100644 index 0000000..01f61d7 Binary files /dev/null and b/data/base/16384/19784 differ diff --git a/data/base/16384/19786 b/data/base/16384/19786 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19789 b/data/base/16384/19789 new file mode 100644 index 0000000..d6542aa Binary files /dev/null and b/data/base/16384/19789 differ diff --git a/data/base/16384/19791 b/data/base/16384/19791 new file mode 100644 index 0000000..5943e40 Binary files /dev/null and b/data/base/16384/19791 differ diff --git a/data/base/16384/19791_fsm b/data/base/16384/19791_fsm new file mode 100644 index 0000000..d9b0079 Binary files /dev/null and b/data/base/16384/19791_fsm differ diff --git a/data/base/16384/19798 b/data/base/16384/19798 new file mode 100644 index 0000000..f63bf5f Binary files /dev/null and b/data/base/16384/19798 differ diff --git a/data/base/16384/19800 b/data/base/16384/19800 new file mode 100644 index 0000000..42d29ac Binary files /dev/null and b/data/base/16384/19800 differ diff --git a/data/base/16384/19800_fsm b/data/base/16384/19800_fsm new file mode 100644 index 0000000..6b4fbb3 Binary files /dev/null and b/data/base/16384/19800_fsm differ diff --git a/data/base/16384/19803 b/data/base/16384/19803 new file mode 100644 index 0000000..05bd16c Binary files /dev/null and b/data/base/16384/19803 differ diff --git a/data/base/16384/19805 b/data/base/16384/19805 new file mode 100644 index 0000000..4a6a3a7 Binary files /dev/null and b/data/base/16384/19805 differ diff --git a/data/base/16384/19805_fsm b/data/base/16384/19805_fsm new file mode 100644 index 0000000..6b4fbb3 Binary files /dev/null and b/data/base/16384/19805_fsm differ diff --git a/data/base/16384/19808 b/data/base/16384/19808 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19810 b/data/base/16384/19810 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19810 differ diff --git a/data/base/16384/19811 b/data/base/16384/19811 new file mode 100644 index 0000000..fd4631c Binary files /dev/null and b/data/base/16384/19811 differ diff --git a/data/base/16384/19813 b/data/base/16384/19813 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19816 b/data/base/16384/19816 new file mode 100644 index 0000000..0978537 Binary files /dev/null and b/data/base/16384/19816 differ diff --git a/data/base/16384/19818 b/data/base/16384/19818 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19821 b/data/base/16384/19821 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19824 b/data/base/16384/19824 new file mode 100644 index 0000000..e940753 Binary files /dev/null and b/data/base/16384/19824 differ diff --git a/data/base/16384/19824_fsm b/data/base/16384/19824_fsm new file mode 100644 index 0000000..730376b Binary files /dev/null and b/data/base/16384/19824_fsm differ diff --git a/data/base/16384/19828 b/data/base/16384/19828 new file mode 100644 index 0000000..265ed28 Binary files /dev/null and b/data/base/16384/19828 differ diff --git a/data/base/16384/19830 b/data/base/16384/19830 new file mode 100644 index 0000000..1fa1123 Binary files /dev/null and b/data/base/16384/19830 differ diff --git a/data/base/16384/19830_fsm b/data/base/16384/19830_fsm new file mode 100644 index 0000000..dbd7845 Binary files /dev/null and b/data/base/16384/19830_fsm differ diff --git a/data/base/16384/19833 b/data/base/16384/19833 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19835 b/data/base/16384/19835 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19835 differ diff --git a/data/base/16384/19836 b/data/base/16384/19836 new file mode 100644 index 0000000..64b9a0e Binary files /dev/null and b/data/base/16384/19836 differ diff --git a/data/base/16384/19838 b/data/base/16384/19838 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19841 b/data/base/16384/19841 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19843 b/data/base/16384/19843 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19843 differ diff --git a/data/base/16384/19844 b/data/base/16384/19844 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19847 b/data/base/16384/19847 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19849 b/data/base/16384/19849 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19849 differ diff --git a/data/base/16384/19850 b/data/base/16384/19850 new file mode 100644 index 0000000..3f08bef Binary files /dev/null and b/data/base/16384/19850 differ diff --git a/data/base/16384/19853 b/data/base/16384/19853 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19855 b/data/base/16384/19855 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19855 differ diff --git a/data/base/16384/19856 b/data/base/16384/19856 new file mode 100644 index 0000000..0d0e099 Binary files /dev/null and b/data/base/16384/19856 differ diff --git a/data/base/16384/19859 b/data/base/16384/19859 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19862 b/data/base/16384/19862 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19864 b/data/base/16384/19864 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19864 differ diff --git a/data/base/16384/19865 b/data/base/16384/19865 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19868 b/data/base/16384/19868 new file mode 100644 index 0000000..3131bc4 Binary files /dev/null and b/data/base/16384/19868 differ diff --git a/data/base/16384/19871 b/data/base/16384/19871 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19873 b/data/base/16384/19873 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19873 differ diff --git a/data/base/16384/19874 b/data/base/16384/19874 new file mode 100644 index 0000000..f15630d Binary files /dev/null and b/data/base/16384/19874 differ diff --git a/data/base/16384/19879 b/data/base/16384/19879 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19882 b/data/base/16384/19882 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19884 b/data/base/16384/19884 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19884 differ diff --git a/data/base/16384/19885 b/data/base/16384/19885 new file mode 100644 index 0000000..b912e46 Binary files /dev/null and b/data/base/16384/19885 differ diff --git a/data/base/16384/19888 b/data/base/16384/19888 new file mode 100644 index 0000000..a89f581 Binary files /dev/null and b/data/base/16384/19888 differ diff --git a/data/base/16384/19891 b/data/base/16384/19891 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19893 b/data/base/16384/19893 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19893 differ diff --git a/data/base/16384/19894 b/data/base/16384/19894 new file mode 100644 index 0000000..04f70c1 Binary files /dev/null and b/data/base/16384/19894 differ diff --git a/data/base/16384/19894_fsm b/data/base/16384/19894_fsm new file mode 100644 index 0000000..5a66761 Binary files /dev/null and b/data/base/16384/19894_fsm differ diff --git a/data/base/16384/19897 b/data/base/16384/19897 new file mode 100644 index 0000000..96f5b4e Binary files /dev/null and b/data/base/16384/19897 differ diff --git a/data/base/16384/19897_fsm b/data/base/16384/19897_fsm new file mode 100644 index 0000000..df95661 Binary files /dev/null and b/data/base/16384/19897_fsm differ diff --git a/data/base/16384/19899 b/data/base/16384/19899 new file mode 100644 index 0000000..ffa657e Binary files /dev/null and b/data/base/16384/19899 differ diff --git a/data/base/16384/19900 b/data/base/16384/19900 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19905 b/data/base/16384/19905 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19907 b/data/base/16384/19907 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19907 differ diff --git a/data/base/16384/19908 b/data/base/16384/19908 new file mode 100644 index 0000000..44c1dd5 Binary files /dev/null and b/data/base/16384/19908 differ diff --git a/data/base/16384/19908_fsm b/data/base/16384/19908_fsm new file mode 100644 index 0000000..18454f0 Binary files /dev/null and b/data/base/16384/19908_fsm differ diff --git a/data/base/16384/19912 b/data/base/16384/19912 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19914 b/data/base/16384/19914 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19914 differ diff --git a/data/base/16384/19915 b/data/base/16384/19915 new file mode 100644 index 0000000..091308b Binary files /dev/null and b/data/base/16384/19915 differ diff --git a/data/base/16384/19917 b/data/base/16384/19917 new file mode 100644 index 0000000..d070939 Binary files /dev/null and b/data/base/16384/19917 differ diff --git a/data/base/16384/19920 b/data/base/16384/19920 new file mode 100644 index 0000000..6f953af Binary files /dev/null and b/data/base/16384/19920 differ diff --git a/data/base/16384/19922 b/data/base/16384/19922 new file mode 100644 index 0000000..1705f52 Binary files /dev/null and b/data/base/16384/19922 differ diff --git a/data/base/16384/19922_fsm b/data/base/16384/19922_fsm new file mode 100644 index 0000000..c5ae0ea Binary files /dev/null and b/data/base/16384/19922_fsm differ diff --git a/data/base/16384/19925 b/data/base/16384/19925 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19927 b/data/base/16384/19927 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19927 differ diff --git a/data/base/16384/19928 b/data/base/16384/19928 new file mode 100644 index 0000000..b273efd Binary files /dev/null and b/data/base/16384/19928 differ diff --git a/data/base/16384/19931 b/data/base/16384/19931 new file mode 100644 index 0000000..132c8ed Binary files /dev/null and b/data/base/16384/19931 differ diff --git a/data/base/16384/19933 b/data/base/16384/19933 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19936 b/data/base/16384/19936 new file mode 100644 index 0000000..09482cb Binary files /dev/null and b/data/base/16384/19936 differ diff --git a/data/base/16384/19938 b/data/base/16384/19938 new file mode 100644 index 0000000..786d8f3 Binary files /dev/null and b/data/base/16384/19938 differ diff --git a/data/base/16384/19938_fsm b/data/base/16384/19938_fsm new file mode 100644 index 0000000..5cccb0c Binary files /dev/null and b/data/base/16384/19938_fsm differ diff --git a/data/base/16384/19941 b/data/base/16384/19941 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19943 b/data/base/16384/19943 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19943 differ diff --git a/data/base/16384/19944 b/data/base/16384/19944 new file mode 100644 index 0000000..452d99f Binary files /dev/null and b/data/base/16384/19944 differ diff --git a/data/base/16384/19946 b/data/base/16384/19946 new file mode 100644 index 0000000..86b9c43 Binary files /dev/null and b/data/base/16384/19946 differ diff --git a/data/base/16384/19946_fsm b/data/base/16384/19946_fsm new file mode 100644 index 0000000..436eb6d Binary files /dev/null and b/data/base/16384/19946_fsm differ diff --git a/data/base/16384/19949 b/data/base/16384/19949 new file mode 100644 index 0000000..6ca859d Binary files /dev/null and b/data/base/16384/19949 differ diff --git a/data/base/16384/19949_fsm b/data/base/16384/19949_fsm new file mode 100644 index 0000000..209cbb7 Binary files /dev/null and b/data/base/16384/19949_fsm differ diff --git a/data/base/16384/19951 b/data/base/16384/19951 new file mode 100644 index 0000000..417ec09 Binary files /dev/null and b/data/base/16384/19951 differ diff --git a/data/base/16384/19952 b/data/base/16384/19952 new file mode 100644 index 0000000..5e8a39d Binary files /dev/null and b/data/base/16384/19952 differ diff --git a/data/base/16384/19954 b/data/base/16384/19954 new file mode 100644 index 0000000..d1f67d9 Binary files /dev/null and b/data/base/16384/19954 differ diff --git a/data/base/16384/19957 b/data/base/16384/19957 new file mode 100644 index 0000000..b9d05a8 Binary files /dev/null and b/data/base/16384/19957 differ diff --git a/data/base/16384/19959 b/data/base/16384/19959 new file mode 100644 index 0000000..5221e1f Binary files /dev/null and b/data/base/16384/19959 differ diff --git a/data/base/16384/19963 b/data/base/16384/19963 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19965 b/data/base/16384/19965 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19965 differ diff --git a/data/base/16384/19966 b/data/base/16384/19966 new file mode 100644 index 0000000..b0f50a3 Binary files /dev/null and b/data/base/16384/19966 differ diff --git a/data/base/16384/19968 b/data/base/16384/19968 new file mode 100644 index 0000000..0e4a206 Binary files /dev/null and b/data/base/16384/19968 differ diff --git a/data/base/16384/19968_fsm b/data/base/16384/19968_fsm new file mode 100644 index 0000000..d1d1fd8 Binary files /dev/null and b/data/base/16384/19968_fsm differ diff --git a/data/base/16384/19971 b/data/base/16384/19971 new file mode 100644 index 0000000..5159958 Binary files /dev/null and b/data/base/16384/19971 differ diff --git a/data/base/16384/19973 b/data/base/16384/19973 new file mode 100644 index 0000000..a1e0cc8 Binary files /dev/null and b/data/base/16384/19973 differ diff --git a/data/base/16384/19974 b/data/base/16384/19974 new file mode 100644 index 0000000..ade0773 Binary files /dev/null and b/data/base/16384/19974 differ diff --git a/data/base/16384/19976 b/data/base/16384/19976 new file mode 100644 index 0000000..3ccbf7f Binary files /dev/null and b/data/base/16384/19976 differ diff --git a/data/base/16384/19976_fsm b/data/base/16384/19976_fsm new file mode 100644 index 0000000..f25e0cb Binary files /dev/null and b/data/base/16384/19976_fsm differ diff --git a/data/base/16384/19985 b/data/base/16384/19985 new file mode 100644 index 0000000..5e25555 Binary files /dev/null and b/data/base/16384/19985 differ diff --git a/data/base/16384/19987 b/data/base/16384/19987 new file mode 100644 index 0000000..42c8dd5 Binary files /dev/null and b/data/base/16384/19987 differ diff --git a/data/base/16384/19987_fsm b/data/base/16384/19987_fsm new file mode 100644 index 0000000..69417cd Binary files /dev/null and b/data/base/16384/19987_fsm differ diff --git a/data/base/16384/19992 b/data/base/16384/19992 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/19994 b/data/base/16384/19994 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/19994 differ diff --git a/data/base/16384/19995 b/data/base/16384/19995 new file mode 100644 index 0000000..1778b91 Binary files /dev/null and b/data/base/16384/19995 differ diff --git a/data/base/16384/19997 b/data/base/16384/19997 new file mode 100644 index 0000000..89896c4 Binary files /dev/null and b/data/base/16384/19997 differ diff --git a/data/base/16384/19997_fsm b/data/base/16384/19997_fsm new file mode 100644 index 0000000..5b13535 Binary files /dev/null and b/data/base/16384/19997_fsm differ diff --git a/data/base/16384/20000 b/data/base/16384/20000 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/20002 b/data/base/16384/20002 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20002 differ diff --git a/data/base/16384/20003 b/data/base/16384/20003 new file mode 100644 index 0000000..224f3d4 Binary files /dev/null and b/data/base/16384/20003 differ diff --git a/data/base/16384/20005 b/data/base/16384/20005 new file mode 100644 index 0000000..c09010b Binary files /dev/null and b/data/base/16384/20005 differ diff --git a/data/base/16384/20005_fsm b/data/base/16384/20005_fsm new file mode 100644 index 0000000..e32bc17 Binary files /dev/null and b/data/base/16384/20005_fsm differ diff --git a/data/base/16384/20008 b/data/base/16384/20008 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/20010 b/data/base/16384/20010 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20010 differ diff --git a/data/base/16384/20011 b/data/base/16384/20011 new file mode 100644 index 0000000..a2463ab Binary files /dev/null and b/data/base/16384/20011 differ diff --git a/data/base/16384/20013 b/data/base/16384/20013 new file mode 100644 index 0000000..fe7b4ce Binary files /dev/null and b/data/base/16384/20013 differ diff --git a/data/base/16384/20013_fsm b/data/base/16384/20013_fsm new file mode 100644 index 0000000..bda1413 Binary files /dev/null and b/data/base/16384/20013_fsm differ diff --git a/data/base/16384/20016 b/data/base/16384/20016 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/20018 b/data/base/16384/20018 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20018 differ diff --git a/data/base/16384/20019 b/data/base/16384/20019 new file mode 100644 index 0000000..77ea140 Binary files /dev/null and b/data/base/16384/20019 differ diff --git a/data/base/16384/20021 b/data/base/16384/20021 new file mode 100644 index 0000000..c64148b Binary files /dev/null and b/data/base/16384/20021 differ diff --git a/data/base/16384/20024 b/data/base/16384/20024 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/20026 b/data/base/16384/20026 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20026 differ diff --git a/data/base/16384/20027 b/data/base/16384/20027 new file mode 100644 index 0000000..826ad49 Binary files /dev/null and b/data/base/16384/20027 differ diff --git a/data/base/16384/20029 b/data/base/16384/20029 new file mode 100644 index 0000000..0da839d Binary files /dev/null and b/data/base/16384/20029 differ diff --git a/data/base/16384/20029_fsm b/data/base/16384/20029_fsm new file mode 100644 index 0000000..39488e5 Binary files /dev/null and b/data/base/16384/20029_fsm differ diff --git a/data/base/16384/20032 b/data/base/16384/20032 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/20034 b/data/base/16384/20034 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20034 differ diff --git a/data/base/16384/20035 b/data/base/16384/20035 new file mode 100644 index 0000000..792aaca Binary files /dev/null and b/data/base/16384/20035 differ diff --git a/data/base/16384/20037 b/data/base/16384/20037 new file mode 100644 index 0000000..4d33fa2 Binary files /dev/null and b/data/base/16384/20037 differ diff --git a/data/base/16384/20037_fsm b/data/base/16384/20037_fsm new file mode 100644 index 0000000..6b4fbb3 Binary files /dev/null and b/data/base/16384/20037_fsm differ diff --git a/data/base/16384/20040 b/data/base/16384/20040 new file mode 100644 index 0000000..5bc8cae Binary files /dev/null and b/data/base/16384/20040 differ diff --git a/data/base/16384/20042 b/data/base/16384/20042 new file mode 100644 index 0000000..fd36b9a Binary files /dev/null and b/data/base/16384/20042 differ diff --git a/data/base/16384/20042_fsm b/data/base/16384/20042_fsm new file mode 100644 index 0000000..44e1a67 Binary files /dev/null and b/data/base/16384/20042_fsm differ diff --git a/data/base/16384/20042_vm b/data/base/16384/20042_vm new file mode 100644 index 0000000..3d81c2a Binary files /dev/null and b/data/base/16384/20042_vm differ diff --git a/data/base/16384/20045 b/data/base/16384/20045 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/20047 b/data/base/16384/20047 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20047 differ diff --git a/data/base/16384/20048 b/data/base/16384/20048 new file mode 100644 index 0000000..f75b33e Binary files /dev/null and b/data/base/16384/20048 differ diff --git a/data/base/16384/20050 b/data/base/16384/20050 new file mode 100644 index 0000000..5144766 Binary files /dev/null and b/data/base/16384/20050 differ diff --git a/data/base/16384/20052 b/data/base/16384/20052 new file mode 100644 index 0000000..99d050e Binary files /dev/null and b/data/base/16384/20052 differ diff --git a/data/base/16384/20052_fsm b/data/base/16384/20052_fsm new file mode 100644 index 0000000..b250abd Binary files /dev/null and b/data/base/16384/20052_fsm differ diff --git a/data/base/16384/20052_vm b/data/base/16384/20052_vm new file mode 100644 index 0000000..2aacff5 Binary files /dev/null and b/data/base/16384/20052_vm differ diff --git a/data/base/16384/20055 b/data/base/16384/20055 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/20057 b/data/base/16384/20057 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20057 differ diff --git a/data/base/16384/20271 b/data/base/16384/20271 new file mode 100644 index 0000000..5823dba Binary files /dev/null and b/data/base/16384/20271 differ diff --git a/data/base/16384/20273 b/data/base/16384/20273 new file mode 100644 index 0000000..1ad9889 Binary files /dev/null and b/data/base/16384/20273 differ diff --git a/data/base/16384/20275 b/data/base/16384/20275 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20275 differ diff --git a/data/base/16384/20277 b/data/base/16384/20277 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20277 differ diff --git a/data/base/16384/20279 b/data/base/16384/20279 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20279 differ diff --git a/data/base/16384/20281 b/data/base/16384/20281 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20281 differ diff --git a/data/base/16384/20283 b/data/base/16384/20283 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20283 differ diff --git a/data/base/16384/20285 b/data/base/16384/20285 new file mode 100644 index 0000000..53afdd5 Binary files /dev/null and b/data/base/16384/20285 differ diff --git a/data/base/16384/20287 b/data/base/16384/20287 new file mode 100644 index 0000000..7defefb Binary files /dev/null and b/data/base/16384/20287 differ diff --git a/data/base/16384/20289 b/data/base/16384/20289 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20289 differ diff --git a/data/base/16384/20291 b/data/base/16384/20291 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20291 differ diff --git a/data/base/16384/20293 b/data/base/16384/20293 new file mode 100644 index 0000000..81a9c90 Binary files /dev/null and b/data/base/16384/20293 differ diff --git a/data/base/16384/20295 b/data/base/16384/20295 new file mode 100644 index 0000000..1b0c7ef Binary files /dev/null and b/data/base/16384/20295 differ diff --git a/data/base/16384/20297 b/data/base/16384/20297 new file mode 100644 index 0000000..52fa556 Binary files /dev/null and b/data/base/16384/20297 differ diff --git a/data/base/16384/20299 b/data/base/16384/20299 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20299 differ diff --git a/data/base/16384/20301 b/data/base/16384/20301 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20301 differ diff --git a/data/base/16384/20303 b/data/base/16384/20303 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20303 differ diff --git a/data/base/16384/20305 b/data/base/16384/20305 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20305 differ diff --git a/data/base/16384/20307 b/data/base/16384/20307 new file mode 100644 index 0000000..7ca127a Binary files /dev/null and b/data/base/16384/20307 differ diff --git a/data/base/16384/20309 b/data/base/16384/20309 new file mode 100644 index 0000000..02de716 Binary files /dev/null and b/data/base/16384/20309 differ diff --git a/data/base/16384/20311 b/data/base/16384/20311 new file mode 100644 index 0000000..e3319ff Binary files /dev/null and b/data/base/16384/20311 differ diff --git a/data/base/16384/20313 b/data/base/16384/20313 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20313 differ diff --git a/data/base/16384/20315 b/data/base/16384/20315 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20315 differ diff --git a/data/base/16384/20317 b/data/base/16384/20317 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20317 differ diff --git a/data/base/16384/20319 b/data/base/16384/20319 new file mode 100644 index 0000000..5ce2537 Binary files /dev/null and b/data/base/16384/20319 differ diff --git a/data/base/16384/20321 b/data/base/16384/20321 new file mode 100644 index 0000000..d94ed17 Binary files /dev/null and b/data/base/16384/20321 differ diff --git a/data/base/16384/20323 b/data/base/16384/20323 new file mode 100644 index 0000000..be0610e Binary files /dev/null and b/data/base/16384/20323 differ diff --git a/data/base/16384/20325 b/data/base/16384/20325 new file mode 100644 index 0000000..5480d37 Binary files /dev/null and b/data/base/16384/20325 differ diff --git a/data/base/16384/20327 b/data/base/16384/20327 new file mode 100644 index 0000000..5bdb416 Binary files /dev/null and b/data/base/16384/20327 differ diff --git a/data/base/16384/20329 b/data/base/16384/20329 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20329 differ diff --git a/data/base/16384/20331 b/data/base/16384/20331 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20331 differ diff --git a/data/base/16384/20333 b/data/base/16384/20333 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20333 differ diff --git a/data/base/16384/20335 b/data/base/16384/20335 new file mode 100644 index 0000000..7f28fe0 Binary files /dev/null and b/data/base/16384/20335 differ diff --git a/data/base/16384/20337 b/data/base/16384/20337 new file mode 100644 index 0000000..cde5c30 Binary files /dev/null and b/data/base/16384/20337 differ diff --git a/data/base/16384/20339 b/data/base/16384/20339 new file mode 100644 index 0000000..c25f38a Binary files /dev/null and b/data/base/16384/20339 differ diff --git a/data/base/16384/20341 b/data/base/16384/20341 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20341 differ diff --git a/data/base/16384/20343 b/data/base/16384/20343 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20343 differ diff --git a/data/base/16384/20345 b/data/base/16384/20345 new file mode 100644 index 0000000..c601683 Binary files /dev/null and b/data/base/16384/20345 differ diff --git a/data/base/16384/20347 b/data/base/16384/20347 new file mode 100644 index 0000000..3d3e2c4 Binary files /dev/null and b/data/base/16384/20347 differ diff --git a/data/base/16384/20349 b/data/base/16384/20349 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20349 differ diff --git a/data/base/16384/20351 b/data/base/16384/20351 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20351 differ diff --git a/data/base/16384/20353 b/data/base/16384/20353 new file mode 100644 index 0000000..280087a Binary files /dev/null and b/data/base/16384/20353 differ diff --git a/data/base/16384/20355 b/data/base/16384/20355 new file mode 100644 index 0000000..dd5f46a Binary files /dev/null and b/data/base/16384/20355 differ diff --git a/data/base/16384/20357 b/data/base/16384/20357 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20357 differ diff --git a/data/base/16384/20359 b/data/base/16384/20359 new file mode 100644 index 0000000..b1f4827 Binary files /dev/null and b/data/base/16384/20359 differ diff --git a/data/base/16384/20361 b/data/base/16384/20361 new file mode 100644 index 0000000..71433c2 Binary files /dev/null and b/data/base/16384/20361 differ diff --git a/data/base/16384/20363 b/data/base/16384/20363 new file mode 100644 index 0000000..400430d Binary files /dev/null and b/data/base/16384/20363 differ diff --git a/data/base/16384/20365 b/data/base/16384/20365 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20365 differ diff --git a/data/base/16384/20367 b/data/base/16384/20367 new file mode 100644 index 0000000..14f2d2b Binary files /dev/null and b/data/base/16384/20367 differ diff --git a/data/base/16384/20369 b/data/base/16384/20369 new file mode 100644 index 0000000..2f664c8 Binary files /dev/null and b/data/base/16384/20369 differ diff --git a/data/base/16384/20371 b/data/base/16384/20371 new file mode 100644 index 0000000..dfb6b25 Binary files /dev/null and b/data/base/16384/20371 differ diff --git a/data/base/16384/20373 b/data/base/16384/20373 new file mode 100644 index 0000000..350a232 Binary files /dev/null and b/data/base/16384/20373 differ diff --git a/data/base/16384/20375 b/data/base/16384/20375 new file mode 100644 index 0000000..da160f2 Binary files /dev/null and b/data/base/16384/20375 differ diff --git a/data/base/16384/20377 b/data/base/16384/20377 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20377 differ diff --git a/data/base/16384/20379 b/data/base/16384/20379 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20379 differ diff --git a/data/base/16384/20381 b/data/base/16384/20381 new file mode 100644 index 0000000..1fbd7ef Binary files /dev/null and b/data/base/16384/20381 differ diff --git a/data/base/16384/20383 b/data/base/16384/20383 new file mode 100644 index 0000000..0c0fb63 Binary files /dev/null and b/data/base/16384/20383 differ diff --git a/data/base/16384/20385 b/data/base/16384/20385 new file mode 100644 index 0000000..8596268 Binary files /dev/null and b/data/base/16384/20385 differ diff --git a/data/base/16384/20387 b/data/base/16384/20387 new file mode 100644 index 0000000..92baf9a Binary files /dev/null and b/data/base/16384/20387 differ diff --git a/data/base/16384/20389 b/data/base/16384/20389 new file mode 100644 index 0000000..da160f2 Binary files /dev/null and b/data/base/16384/20389 differ diff --git a/data/base/16384/20391 b/data/base/16384/20391 new file mode 100644 index 0000000..be87732 Binary files /dev/null and b/data/base/16384/20391 differ diff --git a/data/base/16384/20393 b/data/base/16384/20393 new file mode 100644 index 0000000..91664ef Binary files /dev/null and b/data/base/16384/20393 differ diff --git a/data/base/16384/20395 b/data/base/16384/20395 new file mode 100644 index 0000000..b337f83 Binary files /dev/null and b/data/base/16384/20395 differ diff --git a/data/base/16384/20397 b/data/base/16384/20397 new file mode 100644 index 0000000..48cce13 Binary files /dev/null and b/data/base/16384/20397 differ diff --git a/data/base/16384/20399 b/data/base/16384/20399 new file mode 100644 index 0000000..0e4e9f9 Binary files /dev/null and b/data/base/16384/20399 differ diff --git a/data/base/16384/20401 b/data/base/16384/20401 new file mode 100644 index 0000000..bfb611c Binary files /dev/null and b/data/base/16384/20401 differ diff --git a/data/base/16384/20403 b/data/base/16384/20403 new file mode 100644 index 0000000..0a90105 Binary files /dev/null and b/data/base/16384/20403 differ diff --git a/data/base/16384/20405 b/data/base/16384/20405 new file mode 100644 index 0000000..bbce4dc Binary files /dev/null and b/data/base/16384/20405 differ diff --git a/data/base/16384/20407 b/data/base/16384/20407 new file mode 100644 index 0000000..a5f0903 Binary files /dev/null and b/data/base/16384/20407 differ diff --git a/data/base/16384/20409 b/data/base/16384/20409 new file mode 100644 index 0000000..e4f9a2e Binary files /dev/null and b/data/base/16384/20409 differ diff --git a/data/base/16384/20411 b/data/base/16384/20411 new file mode 100644 index 0000000..4675c0f Binary files /dev/null and b/data/base/16384/20411 differ diff --git a/data/base/16384/20413 b/data/base/16384/20413 new file mode 100644 index 0000000..4e4e120 Binary files /dev/null and b/data/base/16384/20413 differ diff --git a/data/base/16384/20415 b/data/base/16384/20415 new file mode 100644 index 0000000..126a0dd Binary files /dev/null and b/data/base/16384/20415 differ diff --git a/data/base/16384/20417 b/data/base/16384/20417 new file mode 100644 index 0000000..ea7b920 Binary files /dev/null and b/data/base/16384/20417 differ diff --git a/data/base/16384/20419 b/data/base/16384/20419 new file mode 100644 index 0000000..42eed5a Binary files /dev/null and b/data/base/16384/20419 differ diff --git a/data/base/16384/20421 b/data/base/16384/20421 new file mode 100644 index 0000000..e687711 Binary files /dev/null and b/data/base/16384/20421 differ diff --git a/data/base/16384/20423 b/data/base/16384/20423 new file mode 100644 index 0000000..d85eb1f Binary files /dev/null and b/data/base/16384/20423 differ diff --git a/data/base/16384/20425 b/data/base/16384/20425 new file mode 100644 index 0000000..1f80b2f Binary files /dev/null and b/data/base/16384/20425 differ diff --git a/data/base/16384/20427 b/data/base/16384/20427 new file mode 100644 index 0000000..b63aa7a Binary files /dev/null and b/data/base/16384/20427 differ diff --git a/data/base/16384/20428 b/data/base/16384/20428 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20428 differ diff --git a/data/base/16384/20429 b/data/base/16384/20429 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20429 differ diff --git a/data/base/16384/20430 b/data/base/16384/20430 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20430 differ diff --git a/data/base/16384/20431 b/data/base/16384/20431 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20431 differ diff --git a/data/base/16384/20432 b/data/base/16384/20432 new file mode 100644 index 0000000..bab0eae Binary files /dev/null and b/data/base/16384/20432 differ diff --git a/data/base/16384/20433 b/data/base/16384/20433 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20433 differ diff --git a/data/base/16384/20434 b/data/base/16384/20434 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20434 differ diff --git a/data/base/16384/20435 b/data/base/16384/20435 new file mode 100644 index 0000000..72da4dd Binary files /dev/null and b/data/base/16384/20435 differ diff --git a/data/base/16384/20436 b/data/base/16384/20436 new file mode 100644 index 0000000..dfe5775 Binary files /dev/null and b/data/base/16384/20436 differ diff --git a/data/base/16384/20437 b/data/base/16384/20437 new file mode 100644 index 0000000..0d4be2f Binary files /dev/null and b/data/base/16384/20437 differ diff --git a/data/base/16384/20438 b/data/base/16384/20438 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20438 differ diff --git a/data/base/16384/20439 b/data/base/16384/20439 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20439 differ diff --git a/data/base/16384/20440 b/data/base/16384/20440 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20440 differ diff --git a/data/base/16384/20441 b/data/base/16384/20441 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20441 differ diff --git a/data/base/16384/20442 b/data/base/16384/20442 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20442 differ diff --git a/data/base/16384/20443 b/data/base/16384/20443 new file mode 100644 index 0000000..9fba181 Binary files /dev/null and b/data/base/16384/20443 differ diff --git a/data/base/16384/20444 b/data/base/16384/20444 new file mode 100644 index 0000000..ca69da8 Binary files /dev/null and b/data/base/16384/20444 differ diff --git a/data/base/16384/20445 b/data/base/16384/20445 new file mode 100644 index 0000000..ca69da8 Binary files /dev/null and b/data/base/16384/20445 differ diff --git a/data/base/16384/20446 b/data/base/16384/20446 new file mode 100644 index 0000000..17389f7 Binary files /dev/null and b/data/base/16384/20446 differ diff --git a/data/base/16384/20447 b/data/base/16384/20447 new file mode 100644 index 0000000..efb8d80 Binary files /dev/null and b/data/base/16384/20447 differ diff --git a/data/base/16384/20448 b/data/base/16384/20448 new file mode 100644 index 0000000..c8e5abe Binary files /dev/null and b/data/base/16384/20448 differ diff --git a/data/base/16384/20449 b/data/base/16384/20449 new file mode 100644 index 0000000..fe669dc Binary files /dev/null and b/data/base/16384/20449 differ diff --git a/data/base/16384/20450 b/data/base/16384/20450 new file mode 100644 index 0000000..c5af738 Binary files /dev/null and b/data/base/16384/20450 differ diff --git a/data/base/16384/20451 b/data/base/16384/20451 new file mode 100644 index 0000000..c5af738 Binary files /dev/null and b/data/base/16384/20451 differ diff --git a/data/base/16384/20452 b/data/base/16384/20452 new file mode 100644 index 0000000..c0699d9 Binary files /dev/null and b/data/base/16384/20452 differ diff --git a/data/base/16384/20453 b/data/base/16384/20453 new file mode 100644 index 0000000..bf9f1a9 Binary files /dev/null and b/data/base/16384/20453 differ diff --git a/data/base/16384/20454 b/data/base/16384/20454 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20454 differ diff --git a/data/base/16384/20455 b/data/base/16384/20455 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20455 differ diff --git a/data/base/16384/20456 b/data/base/16384/20456 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20456 differ diff --git a/data/base/16384/20457 b/data/base/16384/20457 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20457 differ diff --git a/data/base/16384/20458 b/data/base/16384/20458 new file mode 100644 index 0000000..1d2d7b6 Binary files /dev/null and b/data/base/16384/20458 differ diff --git a/data/base/16384/20459 b/data/base/16384/20459 new file mode 100644 index 0000000..1bcd8b7 Binary files /dev/null and b/data/base/16384/20459 differ diff --git a/data/base/16384/20460 b/data/base/16384/20460 new file mode 100644 index 0000000..9240ed2 Binary files /dev/null and b/data/base/16384/20460 differ diff --git a/data/base/16384/20461 b/data/base/16384/20461 new file mode 100644 index 0000000..ce72484 Binary files /dev/null and b/data/base/16384/20461 differ diff --git a/data/base/16384/20462 b/data/base/16384/20462 new file mode 100644 index 0000000..23102d1 Binary files /dev/null and b/data/base/16384/20462 differ diff --git a/data/base/16384/20463 b/data/base/16384/20463 new file mode 100644 index 0000000..23102d1 Binary files /dev/null and b/data/base/16384/20463 differ diff --git a/data/base/16384/20464 b/data/base/16384/20464 new file mode 100644 index 0000000..806ae57 Binary files /dev/null and b/data/base/16384/20464 differ diff --git a/data/base/16384/20465 b/data/base/16384/20465 new file mode 100644 index 0000000..e211cbb Binary files /dev/null and b/data/base/16384/20465 differ diff --git a/data/base/16384/20466 b/data/base/16384/20466 new file mode 100644 index 0000000..be0610e Binary files /dev/null and b/data/base/16384/20466 differ diff --git a/data/base/16384/20467 b/data/base/16384/20467 new file mode 100644 index 0000000..dc964bc Binary files /dev/null and b/data/base/16384/20467 differ diff --git a/data/base/16384/20468 b/data/base/16384/20468 new file mode 100644 index 0000000..ce72484 Binary files /dev/null and b/data/base/16384/20468 differ diff --git a/data/base/16384/20469 b/data/base/16384/20469 new file mode 100644 index 0000000..5345f20 Binary files /dev/null and b/data/base/16384/20469 differ diff --git a/data/base/16384/20470 b/data/base/16384/20470 new file mode 100644 index 0000000..ec1299c Binary files /dev/null and b/data/base/16384/20470 differ diff --git a/data/base/16384/20471 b/data/base/16384/20471 new file mode 100644 index 0000000..5132b21 Binary files /dev/null and b/data/base/16384/20471 differ diff --git a/data/base/16384/20472 b/data/base/16384/20472 new file mode 100644 index 0000000..5132b21 Binary files /dev/null and b/data/base/16384/20472 differ diff --git a/data/base/16384/20473 b/data/base/16384/20473 new file mode 100644 index 0000000..e0810cb Binary files /dev/null and b/data/base/16384/20473 differ diff --git a/data/base/16384/20474 b/data/base/16384/20474 new file mode 100644 index 0000000..07e3083 Binary files /dev/null and b/data/base/16384/20474 differ diff --git a/data/base/16384/20475 b/data/base/16384/20475 new file mode 100644 index 0000000..9bb9dbe Binary files /dev/null and b/data/base/16384/20475 differ diff --git a/data/base/16384/20476 b/data/base/16384/20476 new file mode 100644 index 0000000..fda6c51 Binary files /dev/null and b/data/base/16384/20476 differ diff --git a/data/base/16384/20477 b/data/base/16384/20477 new file mode 100644 index 0000000..0b71c33 Binary files /dev/null and b/data/base/16384/20477 differ diff --git a/data/base/16384/20478 b/data/base/16384/20478 new file mode 100644 index 0000000..ff57841 Binary files /dev/null and b/data/base/16384/20478 differ diff --git a/data/base/16384/20479 b/data/base/16384/20479 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20479 differ diff --git a/data/base/16384/20480 b/data/base/16384/20480 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20480 differ diff --git a/data/base/16384/20481 b/data/base/16384/20481 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20481 differ diff --git a/data/base/16384/20482 b/data/base/16384/20482 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20482 differ diff --git a/data/base/16384/20483 b/data/base/16384/20483 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20483 differ diff --git a/data/base/16384/20484 b/data/base/16384/20484 new file mode 100644 index 0000000..590492e Binary files /dev/null and b/data/base/16384/20484 differ diff --git a/data/base/16384/20485 b/data/base/16384/20485 new file mode 100644 index 0000000..590492e Binary files /dev/null and b/data/base/16384/20485 differ diff --git a/data/base/16384/20486 b/data/base/16384/20486 new file mode 100644 index 0000000..f6f4170 Binary files /dev/null and b/data/base/16384/20486 differ diff --git a/data/base/16384/20487 b/data/base/16384/20487 new file mode 100644 index 0000000..f6f4170 Binary files /dev/null and b/data/base/16384/20487 differ diff --git a/data/base/16384/20488 b/data/base/16384/20488 new file mode 100644 index 0000000..1bfabc4 Binary files /dev/null and b/data/base/16384/20488 differ diff --git a/data/base/16384/20489 b/data/base/16384/20489 new file mode 100644 index 0000000..9410bd7 Binary files /dev/null and b/data/base/16384/20489 differ diff --git a/data/base/16384/20490 b/data/base/16384/20490 new file mode 100644 index 0000000..9410bd7 Binary files /dev/null and b/data/base/16384/20490 differ diff --git a/data/base/16384/20491 b/data/base/16384/20491 new file mode 100644 index 0000000..35f4a48 Binary files /dev/null and b/data/base/16384/20491 differ diff --git a/data/base/16384/20492 b/data/base/16384/20492 new file mode 100644 index 0000000..38a5ead Binary files /dev/null and b/data/base/16384/20492 differ diff --git a/data/base/16384/20493 b/data/base/16384/20493 new file mode 100644 index 0000000..a0560b6 Binary files /dev/null and b/data/base/16384/20493 differ diff --git a/data/base/16384/20494 b/data/base/16384/20494 new file mode 100644 index 0000000..c842731 Binary files /dev/null and b/data/base/16384/20494 differ diff --git a/data/base/16384/20495 b/data/base/16384/20495 new file mode 100644 index 0000000..2d751f9 Binary files /dev/null and b/data/base/16384/20495 differ diff --git a/data/base/16384/20496 b/data/base/16384/20496 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20496 differ diff --git a/data/base/16384/20497 b/data/base/16384/20497 new file mode 100644 index 0000000..7ba24b8 Binary files /dev/null and b/data/base/16384/20497 differ diff --git a/data/base/16384/20498 b/data/base/16384/20498 new file mode 100644 index 0000000..10c069d Binary files /dev/null and b/data/base/16384/20498 differ diff --git a/data/base/16384/20499 b/data/base/16384/20499 new file mode 100644 index 0000000..d6275ba Binary files /dev/null and b/data/base/16384/20499 differ diff --git a/data/base/16384/20500 b/data/base/16384/20500 new file mode 100644 index 0000000..dc80cb5 Binary files /dev/null and b/data/base/16384/20500 differ diff --git a/data/base/16384/20501 b/data/base/16384/20501 new file mode 100644 index 0000000..748b943 Binary files /dev/null and b/data/base/16384/20501 differ diff --git a/data/base/16384/20502 b/data/base/16384/20502 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/20502 differ diff --git a/data/base/16384/20503 b/data/base/16384/20503 new file mode 100644 index 0000000..977e1b6 Binary files /dev/null and b/data/base/16384/20503 differ diff --git a/data/base/16384/20504 b/data/base/16384/20504 new file mode 100644 index 0000000..cdec1a5 Binary files /dev/null and b/data/base/16384/20504 differ diff --git a/data/base/16384/20505 b/data/base/16384/20505 new file mode 100644 index 0000000..533a42d Binary files /dev/null and b/data/base/16384/20505 differ diff --git a/data/base/16384/20506 b/data/base/16384/20506 new file mode 100644 index 0000000..92baf9a Binary files /dev/null and b/data/base/16384/20506 differ diff --git a/data/base/16384/20507 b/data/base/16384/20507 new file mode 100644 index 0000000..c3bf767 Binary files /dev/null and b/data/base/16384/20507 differ diff --git a/data/base/16384/20508 b/data/base/16384/20508 new file mode 100644 index 0000000..48cce13 Binary files /dev/null and b/data/base/16384/20508 differ diff --git a/data/base/16384/20509 b/data/base/16384/20509 new file mode 100644 index 0000000..4b3fc4b Binary files /dev/null and b/data/base/16384/20509 differ diff --git a/data/base/16384/20510 b/data/base/16384/20510 new file mode 100644 index 0000000..0e4e9f9 Binary files /dev/null and b/data/base/16384/20510 differ diff --git a/data/base/16384/20511 b/data/base/16384/20511 new file mode 100644 index 0000000..9fba1af Binary files /dev/null and b/data/base/16384/20511 differ diff --git a/data/base/16384/20512 b/data/base/16384/20512 new file mode 100644 index 0000000..0a90105 Binary files /dev/null and b/data/base/16384/20512 differ diff --git a/data/base/16384/20513 b/data/base/16384/20513 new file mode 100644 index 0000000..1c172ea Binary files /dev/null and b/data/base/16384/20513 differ diff --git a/data/base/16384/20514 b/data/base/16384/20514 new file mode 100644 index 0000000..925e532 Binary files /dev/null and b/data/base/16384/20514 differ diff --git a/data/base/16384/20515 b/data/base/16384/20515 new file mode 100644 index 0000000..9824ab2 Binary files /dev/null and b/data/base/16384/20515 differ diff --git a/data/base/16384/20516 b/data/base/16384/20516 new file mode 100644 index 0000000..afbe8cd Binary files /dev/null and b/data/base/16384/20516 differ diff --git a/data/base/16384/20517 b/data/base/16384/20517 new file mode 100644 index 0000000..5f64ff4 Binary files /dev/null and b/data/base/16384/20517 differ diff --git a/data/base/16384/20518 b/data/base/16384/20518 new file mode 100644 index 0000000..4675c0f Binary files /dev/null and b/data/base/16384/20518 differ diff --git a/data/base/16384/20519 b/data/base/16384/20519 new file mode 100644 index 0000000..4675c0f Binary files /dev/null and b/data/base/16384/20519 differ diff --git a/data/base/16384/20520 b/data/base/16384/20520 new file mode 100644 index 0000000..c7666cd Binary files /dev/null and b/data/base/16384/20520 differ diff --git a/data/base/16384/20521 b/data/base/16384/20521 new file mode 100644 index 0000000..9d5530d Binary files /dev/null and b/data/base/16384/20521 differ diff --git a/data/base/16384/20522 b/data/base/16384/20522 new file mode 100644 index 0000000..8b722ee Binary files /dev/null and b/data/base/16384/20522 differ diff --git a/data/base/16384/20523 b/data/base/16384/20523 new file mode 100644 index 0000000..96ec4a2 Binary files /dev/null and b/data/base/16384/20523 differ diff --git a/data/base/16384/20524 b/data/base/16384/20524 new file mode 100644 index 0000000..8bf6fb2 Binary files /dev/null and b/data/base/16384/20524 differ diff --git a/data/base/16384/20525 b/data/base/16384/20525 new file mode 100644 index 0000000..07bb554 Binary files /dev/null and b/data/base/16384/20525 differ diff --git a/data/base/16384/20526 b/data/base/16384/20526 new file mode 100644 index 0000000..680c9fc Binary files /dev/null and b/data/base/16384/20526 differ diff --git a/data/base/16384/20527 b/data/base/16384/20527 new file mode 100644 index 0000000..194b5d3 Binary files /dev/null and b/data/base/16384/20527 differ diff --git a/data/base/16384/20528 b/data/base/16384/20528 new file mode 100644 index 0000000..7a3d508 Binary files /dev/null and b/data/base/16384/20528 differ diff --git a/data/base/16384/2187 b/data/base/16384/2187 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/2187 differ diff --git a/data/base/16384/2328 b/data/base/16384/2328 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2328_vm b/data/base/16384/2328_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2336 b/data/base/16384/2336 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2336_vm b/data/base/16384/2336_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2337 b/data/base/16384/2337 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/2337 differ diff --git a/data/base/16384/2600 b/data/base/16384/2600 new file mode 100644 index 0000000..980d98e Binary files /dev/null and b/data/base/16384/2600 differ diff --git a/data/base/16384/2600_fsm b/data/base/16384/2600_fsm new file mode 100644 index 0000000..e63ffab Binary files /dev/null and b/data/base/16384/2600_fsm differ diff --git a/data/base/16384/2600_vm b/data/base/16384/2600_vm new file mode 100644 index 0000000..092d0cd Binary files /dev/null and b/data/base/16384/2600_vm differ diff --git a/data/base/16384/2601 b/data/base/16384/2601 new file mode 100644 index 0000000..1d44fa5 Binary files /dev/null and b/data/base/16384/2601 differ diff --git a/data/base/16384/2601_fsm b/data/base/16384/2601_fsm new file mode 100644 index 0000000..0908076 Binary files /dev/null and b/data/base/16384/2601_fsm differ diff --git a/data/base/16384/2601_vm b/data/base/16384/2601_vm new file mode 100644 index 0000000..0c8d813 Binary files /dev/null and b/data/base/16384/2601_vm differ diff --git a/data/base/16384/2602 b/data/base/16384/2602 new file mode 100644 index 0000000..f9ceea7 Binary files /dev/null and b/data/base/16384/2602 differ diff --git a/data/base/16384/2602_fsm b/data/base/16384/2602_fsm new file mode 100644 index 0000000..d0a4a07 Binary files /dev/null and b/data/base/16384/2602_fsm differ diff --git a/data/base/16384/2602_vm b/data/base/16384/2602_vm new file mode 100644 index 0000000..2b36504 Binary files /dev/null and b/data/base/16384/2602_vm differ diff --git a/data/base/16384/2603 b/data/base/16384/2603 new file mode 100644 index 0000000..05e95f5 Binary files /dev/null and b/data/base/16384/2603 differ diff --git a/data/base/16384/2603_fsm b/data/base/16384/2603_fsm new file mode 100644 index 0000000..8ddf62f Binary files /dev/null and b/data/base/16384/2603_fsm differ diff --git a/data/base/16384/2603_vm b/data/base/16384/2603_vm new file mode 100644 index 0000000..4ca4ef5 Binary files /dev/null and b/data/base/16384/2603_vm differ diff --git a/data/base/16384/2604 b/data/base/16384/2604 new file mode 100644 index 0000000..4ad9407 Binary files /dev/null and b/data/base/16384/2604 differ diff --git a/data/base/16384/2604_fsm b/data/base/16384/2604_fsm new file mode 100644 index 0000000..5f60b9a Binary files /dev/null and b/data/base/16384/2604_fsm differ diff --git a/data/base/16384/2604_vm b/data/base/16384/2604_vm new file mode 100644 index 0000000..ebb7427 Binary files /dev/null and b/data/base/16384/2604_vm differ diff --git a/data/base/16384/2605 b/data/base/16384/2605 new file mode 100644 index 0000000..a9f2997 Binary files /dev/null and b/data/base/16384/2605 differ diff --git a/data/base/16384/2605_fsm b/data/base/16384/2605_fsm new file mode 100644 index 0000000..05d7313 Binary files /dev/null and b/data/base/16384/2605_fsm differ diff --git a/data/base/16384/2605_vm b/data/base/16384/2605_vm new file mode 100644 index 0000000..dd51e5c Binary files /dev/null and b/data/base/16384/2605_vm differ diff --git a/data/base/16384/2606 b/data/base/16384/2606 new file mode 100644 index 0000000..af1117b Binary files /dev/null and b/data/base/16384/2606 differ diff --git a/data/base/16384/2606_fsm b/data/base/16384/2606_fsm new file mode 100644 index 0000000..39274fa Binary files /dev/null and b/data/base/16384/2606_fsm differ diff --git a/data/base/16384/2606_vm b/data/base/16384/2606_vm new file mode 100644 index 0000000..1d7f2c6 Binary files /dev/null and b/data/base/16384/2606_vm differ diff --git a/data/base/16384/2607 b/data/base/16384/2607 new file mode 100644 index 0000000..1ec77d5 Binary files /dev/null and b/data/base/16384/2607 differ diff --git a/data/base/16384/2607_fsm b/data/base/16384/2607_fsm new file mode 100644 index 0000000..5b066f1 Binary files /dev/null and b/data/base/16384/2607_fsm differ diff --git a/data/base/16384/2607_vm b/data/base/16384/2607_vm new file mode 100644 index 0000000..4ed3b2c Binary files /dev/null and b/data/base/16384/2607_vm differ diff --git a/data/base/16384/2608 b/data/base/16384/2608 new file mode 100644 index 0000000..067a72b Binary files /dev/null and b/data/base/16384/2608 differ diff --git a/data/base/16384/2608_fsm b/data/base/16384/2608_fsm new file mode 100644 index 0000000..518df7b Binary files /dev/null and b/data/base/16384/2608_fsm differ diff --git a/data/base/16384/2608_vm b/data/base/16384/2608_vm new file mode 100644 index 0000000..b4317b8 Binary files /dev/null and b/data/base/16384/2608_vm differ diff --git a/data/base/16384/2609 b/data/base/16384/2609 new file mode 100644 index 0000000..8d738b1 Binary files /dev/null and b/data/base/16384/2609 differ diff --git a/data/base/16384/2609_fsm b/data/base/16384/2609_fsm new file mode 100644 index 0000000..9862860 Binary files /dev/null and b/data/base/16384/2609_fsm differ diff --git a/data/base/16384/2609_vm b/data/base/16384/2609_vm new file mode 100644 index 0000000..b186627 Binary files /dev/null and b/data/base/16384/2609_vm differ diff --git a/data/base/16384/2610 b/data/base/16384/2610 new file mode 100644 index 0000000..368224d Binary files /dev/null and b/data/base/16384/2610 differ diff --git a/data/base/16384/2610_fsm b/data/base/16384/2610_fsm new file mode 100644 index 0000000..8a25195 Binary files /dev/null and b/data/base/16384/2610_fsm differ diff --git a/data/base/16384/2610_vm b/data/base/16384/2610_vm new file mode 100644 index 0000000..3cb5ea5 Binary files /dev/null and b/data/base/16384/2610_vm differ diff --git a/data/base/16384/2611 b/data/base/16384/2611 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2611_vm b/data/base/16384/2611_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2612 b/data/base/16384/2612 new file mode 100644 index 0000000..3270e29 Binary files /dev/null and b/data/base/16384/2612 differ diff --git a/data/base/16384/2612_fsm b/data/base/16384/2612_fsm new file mode 100644 index 0000000..877976a Binary files /dev/null and b/data/base/16384/2612_fsm differ diff --git a/data/base/16384/2612_vm b/data/base/16384/2612_vm new file mode 100644 index 0000000..0370cc1 Binary files /dev/null and b/data/base/16384/2612_vm differ diff --git a/data/base/16384/2613 b/data/base/16384/2613 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2613_vm b/data/base/16384/2613_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2615 b/data/base/16384/2615 new file mode 100644 index 0000000..b0f7467 Binary files /dev/null and b/data/base/16384/2615 differ diff --git a/data/base/16384/2615_fsm b/data/base/16384/2615_fsm new file mode 100644 index 0000000..948882c Binary files /dev/null and b/data/base/16384/2615_fsm differ diff --git a/data/base/16384/2615_vm b/data/base/16384/2615_vm new file mode 100644 index 0000000..b98b523 Binary files /dev/null and b/data/base/16384/2615_vm differ diff --git a/data/base/16384/2616 b/data/base/16384/2616 new file mode 100644 index 0000000..dd16ef9 Binary files /dev/null and b/data/base/16384/2616 differ diff --git a/data/base/16384/2616_fsm b/data/base/16384/2616_fsm new file mode 100644 index 0000000..671e592 Binary files /dev/null and b/data/base/16384/2616_fsm differ diff --git a/data/base/16384/2616_vm b/data/base/16384/2616_vm new file mode 100644 index 0000000..c3ac9fa Binary files /dev/null and b/data/base/16384/2616_vm differ diff --git a/data/base/16384/2617 b/data/base/16384/2617 new file mode 100644 index 0000000..814c637 Binary files /dev/null and b/data/base/16384/2617 differ diff --git a/data/base/16384/2617_fsm b/data/base/16384/2617_fsm new file mode 100644 index 0000000..90baa94 Binary files /dev/null and b/data/base/16384/2617_fsm differ diff --git a/data/base/16384/2617_vm b/data/base/16384/2617_vm new file mode 100644 index 0000000..b8a7aec Binary files /dev/null and b/data/base/16384/2617_vm differ diff --git a/data/base/16384/2618 b/data/base/16384/2618 new file mode 100644 index 0000000..4e9dc18 Binary files /dev/null and b/data/base/16384/2618 differ diff --git a/data/base/16384/2618_fsm b/data/base/16384/2618_fsm new file mode 100644 index 0000000..bd14159 Binary files /dev/null and b/data/base/16384/2618_fsm differ diff --git a/data/base/16384/2618_vm b/data/base/16384/2618_vm new file mode 100644 index 0000000..92befd7 Binary files /dev/null and b/data/base/16384/2618_vm differ diff --git a/data/base/16384/2619 b/data/base/16384/2619 new file mode 100644 index 0000000..a8bcc14 Binary files /dev/null and b/data/base/16384/2619 differ diff --git a/data/base/16384/2619_fsm b/data/base/16384/2619_fsm new file mode 100644 index 0000000..7627ff0 Binary files /dev/null and b/data/base/16384/2619_fsm differ diff --git a/data/base/16384/2619_vm b/data/base/16384/2619_vm new file mode 100644 index 0000000..0c5cdc1 Binary files /dev/null and b/data/base/16384/2619_vm differ diff --git a/data/base/16384/2620 b/data/base/16384/2620 new file mode 100644 index 0000000..5a477aa Binary files /dev/null and b/data/base/16384/2620 differ diff --git a/data/base/16384/2620_fsm b/data/base/16384/2620_fsm new file mode 100644 index 0000000..708cd8c Binary files /dev/null and b/data/base/16384/2620_fsm differ diff --git a/data/base/16384/2620_vm b/data/base/16384/2620_vm new file mode 100644 index 0000000..2a3709e Binary files /dev/null and b/data/base/16384/2620_vm differ diff --git a/data/base/16384/2650 b/data/base/16384/2650 new file mode 100644 index 0000000..bed34cb Binary files /dev/null and b/data/base/16384/2650 differ diff --git a/data/base/16384/2651 b/data/base/16384/2651 new file mode 100644 index 0000000..4b34967 Binary files /dev/null and b/data/base/16384/2651 differ diff --git a/data/base/16384/2652 b/data/base/16384/2652 new file mode 100644 index 0000000..ccb4c86 Binary files /dev/null and b/data/base/16384/2652 differ diff --git a/data/base/16384/2653 b/data/base/16384/2653 new file mode 100644 index 0000000..fbe21b4 Binary files /dev/null and b/data/base/16384/2653 differ diff --git a/data/base/16384/2654 b/data/base/16384/2654 new file mode 100644 index 0000000..b6973e3 Binary files /dev/null and b/data/base/16384/2654 differ diff --git a/data/base/16384/2655 b/data/base/16384/2655 new file mode 100644 index 0000000..5b2eb49 Binary files /dev/null and b/data/base/16384/2655 differ diff --git a/data/base/16384/2656 b/data/base/16384/2656 new file mode 100644 index 0000000..13a4b59 Binary files /dev/null and b/data/base/16384/2656 differ diff --git a/data/base/16384/2657 b/data/base/16384/2657 new file mode 100644 index 0000000..f4eed28 Binary files /dev/null and b/data/base/16384/2657 differ diff --git a/data/base/16384/2658 b/data/base/16384/2658 new file mode 100644 index 0000000..e2087b8 Binary files /dev/null and b/data/base/16384/2658 differ diff --git a/data/base/16384/2659 b/data/base/16384/2659 new file mode 100644 index 0000000..a809fe8 Binary files /dev/null and b/data/base/16384/2659 differ diff --git a/data/base/16384/2660 b/data/base/16384/2660 new file mode 100644 index 0000000..2dd3d7d Binary files /dev/null and b/data/base/16384/2660 differ diff --git a/data/base/16384/2661 b/data/base/16384/2661 new file mode 100644 index 0000000..781cf2a Binary files /dev/null and b/data/base/16384/2661 differ diff --git a/data/base/16384/2662 b/data/base/16384/2662 new file mode 100644 index 0000000..0003408 Binary files /dev/null and b/data/base/16384/2662 differ diff --git a/data/base/16384/2663 b/data/base/16384/2663 new file mode 100644 index 0000000..5992062 Binary files /dev/null and b/data/base/16384/2663 differ diff --git a/data/base/16384/2664 b/data/base/16384/2664 new file mode 100644 index 0000000..320d2a2 Binary files /dev/null and b/data/base/16384/2664 differ diff --git a/data/base/16384/2665 b/data/base/16384/2665 new file mode 100644 index 0000000..281e576 Binary files /dev/null and b/data/base/16384/2665 differ diff --git a/data/base/16384/2666 b/data/base/16384/2666 new file mode 100644 index 0000000..f9d298f Binary files /dev/null and b/data/base/16384/2666 differ diff --git a/data/base/16384/2667 b/data/base/16384/2667 new file mode 100644 index 0000000..141f885 Binary files /dev/null and b/data/base/16384/2667 differ diff --git a/data/base/16384/2668 b/data/base/16384/2668 new file mode 100644 index 0000000..1a8334e Binary files /dev/null and b/data/base/16384/2668 differ diff --git a/data/base/16384/2669 b/data/base/16384/2669 new file mode 100644 index 0000000..ecdceeb Binary files /dev/null and b/data/base/16384/2669 differ diff --git a/data/base/16384/2670 b/data/base/16384/2670 new file mode 100644 index 0000000..7fb8be1 Binary files /dev/null and b/data/base/16384/2670 differ diff --git a/data/base/16384/2673 b/data/base/16384/2673 new file mode 100644 index 0000000..9d21061 Binary files /dev/null and b/data/base/16384/2673 differ diff --git a/data/base/16384/2674 b/data/base/16384/2674 new file mode 100644 index 0000000..2082c73 Binary files /dev/null and b/data/base/16384/2674 differ diff --git a/data/base/16384/2675 b/data/base/16384/2675 new file mode 100644 index 0000000..0c7d0d5 Binary files /dev/null and b/data/base/16384/2675 differ diff --git a/data/base/16384/2678 b/data/base/16384/2678 new file mode 100644 index 0000000..c1fbda2 Binary files /dev/null and b/data/base/16384/2678 differ diff --git a/data/base/16384/2679 b/data/base/16384/2679 new file mode 100644 index 0000000..50919eb Binary files /dev/null and b/data/base/16384/2679 differ diff --git a/data/base/16384/2680 b/data/base/16384/2680 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/2680 differ diff --git a/data/base/16384/2681 b/data/base/16384/2681 new file mode 100644 index 0000000..510f06a Binary files /dev/null and b/data/base/16384/2681 differ diff --git a/data/base/16384/2682 b/data/base/16384/2682 new file mode 100644 index 0000000..dd81342 Binary files /dev/null and b/data/base/16384/2682 differ diff --git a/data/base/16384/2683 b/data/base/16384/2683 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/2683 differ diff --git a/data/base/16384/2684 b/data/base/16384/2684 new file mode 100644 index 0000000..f5181f6 Binary files /dev/null and b/data/base/16384/2684 differ diff --git a/data/base/16384/2685 b/data/base/16384/2685 new file mode 100644 index 0000000..2eb7c8f Binary files /dev/null and b/data/base/16384/2685 differ diff --git a/data/base/16384/2686 b/data/base/16384/2686 new file mode 100644 index 0000000..3279a51 Binary files /dev/null and b/data/base/16384/2686 differ diff --git a/data/base/16384/2687 b/data/base/16384/2687 new file mode 100644 index 0000000..17e2305 Binary files /dev/null and b/data/base/16384/2687 differ diff --git a/data/base/16384/2688 b/data/base/16384/2688 new file mode 100644 index 0000000..aae5004 Binary files /dev/null and b/data/base/16384/2688 differ diff --git a/data/base/16384/2689 b/data/base/16384/2689 new file mode 100644 index 0000000..801bab2 Binary files /dev/null and b/data/base/16384/2689 differ diff --git a/data/base/16384/2690 b/data/base/16384/2690 new file mode 100644 index 0000000..4f1e2a0 Binary files /dev/null and b/data/base/16384/2690 differ diff --git a/data/base/16384/2691 b/data/base/16384/2691 new file mode 100644 index 0000000..d7aea6f Binary files /dev/null and b/data/base/16384/2691 differ diff --git a/data/base/16384/2692 b/data/base/16384/2692 new file mode 100644 index 0000000..eb49372 Binary files /dev/null and b/data/base/16384/2692 differ diff --git a/data/base/16384/2693 b/data/base/16384/2693 new file mode 100644 index 0000000..98ddf04 Binary files /dev/null and b/data/base/16384/2693 differ diff --git a/data/base/16384/2696 b/data/base/16384/2696 new file mode 100644 index 0000000..9049764 Binary files /dev/null and b/data/base/16384/2696 differ diff --git a/data/base/16384/2699 b/data/base/16384/2699 new file mode 100644 index 0000000..6ce2c4f Binary files /dev/null and b/data/base/16384/2699 differ diff --git a/data/base/16384/2701 b/data/base/16384/2701 new file mode 100644 index 0000000..ef15f4a Binary files /dev/null and b/data/base/16384/2701 differ diff --git a/data/base/16384/2701_fsm b/data/base/16384/2701_fsm new file mode 100644 index 0000000..f788701 Binary files /dev/null and b/data/base/16384/2701_fsm differ diff --git a/data/base/16384/2702 b/data/base/16384/2702 new file mode 100644 index 0000000..63656f4 Binary files /dev/null and b/data/base/16384/2702 differ diff --git a/data/base/16384/2703 b/data/base/16384/2703 new file mode 100644 index 0000000..2158e8d Binary files /dev/null and b/data/base/16384/2703 differ diff --git a/data/base/16384/2704 b/data/base/16384/2704 new file mode 100644 index 0000000..69afadd Binary files /dev/null and b/data/base/16384/2704 differ diff --git a/data/base/16384/2753 b/data/base/16384/2753 new file mode 100644 index 0000000..bec6fa9 Binary files /dev/null and b/data/base/16384/2753 differ diff --git a/data/base/16384/2753_fsm b/data/base/16384/2753_fsm new file mode 100644 index 0000000..e8403db Binary files /dev/null and b/data/base/16384/2753_fsm differ diff --git a/data/base/16384/2753_vm b/data/base/16384/2753_vm new file mode 100644 index 0000000..875c3e8 Binary files /dev/null and b/data/base/16384/2753_vm differ diff --git a/data/base/16384/2754 b/data/base/16384/2754 new file mode 100644 index 0000000..7e1726d Binary files /dev/null and b/data/base/16384/2754 differ diff --git a/data/base/16384/2755 b/data/base/16384/2755 new file mode 100644 index 0000000..1f20059 Binary files /dev/null and b/data/base/16384/2755 differ diff --git a/data/base/16384/2756 b/data/base/16384/2756 new file mode 100644 index 0000000..d211e46 Binary files /dev/null and b/data/base/16384/2756 differ diff --git a/data/base/16384/2757 b/data/base/16384/2757 new file mode 100644 index 0000000..8bd7505 Binary files /dev/null and b/data/base/16384/2757 differ diff --git a/data/base/16384/2830 b/data/base/16384/2830 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2830_vm b/data/base/16384/2830_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2831 b/data/base/16384/2831 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/2831 differ diff --git a/data/base/16384/2832 b/data/base/16384/2832 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2832_vm b/data/base/16384/2832_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2833 b/data/base/16384/2833 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/2833 differ diff --git a/data/base/16384/2834 b/data/base/16384/2834 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2834_vm b/data/base/16384/2834_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2835 b/data/base/16384/2835 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/2835 differ diff --git a/data/base/16384/2836 b/data/base/16384/2836 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2836_vm b/data/base/16384/2836_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2837 b/data/base/16384/2837 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/2837 differ diff --git a/data/base/16384/2838 b/data/base/16384/2838 new file mode 100644 index 0000000..4c2ae1d Binary files /dev/null and b/data/base/16384/2838 differ diff --git a/data/base/16384/2838_fsm b/data/base/16384/2838_fsm new file mode 100644 index 0000000..c2f0170 Binary files /dev/null and b/data/base/16384/2838_fsm differ diff --git a/data/base/16384/2838_vm b/data/base/16384/2838_vm new file mode 100644 index 0000000..606fd5a Binary files /dev/null and b/data/base/16384/2838_vm differ diff --git a/data/base/16384/2839 b/data/base/16384/2839 new file mode 100644 index 0000000..6faa51c Binary files /dev/null and b/data/base/16384/2839 differ diff --git a/data/base/16384/2840 b/data/base/16384/2840 new file mode 100644 index 0000000..8bcce43 Binary files /dev/null and b/data/base/16384/2840 differ diff --git a/data/base/16384/2840_fsm b/data/base/16384/2840_fsm new file mode 100644 index 0000000..92dc483 Binary files /dev/null and b/data/base/16384/2840_fsm differ diff --git a/data/base/16384/2840_vm b/data/base/16384/2840_vm new file mode 100644 index 0000000..f7fb7a0 Binary files /dev/null and b/data/base/16384/2840_vm differ diff --git a/data/base/16384/2841 b/data/base/16384/2841 new file mode 100644 index 0000000..f5ab2e2 Binary files /dev/null and b/data/base/16384/2841 differ diff --git a/data/base/16384/2995 b/data/base/16384/2995 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2995_vm b/data/base/16384/2995_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/2996 b/data/base/16384/2996 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/2996 differ diff --git a/data/base/16384/3079 b/data/base/16384/3079 new file mode 100644 index 0000000..1f24cbc Binary files /dev/null and b/data/base/16384/3079 differ diff --git a/data/base/16384/3079_fsm b/data/base/16384/3079_fsm new file mode 100644 index 0000000..7732d22 Binary files /dev/null and b/data/base/16384/3079_fsm differ diff --git a/data/base/16384/3079_vm b/data/base/16384/3079_vm new file mode 100644 index 0000000..1352a89 Binary files /dev/null and b/data/base/16384/3079_vm differ diff --git a/data/base/16384/3080 b/data/base/16384/3080 new file mode 100644 index 0000000..5b4ef62 Binary files /dev/null and b/data/base/16384/3080 differ diff --git a/data/base/16384/3081 b/data/base/16384/3081 new file mode 100644 index 0000000..9c62959 Binary files /dev/null and b/data/base/16384/3081 differ diff --git a/data/base/16384/3085 b/data/base/16384/3085 new file mode 100644 index 0000000..5fd5684 Binary files /dev/null and b/data/base/16384/3085 differ diff --git a/data/base/16384/3118 b/data/base/16384/3118 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3118_vm b/data/base/16384/3118_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3119 b/data/base/16384/3119 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3119 differ diff --git a/data/base/16384/3164 b/data/base/16384/3164 new file mode 100644 index 0000000..581480f Binary files /dev/null and b/data/base/16384/3164 differ diff --git a/data/base/16384/3256 b/data/base/16384/3256 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3256_vm b/data/base/16384/3256_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3257 b/data/base/16384/3257 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3257 differ diff --git a/data/base/16384/3258 b/data/base/16384/3258 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3258 differ diff --git a/data/base/16384/3394 b/data/base/16384/3394 new file mode 100644 index 0000000..abb69f6 Binary files /dev/null and b/data/base/16384/3394 differ diff --git a/data/base/16384/3394_fsm b/data/base/16384/3394_fsm new file mode 100644 index 0000000..b0cde0f Binary files /dev/null and b/data/base/16384/3394_fsm differ diff --git a/data/base/16384/3394_vm b/data/base/16384/3394_vm new file mode 100644 index 0000000..8f478b3 Binary files /dev/null and b/data/base/16384/3394_vm differ diff --git a/data/base/16384/3395 b/data/base/16384/3395 new file mode 100644 index 0000000..4cb7af3 Binary files /dev/null and b/data/base/16384/3395 differ diff --git a/data/base/16384/3455 b/data/base/16384/3455 new file mode 100644 index 0000000..20e0dd6 Binary files /dev/null and b/data/base/16384/3455 differ diff --git a/data/base/16384/3456 b/data/base/16384/3456 new file mode 100644 index 0000000..ce3d787 Binary files /dev/null and b/data/base/16384/3456 differ diff --git a/data/base/16384/3456_fsm b/data/base/16384/3456_fsm new file mode 100644 index 0000000..d7469db Binary files /dev/null and b/data/base/16384/3456_fsm differ diff --git a/data/base/16384/3456_vm b/data/base/16384/3456_vm new file mode 100644 index 0000000..deb5f8b Binary files /dev/null and b/data/base/16384/3456_vm differ diff --git a/data/base/16384/3466 b/data/base/16384/3466 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3466_vm b/data/base/16384/3466_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3467 b/data/base/16384/3467 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3467 differ diff --git a/data/base/16384/3468 b/data/base/16384/3468 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3468 differ diff --git a/data/base/16384/3501 b/data/base/16384/3501 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3501_vm b/data/base/16384/3501_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3502 b/data/base/16384/3502 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3502 differ diff --git a/data/base/16384/3503 b/data/base/16384/3503 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3503 differ diff --git a/data/base/16384/3534 b/data/base/16384/3534 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3534 differ diff --git a/data/base/16384/3541 b/data/base/16384/3541 new file mode 100644 index 0000000..ad69913 Binary files /dev/null and b/data/base/16384/3541 differ diff --git a/data/base/16384/3541_fsm b/data/base/16384/3541_fsm new file mode 100644 index 0000000..62f0156 Binary files /dev/null and b/data/base/16384/3541_fsm differ diff --git a/data/base/16384/3541_vm b/data/base/16384/3541_vm new file mode 100644 index 0000000..5760fba Binary files /dev/null and b/data/base/16384/3541_vm differ diff --git a/data/base/16384/3542 b/data/base/16384/3542 new file mode 100644 index 0000000..aad1202 Binary files /dev/null and b/data/base/16384/3542 differ diff --git a/data/base/16384/3574 b/data/base/16384/3574 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3574 differ diff --git a/data/base/16384/3575 b/data/base/16384/3575 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3575 differ diff --git a/data/base/16384/3576 b/data/base/16384/3576 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3576_vm b/data/base/16384/3576_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3596 b/data/base/16384/3596 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3596_vm b/data/base/16384/3596_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3597 b/data/base/16384/3597 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3597 differ diff --git a/data/base/16384/3598 b/data/base/16384/3598 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3598_vm b/data/base/16384/3598_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/3599 b/data/base/16384/3599 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/3599 differ diff --git a/data/base/16384/3600 b/data/base/16384/3600 new file mode 100644 index 0000000..6a1944f Binary files /dev/null and b/data/base/16384/3600 differ diff --git a/data/base/16384/3600_fsm b/data/base/16384/3600_fsm new file mode 100644 index 0000000..ffd4b15 Binary files /dev/null and b/data/base/16384/3600_fsm differ diff --git a/data/base/16384/3600_vm b/data/base/16384/3600_vm new file mode 100644 index 0000000..884f674 Binary files /dev/null and b/data/base/16384/3600_vm differ diff --git a/data/base/16384/3601 b/data/base/16384/3601 new file mode 100644 index 0000000..065e4e1 Binary files /dev/null and b/data/base/16384/3601 differ diff --git a/data/base/16384/3601_fsm b/data/base/16384/3601_fsm new file mode 100644 index 0000000..7732d22 Binary files /dev/null and b/data/base/16384/3601_fsm differ diff --git a/data/base/16384/3601_vm b/data/base/16384/3601_vm new file mode 100644 index 0000000..53829d3 Binary files /dev/null and b/data/base/16384/3601_vm differ diff --git a/data/base/16384/3602 b/data/base/16384/3602 new file mode 100644 index 0000000..b135a1a Binary files /dev/null and b/data/base/16384/3602 differ diff --git a/data/base/16384/3602_fsm b/data/base/16384/3602_fsm new file mode 100644 index 0000000..7cbf834 Binary files /dev/null and b/data/base/16384/3602_fsm differ diff --git a/data/base/16384/3602_vm b/data/base/16384/3602_vm new file mode 100644 index 0000000..e14dc46 Binary files /dev/null and b/data/base/16384/3602_vm differ diff --git a/data/base/16384/3603 b/data/base/16384/3603 new file mode 100644 index 0000000..520bbaa Binary files /dev/null and b/data/base/16384/3603 differ diff --git a/data/base/16384/3603_fsm b/data/base/16384/3603_fsm new file mode 100644 index 0000000..6d00d68 Binary files /dev/null and b/data/base/16384/3603_fsm differ diff --git a/data/base/16384/3603_vm b/data/base/16384/3603_vm new file mode 100644 index 0000000..f1b0906 Binary files /dev/null and b/data/base/16384/3603_vm differ diff --git a/data/base/16384/3604 b/data/base/16384/3604 new file mode 100644 index 0000000..d883ba6 Binary files /dev/null and b/data/base/16384/3604 differ diff --git a/data/base/16384/3605 b/data/base/16384/3605 new file mode 100644 index 0000000..17069a0 Binary files /dev/null and b/data/base/16384/3605 differ diff --git a/data/base/16384/3606 b/data/base/16384/3606 new file mode 100644 index 0000000..89cc066 Binary files /dev/null and b/data/base/16384/3606 differ diff --git a/data/base/16384/3607 b/data/base/16384/3607 new file mode 100644 index 0000000..c5209f0 Binary files /dev/null and b/data/base/16384/3607 differ diff --git a/data/base/16384/3608 b/data/base/16384/3608 new file mode 100644 index 0000000..8966cc3 Binary files /dev/null and b/data/base/16384/3608 differ diff --git a/data/base/16384/3609 b/data/base/16384/3609 new file mode 100644 index 0000000..e491b31 Binary files /dev/null and b/data/base/16384/3609 differ diff --git a/data/base/16384/3712 b/data/base/16384/3712 new file mode 100644 index 0000000..bac4859 Binary files /dev/null and b/data/base/16384/3712 differ diff --git a/data/base/16384/3764 b/data/base/16384/3764 new file mode 100644 index 0000000..1bcd058 Binary files /dev/null and b/data/base/16384/3764 differ diff --git a/data/base/16384/3764_fsm b/data/base/16384/3764_fsm new file mode 100644 index 0000000..d041693 Binary files /dev/null and b/data/base/16384/3764_fsm differ diff --git a/data/base/16384/3764_vm b/data/base/16384/3764_vm new file mode 100644 index 0000000..d34e273 Binary files /dev/null and b/data/base/16384/3764_vm differ diff --git a/data/base/16384/3766 b/data/base/16384/3766 new file mode 100644 index 0000000..5bc8fb7 Binary files /dev/null and b/data/base/16384/3766 differ diff --git a/data/base/16384/3767 b/data/base/16384/3767 new file mode 100644 index 0000000..0a55910 Binary files /dev/null and b/data/base/16384/3767 differ diff --git a/data/base/16384/548 b/data/base/16384/548 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/548 differ diff --git a/data/base/16384/549 b/data/base/16384/549 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/549 differ diff --git a/data/base/16384/826 b/data/base/16384/826 new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/826_vm b/data/base/16384/826_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/base/16384/827 b/data/base/16384/827 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/827 differ diff --git a/data/base/16384/828 b/data/base/16384/828 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/base/16384/828 differ diff --git a/data/base/16384/PG_VERSION b/data/base/16384/PG_VERSION new file mode 100644 index 0000000..c026ac8 --- /dev/null +++ b/data/base/16384/PG_VERSION @@ -0,0 +1 @@ +9.6 diff --git a/data/base/16384/pg_filenode.map b/data/base/16384/pg_filenode.map new file mode 100644 index 0000000..428c97e Binary files /dev/null and b/data/base/16384/pg_filenode.map differ diff --git a/data/base/16384/pg_internal.init b/data/base/16384/pg_internal.init new file mode 100644 index 0000000..531c04f Binary files /dev/null and b/data/base/16384/pg_internal.init differ diff --git a/data/global/1136 b/data/global/1136 new file mode 100644 index 0000000..3d03f0b Binary files /dev/null and b/data/global/1136 differ diff --git a/data/global/1136_fsm b/data/global/1136_fsm new file mode 100644 index 0000000..929c96e Binary files /dev/null and b/data/global/1136_fsm differ diff --git a/data/global/1136_vm b/data/global/1136_vm new file mode 100644 index 0000000..97c0d63 Binary files /dev/null and b/data/global/1136_vm differ diff --git a/data/global/1137 b/data/global/1137 new file mode 100644 index 0000000..4c05bca Binary files /dev/null and b/data/global/1137 differ diff --git a/data/global/1213 b/data/global/1213 new file mode 100644 index 0000000..bf1087e Binary files /dev/null and b/data/global/1213 differ diff --git a/data/global/1213_fsm b/data/global/1213_fsm new file mode 100644 index 0000000..86074be Binary files /dev/null and b/data/global/1213_fsm differ diff --git a/data/global/1213_vm b/data/global/1213_vm new file mode 100644 index 0000000..c7db81a Binary files /dev/null and b/data/global/1213_vm differ diff --git a/data/global/1214 b/data/global/1214 new file mode 100644 index 0000000..be5b12d Binary files /dev/null and b/data/global/1214 differ diff --git a/data/global/1214_fsm b/data/global/1214_fsm new file mode 100644 index 0000000..4d4125b Binary files /dev/null and b/data/global/1214_fsm differ diff --git a/data/global/1214_vm b/data/global/1214_vm new file mode 100644 index 0000000..7a91143 Binary files /dev/null and b/data/global/1214_vm differ diff --git a/data/global/1232 b/data/global/1232 new file mode 100644 index 0000000..596342a Binary files /dev/null and b/data/global/1232 differ diff --git a/data/global/1233 b/data/global/1233 new file mode 100644 index 0000000..8bbf81c Binary files /dev/null and b/data/global/1233 differ diff --git a/data/global/1260 b/data/global/1260 new file mode 100644 index 0000000..d41ad3e Binary files /dev/null and b/data/global/1260 differ diff --git a/data/global/1260_fsm b/data/global/1260_fsm new file mode 100644 index 0000000..98dc620 Binary files /dev/null and b/data/global/1260_fsm differ diff --git a/data/global/1260_vm b/data/global/1260_vm new file mode 100644 index 0000000..197b8aa Binary files /dev/null and b/data/global/1260_vm differ diff --git a/data/global/1261 b/data/global/1261 new file mode 100644 index 0000000..e69de29 diff --git a/data/global/1261_vm b/data/global/1261_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/global/1262 b/data/global/1262 new file mode 100644 index 0000000..3e7b6cd Binary files /dev/null and b/data/global/1262 differ diff --git a/data/global/1262_fsm b/data/global/1262_fsm new file mode 100644 index 0000000..b49966f Binary files /dev/null and b/data/global/1262_fsm differ diff --git a/data/global/1262_vm b/data/global/1262_vm new file mode 100644 index 0000000..0cb9003 Binary files /dev/null and b/data/global/1262_vm differ diff --git a/data/global/2396 b/data/global/2396 new file mode 100644 index 0000000..df87aea Binary files /dev/null and b/data/global/2396 differ diff --git a/data/global/2396_fsm b/data/global/2396_fsm new file mode 100644 index 0000000..7a4f24f Binary files /dev/null and b/data/global/2396_fsm differ diff --git a/data/global/2396_vm b/data/global/2396_vm new file mode 100644 index 0000000..8c0f01a Binary files /dev/null and b/data/global/2396_vm differ diff --git a/data/global/2397 b/data/global/2397 new file mode 100644 index 0000000..f7600f7 Binary files /dev/null and b/data/global/2397 differ diff --git a/data/global/2671 b/data/global/2671 new file mode 100644 index 0000000..2b66fc1 Binary files /dev/null and b/data/global/2671 differ diff --git a/data/global/2672 b/data/global/2672 new file mode 100644 index 0000000..6f7f4eb Binary files /dev/null and b/data/global/2672 differ diff --git a/data/global/2676 b/data/global/2676 new file mode 100644 index 0000000..20ff62d Binary files /dev/null and b/data/global/2676 differ diff --git a/data/global/2677 b/data/global/2677 new file mode 100644 index 0000000..9968b8a Binary files /dev/null and b/data/global/2677 differ diff --git a/data/global/2694 b/data/global/2694 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/global/2694 differ diff --git a/data/global/2695 b/data/global/2695 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/global/2695 differ diff --git a/data/global/2697 b/data/global/2697 new file mode 100644 index 0000000..fbac73a Binary files /dev/null and b/data/global/2697 differ diff --git a/data/global/2698 b/data/global/2698 new file mode 100644 index 0000000..5f0bd04 Binary files /dev/null and b/data/global/2698 differ diff --git a/data/global/2846 b/data/global/2846 new file mode 100644 index 0000000..e69de29 diff --git a/data/global/2846_vm b/data/global/2846_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/global/2847 b/data/global/2847 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/global/2847 differ diff --git a/data/global/2964 b/data/global/2964 new file mode 100644 index 0000000..e69de29 diff --git a/data/global/2964_vm b/data/global/2964_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/global/2965 b/data/global/2965 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/global/2965 differ diff --git a/data/global/2966 b/data/global/2966 new file mode 100644 index 0000000..e69de29 diff --git a/data/global/2966_vm b/data/global/2966_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/global/2967 b/data/global/2967 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/global/2967 differ diff --git a/data/global/3592 b/data/global/3592 new file mode 100644 index 0000000..e69de29 diff --git a/data/global/3592_vm b/data/global/3592_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/global/3593 b/data/global/3593 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/global/3593 differ diff --git a/data/global/4060 b/data/global/4060 new file mode 100644 index 0000000..e69de29 diff --git a/data/global/4060_vm b/data/global/4060_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/global/4061 b/data/global/4061 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/global/4061 differ diff --git a/data/global/6000 b/data/global/6000 new file mode 100644 index 0000000..e69de29 diff --git a/data/global/6000_vm b/data/global/6000_vm new file mode 100644 index 0000000..e69de29 diff --git a/data/global/6001 b/data/global/6001 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/global/6001 differ diff --git a/data/global/6002 b/data/global/6002 new file mode 100644 index 0000000..8bcceff Binary files /dev/null and b/data/global/6002 differ diff --git a/data/global/pg_control b/data/global/pg_control new file mode 100644 index 0000000..33c21e2 Binary files /dev/null and b/data/global/pg_control differ diff --git a/data/global/pg_filenode.map b/data/global/pg_filenode.map new file mode 100644 index 0000000..99e1287 Binary files /dev/null and b/data/global/pg_filenode.map differ diff --git a/data/global/pg_internal.init b/data/global/pg_internal.init new file mode 100644 index 0000000..6bececc Binary files /dev/null and b/data/global/pg_internal.init differ diff --git a/data/pg_clog/0000 b/data/pg_clog/0000 new file mode 100644 index 0000000..b9b5d82 Binary files /dev/null and b/data/pg_clog/0000 differ diff --git a/data/pg_hba.conf b/data/pg_hba.conf new file mode 100644 index 0000000..fd92c85 --- /dev/null +++ b/data/pg_hba.conf @@ -0,0 +1,95 @@ +# PostgreSQL Client Authentication Configuration File +# =================================================== +# +# Refer to the "Client Authentication" section in the PostgreSQL +# documentation for a complete description of this file. A short +# synopsis follows. +# +# This file controls: which hosts are allowed to connect, how clients +# are authenticated, which PostgreSQL user names they can use, which +# databases they can access. Records take one of these forms: +# +# local DATABASE USER METHOD [OPTIONS] +# host DATABASE USER ADDRESS METHOD [OPTIONS] +# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] +# +# (The uppercase items must be replaced by actual values.) +# +# The first field is the connection type: "local" is a Unix-domain +# socket, "host" is either a plain or SSL-encrypted TCP/IP socket, +# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a +# plain TCP/IP socket. +# +# DATABASE can be "all", "sameuser", "samerole", "replication", a +# database name, or a comma-separated list thereof. The "all" +# keyword does not match "replication". Access to replication +# must be enabled in a separate record (see example below). +# +# USER can be "all", a user name, a group name prefixed with "+", or a +# comma-separated list thereof. In both the DATABASE and USER fields +# you can also write a file name prefixed with "@" to include names +# from a separate file. +# +# ADDRESS specifies the set of hosts the record matches. It can be a +# host name, or it is made up of an IP address and a CIDR mask that is +# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that +# specifies the number of significant bits in the mask. A host name +# that starts with a dot (.) matches a suffix of the actual host name. +# Alternatively, you can write an IP address and netmask in separate +# columns to specify the set of hosts. Instead of a CIDR-address, you +# can write "samehost" to match any of the server's own IP addresses, +# or "samenet" to match any address in any subnet that the server is +# directly connected to. +# +# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi", +# "ident", "peer", "pam", "ldap", "radius" or "cert". Note that +# "password" sends passwords in clear text; "md5" is preferred since +# it sends encrypted passwords. +# +# OPTIONS are a set of options for the authentication in the format +# NAME=VALUE. The available options depend on the different +# authentication methods -- refer to the "Client Authentication" +# section in the documentation for a list of which options are +# available for which authentication methods. +# +# Database and user names containing spaces, commas, quotes and other +# special characters must be quoted. Quoting one of the keywords +# "all", "sameuser", "samerole" or "replication" makes the name lose +# its special character, and just match a database or username with +# that name. +# +# This file is read on server startup and when the postmaster receives +# a SIGHUP signal. If you edit the file on a running system, you have +# to SIGHUP the postmaster for the changes to take effect. You can +# use "pg_ctl reload" to do that. + +# Put your actual configuration here +# ---------------------------------- +# +# If you want to allow non-local connections, you need to add more +# "host" records. In that case you will also need to make PostgreSQL +# listen on a non-local interface via the listen_addresses +# configuration parameter, or via the -i or -h command line switches. + +# CAUTION: Configuring the system for local "trust" authentication +# allows any local user to connect as any PostgreSQL user, including +# the database superuser. If you do not trust all your local users, +# use another authentication method. + + +# TYPE DATABASE USER ADDRESS METHOD + +# "local" is for Unix domain socket connections only +local all all trust +# IPv4 local connections: +host all all 127.0.0.1/32 trust +# IPv6 local connections: +host all all ::1/128 trust +# Allow replication connections from localhost, by a user with the +# replication privilege. +#local replication postgres trust +#host replication postgres 127.0.0.1/32 trust +#host replication postgres ::1/128 trust + +host all all all md5 diff --git a/data/pg_ident.conf b/data/pg_ident.conf new file mode 100644 index 0000000..a5870e6 --- /dev/null +++ b/data/pg_ident.conf @@ -0,0 +1,42 @@ +# PostgreSQL User Name Maps +# ========================= +# +# Refer to the PostgreSQL documentation, chapter "Client +# Authentication" for a complete description. A short synopsis +# follows. +# +# This file controls PostgreSQL user name mapping. It maps external +# user names to their corresponding PostgreSQL user names. Records +# are of the form: +# +# MAPNAME SYSTEM-USERNAME PG-USERNAME +# +# (The uppercase quantities must be replaced by actual values.) +# +# MAPNAME is the (otherwise freely chosen) map name that was used in +# pg_hba.conf. SYSTEM-USERNAME is the detected user name of the +# client. PG-USERNAME is the requested PostgreSQL user name. The +# existence of a record specifies that SYSTEM-USERNAME may connect as +# PG-USERNAME. +# +# If SYSTEM-USERNAME starts with a slash (/), it will be treated as a +# regular expression. Optionally this can contain a capture (a +# parenthesized subexpression). The substring matching the capture +# will be substituted for \1 (backslash-one) if present in +# PG-USERNAME. +# +# Multiple maps may be specified in this file and used by pg_hba.conf. +# +# No map names are defined in the default configuration. If all +# system user names and PostgreSQL user names are the same, you don't +# need anything in this file. +# +# This file is read on server startup and when the postmaster receives +# a SIGHUP signal. If you edit the file on a running system, you have +# to SIGHUP the postmaster for the changes to take effect. You can +# use "pg_ctl reload" to do that. + +# Put your actual configuration here +# ---------------------------------- + +# MAPNAME SYSTEM-USERNAME PG-USERNAME diff --git a/data/pg_multixact/members/0000 b/data/pg_multixact/members/0000 new file mode 100644 index 0000000..6d17cf9 Binary files /dev/null and b/data/pg_multixact/members/0000 differ diff --git a/data/pg_multixact/offsets/0000 b/data/pg_multixact/offsets/0000 new file mode 100644 index 0000000..6d17cf9 Binary files /dev/null and b/data/pg_multixact/offsets/0000 differ diff --git a/data/pg_notify/0000 b/data/pg_notify/0000 new file mode 100644 index 0000000..6d17cf9 Binary files /dev/null and b/data/pg_notify/0000 differ diff --git a/data/pg_stat/db_0.stat b/data/pg_stat/db_0.stat new file mode 100644 index 0000000..b78140a Binary files /dev/null and b/data/pg_stat/db_0.stat differ diff --git a/data/pg_stat/db_12407.stat b/data/pg_stat/db_12407.stat new file mode 100644 index 0000000..cbe6cd2 Binary files /dev/null and b/data/pg_stat/db_12407.stat differ diff --git a/data/pg_stat/db_16384.stat b/data/pg_stat/db_16384.stat new file mode 100644 index 0000000..c3be929 Binary files /dev/null and b/data/pg_stat/db_16384.stat differ diff --git a/data/pg_stat/global.stat b/data/pg_stat/global.stat new file mode 100644 index 0000000..d0544d0 Binary files /dev/null and b/data/pg_stat/global.stat differ diff --git a/data/pg_subtrans/0000 b/data/pg_subtrans/0000 new file mode 100644 index 0000000..b9a42fc Binary files /dev/null and b/data/pg_subtrans/0000 differ diff --git a/data/pg_xlog/00000001000000000000000B b/data/pg_xlog/00000001000000000000000B new file mode 100644 index 0000000..8187060 Binary files /dev/null and b/data/pg_xlog/00000001000000000000000B differ diff --git a/data/pg_xlog/00000001000000000000000C b/data/pg_xlog/00000001000000000000000C new file mode 100644 index 0000000..1d88a93 Binary files /dev/null and b/data/pg_xlog/00000001000000000000000C differ diff --git a/data/pg_xlog/00000001000000000000000D b/data/pg_xlog/00000001000000000000000D new file mode 100644 index 0000000..17ab98b Binary files /dev/null and b/data/pg_xlog/00000001000000000000000D differ diff --git a/data/pg_xlog/00000001000000000000000E b/data/pg_xlog/00000001000000000000000E new file mode 100644 index 0000000..b5c324f Binary files /dev/null and b/data/pg_xlog/00000001000000000000000E differ diff --git a/data/pg_xlog/00000001000000000000000F b/data/pg_xlog/00000001000000000000000F new file mode 100644 index 0000000..e1b826a Binary files /dev/null and b/data/pg_xlog/00000001000000000000000F differ diff --git a/data/pg_xlog/000000010000000000000010 b/data/pg_xlog/000000010000000000000010 new file mode 100644 index 0000000..44f9306 Binary files /dev/null and b/data/pg_xlog/000000010000000000000010 differ diff --git a/data/pg_xlog/000000010000000000000011 b/data/pg_xlog/000000010000000000000011 new file mode 100644 index 0000000..ca51cfe Binary files /dev/null and b/data/pg_xlog/000000010000000000000011 differ diff --git a/data/pg_xlog/000000010000000000000012 b/data/pg_xlog/000000010000000000000012 new file mode 100644 index 0000000..f1eb82c Binary files /dev/null and b/data/pg_xlog/000000010000000000000012 differ diff --git a/data/pg_xlog/000000010000000000000013 b/data/pg_xlog/000000010000000000000013 new file mode 100644 index 0000000..98549e0 Binary files /dev/null and b/data/pg_xlog/000000010000000000000013 differ diff --git a/data/pg_xlog/000000010000000000000014 b/data/pg_xlog/000000010000000000000014 new file mode 100644 index 0000000..c5a0d09 Binary files /dev/null and b/data/pg_xlog/000000010000000000000014 differ diff --git a/data/pg_xlog/000000010000000000000015 b/data/pg_xlog/000000010000000000000015 new file mode 100644 index 0000000..6ac21df Binary files /dev/null and b/data/pg_xlog/000000010000000000000015 differ diff --git a/data/postgresql.auto.conf b/data/postgresql.auto.conf new file mode 100644 index 0000000..af7125e --- /dev/null +++ b/data/postgresql.auto.conf @@ -0,0 +1,2 @@ +# Do not edit this file manually! +# It will be overwritten by the ALTER SYSTEM command. diff --git a/data/postgresql.conf b/data/postgresql.conf new file mode 100644 index 0000000..3c7cf2c --- /dev/null +++ b/data/postgresql.conf @@ -0,0 +1,643 @@ +# ----------------------------- +# PostgreSQL configuration file +# ----------------------------- +# +# This file consists of lines of the form: +# +# name = value +# +# (The "=" is optional.) Whitespace may be used. Comments are introduced with +# "#" anywhere on a line. The complete list of parameter names and allowed +# values can be found in the PostgreSQL documentation. +# +# The commented-out settings shown in this file represent the default values. +# Re-commenting a setting is NOT sufficient to revert it to the default value; +# you need to reload the server. +# +# This file is read on server startup and when the server receives a SIGHUP +# signal. If you edit the file on a running system, you have to SIGHUP the +# server for the changes to take effect, or use "pg_ctl reload". Some +# parameters, which are marked below, require a server shutdown and restart to +# take effect. +# +# Any parameter can also be given as a command-line option to the server, e.g., +# "postgres -c log_connections=on". Some parameters can be changed at run time +# with the "SET" SQL command. +# +# Memory units: kB = kilobytes Time units: ms = milliseconds +# MB = megabytes s = seconds +# GB = gigabytes min = minutes +# TB = terabytes h = hours +# d = days + + +#------------------------------------------------------------------------------ +# FILE LOCATIONS +#------------------------------------------------------------------------------ + +# The default values of these variables are driven from the -D command-line +# option or PGDATA environment variable, represented here as ConfigDir. + +#data_directory = 'ConfigDir' # use data in another directory + # (change requires restart) +#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file + # (change requires restart) +#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file + # (change requires restart) + +# If external_pid_file is not explicitly set, no extra PID file is written. +#external_pid_file = '' # write an extra PID file + # (change requires restart) + + +#------------------------------------------------------------------------------ +# CONNECTIONS AND AUTHENTICATION +#------------------------------------------------------------------------------ + +# - Connection Settings - + +listen_addresses = '*' + # comma-separated list of addresses; + # defaults to 'localhost'; use '*' for all + # (change requires restart) +#port = 5432 # (change requires restart) +max_connections = 100 # (change requires restart) +#superuser_reserved_connections = 3 # (change requires restart) +#unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories + # (change requires restart) +#unix_socket_group = '' # (change requires restart) +#unix_socket_permissions = 0777 # begin with 0 to use octal notation + # (change requires restart) +#bonjour = off # advertise server via Bonjour + # (change requires restart) +#bonjour_name = '' # defaults to the computer name + # (change requires restart) + +# - Security and Authentication - + +#authentication_timeout = 1min # 1s-600s +#ssl = off # (change requires restart) +#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers + # (change requires restart) +#ssl_prefer_server_ciphers = on # (change requires restart) +#ssl_ecdh_curve = 'prime256v1' # (change requires restart) +#ssl_cert_file = 'server.crt' # (change requires restart) +#ssl_key_file = 'server.key' # (change requires restart) +#ssl_ca_file = '' # (change requires restart) +#ssl_crl_file = '' # (change requires restart) +#password_encryption = on +#db_user_namespace = off +#row_security = on + +# GSSAPI using Kerberos +#krb_server_keyfile = '' +#krb_caseins_users = off + +# - TCP Keepalives - +# see "man 7 tcp" for details + +#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; + # 0 selects the system default +#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; + # 0 selects the system default +#tcp_keepalives_count = 0 # TCP_KEEPCNT; + # 0 selects the system default + + +#------------------------------------------------------------------------------ +# RESOURCE USAGE (except WAL) +#------------------------------------------------------------------------------ + +# - Memory - + +shared_buffers = 128MB # min 128kB + # (change requires restart) +#huge_pages = try # on, off, or try + # (change requires restart) +#temp_buffers = 8MB # min 800kB +#max_prepared_transactions = 0 # zero disables the feature + # (change requires restart) +# Caution: it is not advisable to set max_prepared_transactions nonzero unless +# you actively intend to use prepared transactions. +#work_mem = 4MB # min 64kB +#maintenance_work_mem = 64MB # min 1MB +#replacement_sort_tuples = 150000 # limits use of replacement selection sort +#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem +#max_stack_depth = 2MB # min 100kB +dynamic_shared_memory_type = posix # the default is the first option + # supported by the operating system: + # posix + # sysv + # windows + # mmap + # use none to disable dynamic shared memory + # (change requires restart) + +# - Disk - + +#temp_file_limit = -1 # limits per-process temp file space + # in kB, or -1 for no limit + +# - Kernel Resource Usage - + +#max_files_per_process = 1000 # min 25 + # (change requires restart) +#shared_preload_libraries = '' # (change requires restart) + +# - Cost-Based Vacuum Delay - + +#vacuum_cost_delay = 0 # 0-100 milliseconds +#vacuum_cost_page_hit = 1 # 0-10000 credits +#vacuum_cost_page_miss = 10 # 0-10000 credits +#vacuum_cost_page_dirty = 20 # 0-10000 credits +#vacuum_cost_limit = 200 # 1-10000 credits + +# - Background Writer - + +#bgwriter_delay = 200ms # 10-10000ms between rounds +#bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round +#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round +#bgwriter_flush_after = 512kB # measured in pages, 0 disables + +# - Asynchronous Behavior - + +#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching +#max_worker_processes = 8 # (change requires restart) +#max_parallel_workers_per_gather = 0 # taken from max_worker_processes +#old_snapshot_threshold = -1 # 1min-60d; -1 disables; 0 is immediate + # (change requires restart) +#backend_flush_after = 0 # measured in pages, 0 disables + + +#------------------------------------------------------------------------------ +# WRITE AHEAD LOG +#------------------------------------------------------------------------------ + +# - Settings - + +#wal_level = minimal # minimal, replica, or logical + # (change requires restart) +#fsync = on # flush data to disk for crash safety + # (turning this off can cause + # unrecoverable data corruption) +#synchronous_commit = on # synchronization level; + # off, local, remote_write, remote_apply, or on +#wal_sync_method = fsync # the default is the first option + # supported by the operating system: + # open_datasync + # fdatasync (default on Linux) + # fsync + # fsync_writethrough + # open_sync +#full_page_writes = on # recover from partial page writes +#wal_compression = off # enable compression of full-page writes +#wal_log_hints = off # also do full page writes of non-critical updates + # (change requires restart) +#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers + # (change requires restart) +#wal_writer_delay = 200ms # 1-10000 milliseconds +#wal_writer_flush_after = 1MB # measured in pages, 0 disables + +#commit_delay = 0 # range 0-100000, in microseconds +#commit_siblings = 5 # range 1-1000 + +# - Checkpoints - + +#checkpoint_timeout = 5min # range 30s-1d +#max_wal_size = 1GB +#min_wal_size = 80MB +#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0 +#checkpoint_flush_after = 256kB # measured in pages, 0 disables +#checkpoint_warning = 30s # 0 disables + +# - Archiving - + +#archive_mode = off # enables archiving; off, on, or always + # (change requires restart) +#archive_command = '' # command to use to archive a logfile segment + # placeholders: %p = path of file to archive + # %f = file name only + # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' +#archive_timeout = 0 # force a logfile segment switch after this + # number of seconds; 0 disables + + +#------------------------------------------------------------------------------ +# REPLICATION +#------------------------------------------------------------------------------ + +# - Sending Server(s) - + +# Set these on the master and on any standby that will send replication data. + +#max_wal_senders = 0 # max number of walsender processes + # (change requires restart) +#wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables +#wal_sender_timeout = 60s # in milliseconds; 0 disables + +#max_replication_slots = 0 # max number of replication slots + # (change requires restart) +#track_commit_timestamp = off # collect timestamp of transaction commit + # (change requires restart) + +# - Master Server - + +# These settings are ignored on a standby server. + +#synchronous_standby_names = '' # standby servers that provide sync rep + # number of sync standbys and comma-separated list of application_name + # from standby(s); '*' = all +#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed + +# - Standby Servers - + +# These settings are ignored on a master server. + +#hot_standby = off # "on" allows queries during recovery + # (change requires restart) +#max_standby_archive_delay = 30s # max delay before canceling queries + # when reading WAL from archive; + # -1 allows indefinite delay +#max_standby_streaming_delay = 30s # max delay before canceling queries + # when reading streaming WAL; + # -1 allows indefinite delay +#wal_receiver_status_interval = 10s # send replies at least this often + # 0 disables +#hot_standby_feedback = off # send info from standby to prevent + # query conflicts +#wal_receiver_timeout = 60s # time that receiver waits for + # communication from master + # in milliseconds; 0 disables +#wal_retrieve_retry_interval = 5s # time to wait before retrying to + # retrieve WAL after a failed attempt + + +#------------------------------------------------------------------------------ +# QUERY TUNING +#------------------------------------------------------------------------------ + +# - Planner Method Configuration - + +#enable_bitmapscan = on +#enable_hashagg = on +#enable_hashjoin = on +#enable_indexscan = on +#enable_indexonlyscan = on +#enable_material = on +#enable_mergejoin = on +#enable_nestloop = on +#enable_seqscan = on +#enable_sort = on +#enable_tidscan = on + +# - Planner Cost Constants - + +#seq_page_cost = 1.0 # measured on an arbitrary scale +#random_page_cost = 4.0 # same scale as above +#cpu_tuple_cost = 0.01 # same scale as above +#cpu_index_tuple_cost = 0.005 # same scale as above +#cpu_operator_cost = 0.0025 # same scale as above +#parallel_tuple_cost = 0.1 # same scale as above +#parallel_setup_cost = 1000.0 # same scale as above +#min_parallel_relation_size = 8MB +#effective_cache_size = 4GB + +# - Genetic Query Optimizer - + +#geqo = on +#geqo_threshold = 12 +#geqo_effort = 5 # range 1-10 +#geqo_pool_size = 0 # selects default based on effort +#geqo_generations = 0 # selects default based on effort +#geqo_selection_bias = 2.0 # range 1.5-2.0 +#geqo_seed = 0.0 # range 0.0-1.0 + +# - Other Planner Options - + +#default_statistics_target = 100 # range 1-10000 +#constraint_exclusion = partition # on, off, or partition +#cursor_tuple_fraction = 0.1 # range 0.0-1.0 +#from_collapse_limit = 8 +#join_collapse_limit = 8 # 1 disables collapsing of explicit + # JOIN clauses +#force_parallel_mode = off + + +#------------------------------------------------------------------------------ +# ERROR REPORTING AND LOGGING +#------------------------------------------------------------------------------ + +# - Where to Log - + +#log_destination = 'stderr' # Valid values are combinations of + # stderr, csvlog, syslog, and eventlog, + # depending on platform. csvlog + # requires logging_collector to be on. + +# This is used when logging to stderr: +#logging_collector = off # Enable capturing of stderr and csvlog + # into log files. Required to be on for + # csvlogs. + # (change requires restart) + +# These are only used if logging_collector is on: +#log_directory = 'pg_log' # directory where log files are written, + # can be absolute or relative to PGDATA +#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern, + # can include strftime() escapes +#log_file_mode = 0600 # creation mode for log files, + # begin with 0 to use octal notation +#log_truncate_on_rotation = off # If on, an existing log file with the + # same name as the new log file will be + # truncated rather than appended to. + # But such truncation only occurs on + # time-driven rotation, not on restarts + # or size-driven rotation. Default is + # off, meaning append to existing files + # in all cases. +#log_rotation_age = 1d # Automatic rotation of logfiles will + # happen after that time. 0 disables. +#log_rotation_size = 10MB # Automatic rotation of logfiles will + # happen after that much log output. + # 0 disables. + +# These are relevant when logging to syslog: +#syslog_facility = 'LOCAL0' +#syslog_ident = 'postgres' +#syslog_sequence_numbers = on +#syslog_split_messages = on + +# This is only relevant when logging to eventlog (win32): +# (change requires restart) +#event_source = 'PostgreSQL' + +# - When to Log - + +#client_min_messages = notice # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # log + # notice + # warning + # error + +#log_min_messages = warning # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic + +#log_min_error_statement = error # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic (effectively off) + +#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements + # and their durations, > 0 logs only + # statements running at least this number + # of milliseconds + + +# - What to Log - + +#debug_print_parse = off +#debug_print_rewritten = off +#debug_print_plan = off +#debug_pretty_print = on +#log_checkpoints = off +#log_connections = off +#log_disconnections = off +#log_duration = off +#log_error_verbosity = default # terse, default, or verbose messages +#log_hostname = off +#log_line_prefix = '' # special values: + # %a = application name + # %u = user name + # %d = database name + # %r = remote host and port + # %h = remote host + # %p = process ID + # %t = timestamp without milliseconds + # %m = timestamp with milliseconds + # %n = timestamp with milliseconds (as a Unix epoch) + # %i = command tag + # %e = SQL state + # %c = session ID + # %l = session line number + # %s = session start timestamp + # %v = virtual transaction ID + # %x = transaction ID (0 if none) + # %q = stop here in non-session + # processes + # %% = '%' + # e.g. '<%u%%%d> ' +#log_lock_waits = off # log lock waits >= deadlock_timeout +#log_statement = 'none' # none, ddl, mod, all +#log_replication_commands = off +#log_temp_files = -1 # log temporary files equal or larger + # than the specified size in kilobytes; + # -1 disables, 0 logs all temp files +log_timezone = 'UTC' + + +# - Process Title - + +#cluster_name = '' # added to process titles if nonempty + # (change requires restart) +#update_process_title = on + + +#------------------------------------------------------------------------------ +# RUNTIME STATISTICS +#------------------------------------------------------------------------------ + +# - Query/Index Statistics Collector - + +#track_activities = on +#track_counts = on +#track_io_timing = off +#track_functions = none # none, pl, all +#track_activity_query_size = 1024 # (change requires restart) +#stats_temp_directory = 'pg_stat_tmp' + + +# - Statistics Monitoring - + +#log_parser_stats = off +#log_planner_stats = off +#log_executor_stats = off +#log_statement_stats = off + + +#------------------------------------------------------------------------------ +# AUTOVACUUM PARAMETERS +#------------------------------------------------------------------------------ + +#autovacuum = on # Enable autovacuum subprocess? 'on' + # requires track_counts to also be on. +#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and + # their durations, > 0 logs only + # actions running at least this number + # of milliseconds. +#autovacuum_max_workers = 3 # max number of autovacuum subprocesses + # (change requires restart) +#autovacuum_naptime = 1min # time between autovacuum runs +#autovacuum_vacuum_threshold = 50 # min number of row updates before + # vacuum +#autovacuum_analyze_threshold = 50 # min number of row updates before + # analyze +#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum +#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze +#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum + # (change requires restart) +#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age + # before forced vacuum + # (change requires restart) +#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for + # autovacuum, in milliseconds; + # -1 means use vacuum_cost_delay +#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for + # autovacuum, -1 means use + # vacuum_cost_limit + + +#------------------------------------------------------------------------------ +# CLIENT CONNECTION DEFAULTS +#------------------------------------------------------------------------------ + +# - Statement Behavior - + +#search_path = '"$user", public' # schema names +#default_tablespace = '' # a tablespace name, '' uses the default +#temp_tablespaces = '' # a list of tablespace names, '' uses + # only default tablespace +#check_function_bodies = on +#default_transaction_isolation = 'read committed' +#default_transaction_read_only = off +#default_transaction_deferrable = off +#session_replication_role = 'origin' +#statement_timeout = 0 # in milliseconds, 0 is disabled +#lock_timeout = 0 # in milliseconds, 0 is disabled +#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled +#vacuum_freeze_min_age = 50000000 +#vacuum_freeze_table_age = 150000000 +#vacuum_multixact_freeze_min_age = 5000000 +#vacuum_multixact_freeze_table_age = 150000000 +#bytea_output = 'hex' # hex, escape +#xmlbinary = 'base64' +#xmloption = 'content' +#gin_fuzzy_search_limit = 0 +#gin_pending_list_limit = 4MB + +# - Locale and Formatting - + +datestyle = 'iso, mdy' +#intervalstyle = 'postgres' +timezone = 'UTC' +#timezone_abbreviations = 'Default' # Select the set of available time zone + # abbreviations. Currently, there are + # Default + # Australia (historical usage) + # India + # You can create your own file in + # share/timezonesets/. +#extra_float_digits = 0 # min -15, max 3 +#client_encoding = sql_ascii # actually, defaults to database + # encoding + +# These settings are initialized by initdb, but they can be changed. +lc_messages = 'en_US.utf8' # locale for system error message + # strings +lc_monetary = 'en_US.utf8' # locale for monetary formatting +lc_numeric = 'en_US.utf8' # locale for number formatting +lc_time = 'en_US.utf8' # locale for time formatting + +# default configuration for text search +default_text_search_config = 'pg_catalog.english' + +# - Other Defaults - + +#dynamic_library_path = '$libdir' +#local_preload_libraries = '' +#session_preload_libraries = '' + + +#------------------------------------------------------------------------------ +# LOCK MANAGEMENT +#------------------------------------------------------------------------------ + +#deadlock_timeout = 1s +#max_locks_per_transaction = 64 # min 10 + # (change requires restart) +#max_pred_locks_per_transaction = 64 # min 10 + # (change requires restart) + + +#------------------------------------------------------------------------------ +# VERSION/PLATFORM COMPATIBILITY +#------------------------------------------------------------------------------ + +# - Previous PostgreSQL Versions - + +#array_nulls = on +#backslash_quote = safe_encoding # on, off, or safe_encoding +#default_with_oids = off +#escape_string_warning = on +#lo_compat_privileges = off +#operator_precedence_warning = off +#quote_all_identifiers = off +#sql_inheritance = on +#standard_conforming_strings = on +#synchronize_seqscans = on + +# - Other Platforms and Clients - + +#transform_null_equals = off + + +#------------------------------------------------------------------------------ +# ERROR HANDLING +#------------------------------------------------------------------------------ + +#exit_on_error = off # terminate session on any error? +#restart_after_crash = on # reinitialize after backend crash? + + +#------------------------------------------------------------------------------ +# CONFIG FILE INCLUDES +#------------------------------------------------------------------------------ + +# These options allow settings to be loaded from files other than the +# default postgresql.conf. + +#include_dir = 'conf.d' # include files ending in '.conf' from + # directory 'conf.d' +#include_if_exists = 'exists.conf' # include file only if it exists +#include = 'special.conf' # include file + + +#------------------------------------------------------------------------------ +# CUSTOMIZED OPTIONS +#------------------------------------------------------------------------------ + +# Add settings for extensions here diff --git a/data/postmaster.opts b/data/postmaster.opts new file mode 100644 index 0000000..938fb4c --- /dev/null +++ b/data/postmaster.opts @@ -0,0 +1 @@ +/usr/lib/postgresql/9.6/bin/postgres diff --git a/diff_static.sh b/diff_static.sh new file mode 100755 index 0000000..83ff246 --- /dev/null +++ b/diff_static.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# diff production and development static folders + +ALL=$1 + +PROD_STATIC="_public_html/static" +DEV_STATIC="project/static" + +if [ "$ALL" = "--all" ]; then + EXCLUDE="" +else + EXCLUDE="-x cms -x admin -x admin_tools -x debug_toolbar -x tiny_mce -x filebrowser -x django_extensions" + echo "# exclude =" ${EXCLUDE} +fi + +diff -q -r ${EXCLUDE} ${PROD_STATIC} ${DEV_STATIC} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..09277b0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +version: '2' + +services: + + web: + restart: always + container_name: pensfond-web + build: . + volumes: + - ./:/opt/app + ports: + - "32770:80" + depends_on: + - db + + db: + restart: always + container_name: pensfond-db + image: postgres:latest + expose: + - "5432" + volumes: + - ./data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=pensfond + - POSTGRES_PASSWORD=pensfond + - POSTGRES_DB=pensfond diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..82cfa83 --- /dev/null +++ b/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/manage.sh b/manage.sh new file mode 100755 index 0000000..b062cbb --- /dev/null +++ b/manage.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# activate virtualenv and execute passed in command line + +COMMAND=$@ + +SITE_DIR="/var/www/pensfond" + +source ${SITE_DIR}/ENV/bin/activate +cd ${SITE_DIR} + +python manage.py ${COMMAND} diff --git a/project/__init__.py b/project/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/admin_dashboard.py b/project/admin_dashboard.py new file mode 100644 index 0000000..a0a556c --- /dev/null +++ b/project/admin_dashboard.py @@ -0,0 +1,155 @@ +#-*-encoding: utf-8-*- +""" +This file was generated with the customdashboard management command, it +contains the two classes for the main dashboard and app index dashboard. +You can customize these classes as you want. + +To activate your index dashboard add the following to your settings.py:: + ADMIN_TOOLS_INDEX_DASHBOARD = 'pensfond.admin_dashboard.CustomIndexDashboard' + +And to activate the app index dashboard:: + ADMIN_TOOLS_APP_INDEX_DASHBOARD = 'pensfond.admin_dashboard.CustomAppIndexDashboard' +""" + +from django.utils.translation import ugettext_lazy as _ +from django.core.urlresolvers import reverse + +from admin_tools.dashboard import modules, Dashboard, AppIndexDashboard +from admin_tools.utils import get_admin_site_name + + +class CustomIndexDashboard(Dashboard): + """ + Custom index dashboard for pensfond. + """ + def init_with_context(self, context): + site_name = get_admin_site_name(context) + + # append a link list module for "quick links" +# self.children.append(modules.LinkList( +# _('Quick links'), +# layout='inline', +# draggable=False, +# deletable=False, +# collapsible=False, +# children=[ +# [_('Return to site'), '/'], +# [_('Change password'), +# reverse('%s:password_change' % site_name)], +# [_('Log out'), reverse('%s:logout' % site_name)], +# ] +# )) + + user = context.get('user') + perms_list = ['can_import_export_oblotdelen', 'can_import_export_naspunkts', 'can_import_export_naspunktotdelen', + 'can_import_export_fond', 'can_import_export_fond_stats'] + if user and user.has_perms(perms_list): + self.children.append(modules.LinkList( + u'Сервис', + children=[ + { + 'title': u'Импорт центральных отделений', + 'url': '/admin/pensfonds/import_obl_otdelen/', + }, + { + 'title': u'Экспорт центральных отделений', + 'url': '/admin/pensfonds/export_obl_otdelen/', + }, + { + 'title': u'Импорт населенных пунктов', + 'url': '/admin/pensfonds/import_naspunkts/', + }, + { + 'title': u'Экспорт населенных пунктов', + 'url': '/admin/pensfonds/export_naspunkts/', + }, + { + 'title': u'Импорт отделений в нас. пунктах', + 'url': '/admin/pensfonds/import_naspunkt_otdelen/', + }, + { + 'title': u'Экспорт отделений в нас. пунктах', + 'url': '/admin/pensfonds/export_naspunkt_otdelen/', + }, + { + 'title': u'Сверка НПФ', + 'url': '/admin/npfs/revise_licenses/', + }, + { + 'title': u'Импорт основных показателей НПФ', + 'url': '/admin/npfs/fond_stats/', + }, + ] + )) + + # append an app list module for "Applications" + self.children.append(modules.AppList( + _('Applications'), + exclude=('django.contrib.*',), + )) + + # append an app list module for "Administration" + self.children.append(modules.AppList( + _('Administration'), + models=('django.contrib.*',), + )) + + # append a recent actions module + self.children.append(modules.RecentActions(_('Recent Actions'), 5)) + + # append a feed module +# self.children.append(modules.Feed( +# _('Latest Django News'), +# feed_url='http://www.djangoproject.com/rss/weblog/', +# limit=5 +# )) + + # append another link list module for "support". +# self.children.append(modules.LinkList( +# _('Support'), +# children=[ +# { +# 'title': _('Django documentation'), +# 'url': 'http://docs.djangoproject.com/', +# 'external': True, +# }, +# { +# 'title': _('Django "django-users" mailing list'), +# 'url': 'http://groups.google.com/group/django-users', +# 'external': True, +# }, +# { +# 'title': _('Django irc channel'), +# 'url': 'irc://irc.freenode.net/django', +# 'external': True, +# }, +# ] +# )) + + +class CustomAppIndexDashboard(AppIndexDashboard): + """ + Custom app index dashboard for pensfond. + """ + + # we disable title because its redundant with the model list module + title = '' + + def __init__(self, *args, **kwargs): + AppIndexDashboard.__init__(self, *args, **kwargs) + + # append a model list module and a recent actions module + self.children += [ + modules.ModelList(self.app_title, self.models), + modules.RecentActions( + _('Recent Actions'), + include_list=self.get_app_content_types(), + limit=5 + ) + ] + + def init_with_context(self, context): + """ + Use this method if you need to access the request context. + """ + return super(CustomAppIndexDashboard, self).init_with_context(context) diff --git a/project/articles/__init__.py b/project/articles/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/articles/cms_plugins.py b/project/articles/cms_plugins.py new file mode 100644 index 0000000..7de4203 --- /dev/null +++ b/project/articles/cms_plugins.py @@ -0,0 +1,42 @@ +#-*- coding: utf -8-*- +from cms.plugin_base import CMSPluginBase +from cms.plugin_pool import plugin_pool + +import models + + +class ExamplePlugin(CMSPluginBase): + model = models.Example + name = u'Пример' + render_template = u'articles/example.html' + + +class AttentionPlugin(CMSPluginBase): + model = models.Attention + name = u'Внимание' + render_template = u'articles/attention.html' + + +class AdvisePlugin(CMSPluginBase): + model = models.Advise + name = u'Совет' + render_template = u'articles/advise.html' + + +class FormulaPlugin(CMSPluginBase): + model = models.Formula + name = u'Формула' + render_template = u'articles/formula.html' + + +class FileExtPlugin(CMSPluginBase): + model = models.FileExt + name = u'Файл (статья)' + render_template = u'articles/file_ext.html' + + +plugin_pool.register_plugin(ExamplePlugin) +plugin_pool.register_plugin(AttentionPlugin) +plugin_pool.register_plugin(AdvisePlugin) +plugin_pool.register_plugin(FormulaPlugin) +plugin_pool.register_plugin(FileExtPlugin) diff --git a/project/articles/models.py b/project/articles/models.py new file mode 100644 index 0000000..ec3e126 --- /dev/null +++ b/project/articles/models.py @@ -0,0 +1,46 @@ +#-*- coding: utf -8-*- +from django.db import models + +from cms.models.pluginmodel import CMSPlugin + + +class Example(CMSPlugin): + title = models.CharField(u'заголовок', max_length=255) + body = models.TextField(u'текст') + + def __unicode__(self): + return self.title + + +class Attention(CMSPlugin): + title = models.CharField(u'заголовок', max_length=255) + body = models.TextField(u'текст') + + def __unicode__(self): + return self.title + + +class Advise(CMSPlugin): + title = models.CharField(u'заголовок', max_length=255) + body = models.TextField(u'текст') + + def __unicode__(self): + return self.title + + +class Formula(CMSPlugin): + title = models.CharField(u'заголовок', max_length=255) + value = models.CharField(u'формула', max_length=255) + body = models.TextField(u'текст') + + def __unicode__(self): + return self.title + + +class FileExt(CMSPlugin): + title = models.CharField(u'заголовок', max_length=255) + file = models.FileField(u'файл', upload_to=CMSPlugin.get_media_path) + body = models.TextField(u'подпись') + + def __unicode__(self): + return self.title diff --git a/project/articles/tests.py b/project/articles/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/project/articles/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/project/articles/views.py b/project/articles/views.py new file mode 100644 index 0000000..60f00ef --- /dev/null +++ b/project/articles/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/project/banners/__init__.py b/project/banners/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/banners/admin.py b/project/banners/admin.py new file mode 100644 index 0000000..b4552d9 --- /dev/null +++ b/project/banners/admin.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from django.contrib import admin + +from models import Slot, Banner + + +class BannerInline(admin.TabularInline): + model = Banner + extra = 0 + readonly_fields = ('views_count', 'clicks_count', 'ctr',) + + +class SlotAdmin(admin.ModelAdmin): + list_per_page = 25 + prepopulated_fields = {'reverse_id': ('name',)} + inlines = [BannerInline,] + + +admin.site.register(Slot, SlotAdmin) diff --git a/project/banners/models.py b/project/banners/models.py new file mode 100644 index 0000000..f5d4e38 --- /dev/null +++ b/project/banners/models.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +import os +import time +import datetime + +from django.db import models +from django.db.models import F +from django.conf import settings +from django.core.urlresolvers import reverse + + +# куда сохранять загруженные изображения +UPLOAD_DIR = getattr(settings, 'BANNERS_DIR', 'banners/') + + +def pic_upload_to(instance, filename): + """Куда и под каким именем сохранять баннеры.""" + path = UPLOAD_DIR + slot_id = u'%s' % instance.slot.pk + ext = os.path.splitext(os.path.basename(filename))[1] + filename = u'%s%s' % (int(time.time()), ext) # use timestamp as filename + return os.path.join(path, slot_id, filename) + + +class SlotManager(models.Manager): + def next_banner(self, reverse_id): + """Возвращает баннер (из числа опубликованных), который не показывали + дольше всего. + Счётчик показов не увеличивает!, т.к. показ засчитываем только если к + баннеру обратились из браузера клиента. + """ + try: + slot = self.filter(reverse_id=reverse_id)[0] + obj = (slot.banners.filter(published=True) + .order_by('last_viewed_at')[0]) + return obj + except IndexError: + return None + + +class Slot(models.Model): + """Блок (группа) баннеров.""" + name = models.CharField(u'название', max_length=100, db_index=True, + unique=True) + reverse_id = models.SlugField(u'id', max_length=40, db_index=True, + unique=True, help_text=(u'Уникальный идентификатор, ' + u'который используется для связи с данным блоком.')) + + created_at = models.DateTimeField(u'создан', auto_now_add=True) + updated_at = models.DateTimeField(u'изменен', auto_now=True) + + objects = SlotManager() + + class Meta: + verbose_name = u'блок баннеров' + verbose_name_plural = u'блоки баннеров' + ordering = ['name',] + + def __unicode__(self): + return u'%s' % self.name + + def save(self, *args, **kwargs): + self.name = self.name.strip() + super(Slot, self).save(*args, **kwargs) + + +class Banner(models.Model): + """Баннеры.""" + slot = models.ForeignKey(Slot, related_name=u'banners') + + pic = models.ImageField(u'изображение', upload_to=pic_upload_to) + dest_url = models.URLField(u'URL перехода') + title = models.CharField(u'название', max_length=100, db_index=True) + + published = models.BooleanField(u'опубликован?', default=False) + + views_count = models.PositiveIntegerField(u'показов', default=0) + last_viewed_at = models.DateTimeField(u'последний показ', + default=datetime.datetime(1970, 1, 1), editable=False) + clicks_count = models.PositiveIntegerField(u'кликов', default=0) + + created_at = models.DateTimeField(u'создан', auto_now_add=True) + updated_at = models.DateTimeField(u'изменен', auto_now=True) + + class Meta: + verbose_name = u'баннер' + verbose_name_plural = u'баннеры' + ordering = ['created_at',] + + def __unicode__(self): + return u'%s' % self.dest_url + + #@models.permalink + def get_absolute_url(self): + """Возвращает урл превью - для админки.""" + return reverse('banners-preview', kwargs={'id': self.pk,}) + + #@models.permalink + def get_show_url(self): + """Возвращает урл показа баннера - для шаблонов.""" + return reverse('banners-show', kwargs={'id': self.pk,}) + + #@models.permalink + def get_click_url(self): + """Возвращает урл перехода по клику - для шаблонов.""" + return reverse('banners-click', kwargs={'id': self.pk,}) + + def ctr(self): + """Показатель кликабельности.""" + if self.views_count > 0: + ctr = float(self.clicks_count) / self.views_count * 100 + return u'%.1f%%' % ctr + else: + return u'-' + ctr.short_description = u'CTR' + + +def update_views(id): + """Обновляет статистику показов по id.""" + return Banner.objects.filter(pk=id).update( + views_count = F('views_count') + 1, # всего показов + last_viewed_at = datetime.datetime.now() # дата последнего показа + ) + + +def update_clicks(id): + """Обновляет статистику кликов по id.""" + return Banner.objects.filter(pk=id).update( + clicks_count = F('clicks_count') + 1 # всего кликов + ) diff --git a/project/banners/templatetags/__init__.py b/project/banners/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/banners/templatetags/banners_tags.py b/project/banners/templatetags/banners_tags.py new file mode 100644 index 0000000..082bd46 --- /dev/null +++ b/project/banners/templatetags/banners_tags.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +from django.template import (Library, Node, TemplateSyntaxError, Variable, + VariableDoesNotExist) + +from ..models import Slot + + +register = Library() + + +class NextBannerNode(Node): + """Сохраняет в заданную переменную следующий баннер из заданного блока.""" + def __init__(self, reverse_id, varname): + self.varname = varname + + # как задан reverse_id? + if reverse_id.startswith("'") and reverse_id.endswith("'"): + self.reverse_id = reverse_id.strip("'") # строка в '' + elif reverse_id.startswith('"') and reverse_id.endswith('"'): + self.reverse_id = reverse_id.strip('"') # строка в "" + else: + self.reverse_id = Variable(reverse_id) # имя переменной + + def render(self, context): + if isinstance(self.reverse_id, unicode): + # взять значение reverse_id как строку + context[self.varname] = Slot.objects.next_banner(self.reverse_id) + else: + try: + # сначала достать значение reverse_id из переменной + reverse_id = self.reverse_id.resolve(context) + context[self.varname] = Slot.objects.next_banner(reverse_id) + except VariableDoesNotExist: + pass#raise # ignore these errors + return u'' + + +@register.tag +def get_next_banner(parser, token): + bits = token.contents.split() + if len(bits) < 4: + raise (TemplateSyntaxError, + u"%r tag takes exactly three arguments" % bits[0]) + if bits[-2] != 'as': + raise (TemplateSyntaxError, + u"second argument to %r tag must be 'as'" % bits[0]) + return NextBannerNode(bits[1], bits[3]) + + +@register.inclusion_tag("banners/all_page_banners.html", takes_context=True) +def get_all_page_banners(context, banner_id): + if not Slot.objects.filter(reverse_id=banner_id): + return {} + banner_slot = Slot.objects.get(reverse_id=banner_id) + context['banner_slot'] = banner_slot + return context diff --git a/project/banners/tests.py b/project/banners/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/project/banners/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/project/banners/urls.py b/project/banners/urls.py new file mode 100644 index 0000000..438347c --- /dev/null +++ b/project/banners/urls.py @@ -0,0 +1,11 @@ +# -*- coding: UTF-8 -*- +from django.conf.urls.defaults import * + +from views import preview, show, click + + +urlpatterns = patterns('', + url(r'^(?P[^/]+)/preview/$', preview, name='banners-preview'), + url(r'^(?P[^/]+)/show/$', show, name='banners-show'), + url(r'^(?P[^/]+)/go/$', click, name='banners-click'), +) diff --git a/project/banners/views.py b/project/banners/views.py new file mode 100644 index 0000000..c3df8ac --- /dev/null +++ b/project/banners/views.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from django.http import HttpResponseRedirect +from django.shortcuts import get_object_or_404 + +from models import Banner, update_views, update_clicks + + +def preview(request, id): + """Редиректит на баннер с заданным id - для админки.""" + return show(request, id, inc_views=False) + + +def show(request, id, inc_views=True): + """Редиректит на баннер с заданным id и обновляет статистику просмотров. + Для preview из админки статистику просмотров можно отключить. + """ + obj = get_object_or_404(Banner, pk=id) + if inc_views: + update_views(obj.pk) + return HttpResponseRedirect(obj.pic.url) + + +def click(request, id): + """Редиректит на url перехода и обновляет статистику кликов.""" + obj = get_object_or_404(Banner, pk=id) + update_clicks(obj.pk) + return HttpResponseRedirect(obj.dest_url) diff --git a/project/cmsplugin_htmlsitemap/__init__.py b/project/cmsplugin_htmlsitemap/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/cmsplugin_htmlsitemap/cms_plugins.py b/project/cmsplugin_htmlsitemap/cms_plugins.py new file mode 100644 index 0000000..c391f15 --- /dev/null +++ b/project/cmsplugin_htmlsitemap/cms_plugins.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +from django.contrib.sites.models import Site +from django.utils.translation import ugettext_lazy as _ + +from cms.models.pagemodel import Page +from cms.plugin_base import CMSPluginBase +from cms.plugin_pool import plugin_pool +from . import models +import re + + +class HtmlSitemapPlugin(CMSPluginBase): + """HTML Sitemap CMS plugin.""" + + name = _('HTML Sitemap') + model = models.HtmlSitemap + render_template = 'cmsplugin_htmlsitemap/sitemap.html' + + def render(self, context, instance, placeholder): + site = Site.objects.get_current() + pages = Page.objects.published(site=site).order_by('tree_id', 'lft') + pages = pages.filter(level__gte=instance.level_min, level__lte=instance.level_max, + publisher_is_draft=False) + pages = pages.exclude(reverse_id='sitemap') + + if not instance.in_navigation is None: + pages = pages.filter(in_navigation=instance.in_navigation) + if instance.match_created_by: + pages = pages.filter(created_by=instance.match_created_by) + if instance.match_title: + pages = pages.filter(title_set__title__contains=instance.match_title) + if instance.match_url: + pat = re.compile(instance.match_url, re.IGNORECASE) + pages = [ p for p in pages if pat.search(p.get_absolute_url()) ] + + context.update({ + 'instance':instance, + 'pages':pages, + }) + return context + +plugin_pool.register_plugin(HtmlSitemapPlugin) diff --git a/project/cmsplugin_htmlsitemap/models.py b/project/cmsplugin_htmlsitemap/models.py new file mode 100644 index 0000000..82c0745 --- /dev/null +++ b/project/cmsplugin_htmlsitemap/models.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +from cms.models import CMSPlugin + + +class HtmlSitemap(CMSPlugin): + """Model for HTML Sitemap CMS plugin.""" + + level_min = models.PositiveSmallIntegerField(_('starting level'), default=0) + level_max = models.PositiveSmallIntegerField(_('deepest level'), default=100) + in_navigation = models.NullBooleanField(_('is in navigation'), default=None) + match_created_by = models.CharField(_('exact match on created by'), blank=True, + max_length=70) + match_title = models.CharField(_('match title containing substring'), blank=True, + max_length=255) + match_url = models.CharField(_('URL match with regular expression'), blank=True, + max_length=100) + + class Meta: + verbose_name = _('HTML Sitemap plugin') + verbose_name_plural = _('HTML Sitemap plugins') + ordering = ('level_min', 'level_max') + + def __unicode__(self): + return u'HTML Sitemap {0}-{1}'.format(self.level_min, self.level_max) diff --git a/project/commons/__init__.py b/project/commons/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/commons/middleware.py b/project/commons/middleware.py new file mode 100644 index 0000000..54dd2d4 --- /dev/null +++ b/project/commons/middleware.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +from django.utils.functional import SimpleLazyObject + + +def _get_full_base_url(request): + if not hasattr(request, '_cached_full_base_url'): + scheme = u'https' if request.is_secure() else u'http' + request._cached_full_base_url = u'%s://%s' % (scheme, request.get_host()) + return request._cached_full_base_url + + +class FullBaseUrlMiddleware(object): + def process_request(self, request): + request.full_base_url = SimpleLazyObject(lambda: _get_full_base_url(request)) diff --git a/project/commons/models.py b/project/commons/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/project/commons/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/project/commons/templatetags/__init__.py b/project/commons/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/commons/templatetags/my_cms_tags.py b/project/commons/templatetags/my_cms_tags.py new file mode 100644 index 0000000..70ec16d --- /dev/null +++ b/project/commons/templatetags/my_cms_tags.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +from django.template import Library, Node, TemplateSyntaxError +from django.core.files.storage import urljoin +from django.conf import settings + +from cms.models import Page +from cms.utils.conf import get_cms_setting + + +register = Library() + +CMS_PAGE_MEDIA_URL = urljoin(settings.MEDIA_URL, get_cms_setting('PAGE_MEDIA_PATH')) + + +@register.assignment_tag +def get_cms_page_by_reverse_id(reverse_id): + try: + return (Page.objects.exclude(publisher_state=Page.PUBLISHER_STATE_DELETE) + .get(reverse_id__iexact=reverse_id, publisher_is_draft=False)) + except Exception as e: + if settings.DEBUG: + raise e + return None + + +@register.assignment_tag +def get_cms_subpages(page_lookup, offset, template=None): + try: + if isinstance(page_lookup, Page): + page = page_lookup + elif isinstance(page_lookup, basestring): + page = (Page.objects.exclude(publisher_state=Page.PUBLISHER_STATE_DELETE) + .get(reverse_id__iexact=page_lookup, publisher_is_draft=False)) + else: + raise TypeError('The page_lookup argument can be either a Page or String.') + + result = (page.get_descendants() + .filter(publisher_is_draft=False).exclude(publisher_state=Page.PUBLISHER_STATE_DELETE) + .filter(level=page.level+int(offset)) + ) + if template: + result = result.filter(template=template) + result = result.order_by('tree_id', 'lft') + return result + except Exception as e: + if settings.DEBUG: + raise e + return None + + +@register.filter +def placeholder_plugins_count(page, slot): + """Возвращает количество плагинов, добавленных в плейсхолдер.""" + placeholder = page.placeholders.get(slot=slot) + return placeholder.cmsplugin_set.count() + + +@register.filter +def replace_cms_page_media_url(value, new_path): + """Заменяет первое вхождение подстроки MEDIA_URL + CMS_PAGE_MEDIA_PATH на строку переданную в new_path. + new_path должен окружен /слэшами/ + """ + return value.replace(CMS_PAGE_MEDIA_URL, new_path, 1) diff --git a/project/commons/templatetags/utility_tags.py b/project/commons/templatetags/utility_tags.py new file mode 100644 index 0000000..f779471 --- /dev/null +++ b/project/commons/templatetags/utility_tags.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +import re + +from django import template +from django.template.defaultfilters import stringfilter + + +register = template.Library() + + +urls_to_links_re = re.compile(r'(https?://[^ ]+)') + + +@register.filter(is_safe=True) +@stringfilter +def urls_to_links(value): + """Ищет в тексте http(s) ссылки и конвертирует их в гиперссылки.""" + return urls_to_links_re.sub(r'\1', value) + + +@register.filter +def get_item(d, key): + """Возвращает по ключу значение из словаря.""" + return d.get(key) diff --git a/project/commons/tests.py b/project/commons/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/project/commons/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/project/commons/views.py b/project/commons/views.py new file mode 100644 index 0000000..60f00ef --- /dev/null +++ b/project/commons/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/project/feedback/__init__.py b/project/feedback/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/feedback/context_processors.py b/project/feedback/context_processors.py new file mode 100644 index 0000000..9ceac64 --- /dev/null +++ b/project/feedback/context_processors.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from .forms import FeedbackForm + + +def forms(request): + return { + 'feedback_form': FeedbackForm() + } diff --git a/project/feedback/emails.py b/project/feedback/emails.py new file mode 100644 index 0000000..d28f8a6 --- /dev/null +++ b/project/feedback/emails.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from django.template.loader import render_to_string +from django.core.mail import EmailMessage +from django.conf import settings + + +FEEDBACK_EMAILS = getattr(settings, 'FEEDBACK_EMAILS', None) + + +def mail_feedback(form, fail_silently=False): + recipients = FEEDBACK_EMAILS + if not recipients: + if not fail_silently: + raise Exception('no recipients; could not send email') + return False + + email_body = render_to_string('feedback/mail.txt', {'data': form.cleaned_data}) + email = EmailMessage(subject=u'Сообщение администрации', to=recipients, body=email_body) + return email.send(fail_silently) diff --git a/project/feedback/forms.py b/project/feedback/forms.py new file mode 100644 index 0000000..d879c5d --- /dev/null +++ b/project/feedback/forms.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from django import forms + +from captcha.fields import CaptchaField + + +class FeedbackForm(forms.Form): + """Форма обратной связи.""" + name = forms.CharField(label=u'Имя', max_length=100, error_messages={'required': u'Укажите имя.'}) + phone = forms.CharField(label=u'Телефон', max_length=30, required=False) + email = forms.EmailField(label=u'Email', max_length=30, required=False) + msg = forms.CharField(label=u'Текст сообщения', max_length=500, widget=forms.Textarea(), + error_messages={'required': u'Введите сообщение.'}) + captcha = CaptchaField(label=u'Код с картинки', error_messages={'required': u'Введите код с картинки.'}) + + def clean(self): + if not self.cleaned_data.get('phone') and not self.cleaned_data.get('email'): + raise forms.ValidationError(u'Введите контактную информацию.') + return self.cleaned_data diff --git a/project/feedback/models.py b/project/feedback/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/project/feedback/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/project/feedback/tests.py b/project/feedback/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/project/feedback/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/project/feedback/views.py b/project/feedback/views.py new file mode 100644 index 0000000..d50c415 --- /dev/null +++ b/project/feedback/views.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +import simplejson as json +import logging + +from django.http import HttpResponse, HttpResponseBadRequest +from django.views.decorators.http import require_POST +from django.views.decorators.csrf import csrf_protect + +from .forms import FeedbackForm +from .emails import mail_feedback + + +log = logging.getLogger('feedback') + + +@require_POST +@csrf_protect +def feedback(request): + if not request.is_ajax(): + return HttpResponseBadRequest() + + form = FeedbackForm(data=request.POST) + data = None + if form.is_valid(): + data = { + 'success': form.is_valid(), + 'form_errors': '', + 'message': { + 'title': u'Спасибо!', + 'msg': u'Ваше сообщение отправлено.', + } + } + + try: + log.info('new message = %s' % form.cleaned_data) + except Exception, e: + log.exception(e) + + try: + mail_feedback(form) + except Exception, e: + log.exception(e) + data = { + 'success': False, + 'form_errors': u'', + 'message': { + 'title': u'Ошибка!', + 'msg': u'Возникли проблемы при отправке. Попробуйте повторить позже.', + } + } + + if not data: + form_errors = form.non_field_errors() + if not form_errors: + for k in form.fields.keys(): + if form[k].errors: + form_errors = form[k].errors[0] # show only first error + break + + data = { + 'success': form.is_valid(), + 'form_errors': form_errors, + } + + return HttpResponse(json.dumps(data), mimetype='application/json') diff --git a/project/guestbook/__init__.py b/project/guestbook/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/guestbook/admin.py b/project/guestbook/admin.py new file mode 100644 index 0000000..aa99ca3 --- /dev/null +++ b/project/guestbook/admin.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +import logging +import traceback + +from django.contrib import admin +from django.contrib import messages +from django.core.mail import mail_admins +from django.utils.text import Truncator +from django.conf import settings + +from yandex_webmaster import YandexWebmaster + +from .models import Category, Entry, Recipient +from .emails import mail_user_notification +from .forms import CategoryAdminForm + + +log = logging.getLogger('guestbook') + + +YANDEX_WEBMASTER_DOMAIN = getattr(settings, 'YANDEX_WEBMASTER_DOMAIN', None) +YANDEX_WEBMASTER_TOKEN = getattr(settings, 'YANDEX_WEBMASTER_TOKEN', None) +#YANDEX_WEBMASTER_TOKEN_EXPIRES = getattr(settings, 'YANDEX_WEBMASTER_TOKEN_EXPIRES', None) + +YANDEX_WEBMASTER_ENABLED = YANDEX_WEBMASTER_DOMAIN and YANDEX_WEBMASTER_TOKEN + + +class CategoryAdmin(admin.ModelAdmin): + list_display = ['ordering', 'name', 'slug'] + list_display_links = ['name'] + list_editable = ['ordering'] + search_fields = ['name'] + form = CategoryAdminForm + + +class EntryAdmin(admin.ModelAdmin): + list_display = ['name', 'short_message', 'category', 'pub_date', 'created_at', 'published'] + list_filter = ['published', 'category', 'created_at', 'pub_date'] + list_per_page = 50 + search_fields = ['name', 'email', 'message', 'reply'] + readonly_fields = ['notified_user', 'added_origtext'] + + def short_message(self, obj): + return Truncator(obj.message).chars(500) + short_message.short_description = u'Вопрос' + + def save_model(self, request, obj, form, change): + obj.save() + + # отправка уведомления + try: + fail_message = u'Не удалось отправить пользователю уведомление об ответе на его вопрос.' + fail_level = messages.WARNING + if obj.published and not obj.notified_user and obj.reply and obj.email: + result = mail_user_notification(obj.email, obj) + if result > 0: + obj.notified_user = True + obj.save() + self.message_user(request, u'Пользователю отправлено уведомление об ответе на его вопрос.') + else: + self.message_user(request, fail_message, level=fail_level) + except Exception as e: + log.info(u'Next exception for Entry with id=%s' % obj.pk) + log.exception(e) + self.message_user(request, fail_message, level=fail_level) + + # отправка в оригинальные тексты + try: + if YANDEX_WEBMASTER_ENABLED and not obj.added_origtext and obj.reply: + text = (u'%s\n%s' % (obj.message, obj.reply)).strip() + text_len = len(text) + if text_len >= 500 and text_len <= 32000: + api = YandexWebmaster(YANDEX_WEBMASTER_TOKEN, YANDEX_WEBMASTER_DOMAIN) + api.add_original_text(text) + # + obj.added_origtext = True + obj.save() + except Exception as e: + log.info(u'Next exception for Entry with id=%s' % obj.pk) + log.exception(e) + mail_admins(subject=u'guestbook: original texts error', + message=u'Entry id=%s.\n\n%s' % (obj.pk, traceback.format_exc(e)) + ) + + +class RecipientAdmin(admin.ModelAdmin): + list_display = ['email'] + search_fields = ['email'] + + +admin.site.register(Category, CategoryAdmin) +admin.site.register(Entry, EntryAdmin) +admin.site.register(Recipient, RecipientAdmin) diff --git a/project/guestbook/emails.py b/project/guestbook/emails.py new file mode 100644 index 0000000..a835132 --- /dev/null +++ b/project/guestbook/emails.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from django.template.loader import render_to_string +from django.core.mail import EmailMessage + +from .models import Recipient + + +def mail_entry(entry): + """Отправить письмо о новом сообщение.""" + recipients = Recipient.objects.all().values_list('email', flat=True) + if not recipients: + raise Exception(u'No recipients; could not send email') + + template = 'guestbook/mail_entry.txt' + subject = u'Новое сообщение' + + email_body = render_to_string(template, {'entry': entry}) + email = EmailMessage(subject=subject, to=recipients, body=email_body) + return email.send() + + +def mail_user_notification(user_email, obj): + """Отправить пользователю письмо об ответе на его вопрос.""" + template = 'guestbook/mail_user_notification.txt' + subject = u'Ответ на Ваш вопрос' + + email_body = render_to_string(template, {'obj': obj}) + email = EmailMessage(subject=subject, to=[user_email], body=email_body) + return email.send() diff --git a/project/guestbook/forms.py b/project/guestbook/forms.py new file mode 100644 index 0000000..04111a7 --- /dev/null +++ b/project/guestbook/forms.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +from django import forms + +from captcha.fields import CaptchaField + +from tinymce.widgets import TinyMCE + +from .models import Entry, Category + + +class EntryForm(forms.ModelForm): + """Форма редактирования нового сообщения.""" + captcha = CaptchaField(label=u'Код с картинки', error_messages={'required': u'Введите код с картинки.'}) + + class Meta: + model = Entry + fields = ['name', 'email', 'message'] + + def __init__(self, *args, **kwargs): + super(EntryForm, self).__init__(*args, **kwargs) + self.fields['name'].error_messages['required'] = u'Укажите имя.' + self.fields['message'].error_messages['required'] = u'Введите текст сообщения.' + + def clean_name(self): + return self.cleaned_data.get('name', '').strip() + + def clean_email(self): + return self.cleaned_data.get('email', '').strip() + + def clean_message(self): + return self.cleaned_data.get('message', '').strip() + + +class CategoryAdminForm(forms.ModelForm): + class Meta: + model = Category + widgets = { + 'description': TinyMCE, + } diff --git a/project/guestbook/menu.py b/project/guestbook/menu.py new file mode 100644 index 0000000..2c3075e --- /dev/null +++ b/project/guestbook/menu.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from menus.base import NavigationNode +from menus.menu_pool import menu_pool +from cms.menu_bases import CMSAttachMenu + +from .models import Category + + +class GuestbookMenu(CMSAttachMenu): + name = u'Ответы на вопросы' + + def get_nodes(self, request): + nodes = [] + + for category in Category.objects.all(): + n = NavigationNode( + title=category.get_menu_title(), + url=category.get_absolute_url(), + id=category.pk + ) + nodes.append(n) + + return nodes + + +menu_pool.register_menu(GuestbookMenu) diff --git a/project/guestbook/migrations/0001_initial.py b/project/guestbook/migrations/0001_initial.py new file mode 100644 index 0000000..06ffbb7 --- /dev/null +++ b/project/guestbook/migrations/0001_initial.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Entry' + db.create_table(u'guestbook_entry', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('email_phone', self.gf('django.db.models.fields.CharField')(max_length=50)), + ('message', self.gf('django.db.models.fields.TextField')(max_length=2000)), + ('reply', self.gf('django.db.models.fields.TextField')(default='', max_length=2000, blank=True)), + ('published', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'guestbook', ['Entry']) + + # Adding model 'Recipient' + db.create_table(u'guestbook_recipient', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('email', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75)), + )) + db.send_create_signal(u'guestbook', ['Recipient']) + + + def backwards(self, orm): + # Deleting model 'Entry' + db.delete_table(u'guestbook_entry') + + # Deleting model 'Recipient' + db.delete_table(u'guestbook_recipient') + + + models = { + u'guestbook.entry': { + 'Meta': {'ordering': "['-created_at']", 'object_name': 'Entry'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email_phone': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] \ No newline at end of file diff --git a/project/guestbook/migrations/0002_auto__add_field_entry_pub_date.py b/project/guestbook/migrations/0002_auto__add_field_entry_pub_date.py new file mode 100644 index 0000000..ce0263e --- /dev/null +++ b/project/guestbook/migrations/0002_auto__add_field_entry_pub_date.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'Entry.pub_date' + db.add_column(u'guestbook_entry', 'pub_date', + self.gf('django.db.models.fields.DateTimeField')(default=None, null=True, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'Entry.pub_date' + db.delete_column(u'guestbook_entry', 'pub_date') + + + models = { + u'guestbook.entry': { + 'Meta': {'ordering': "['-created_at']", 'object_name': 'Entry'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email_phone': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] \ No newline at end of file diff --git a/project/guestbook/migrations/0003_auto__add_field_entry_notified_user.py b/project/guestbook/migrations/0003_auto__add_field_entry_notified_user.py new file mode 100644 index 0000000..e7a9763 --- /dev/null +++ b/project/guestbook/migrations/0003_auto__add_field_entry_notified_user.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'Entry.notified_user' + db.add_column(u'guestbook_entry', 'notified_user', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'Entry.notified_user' + db.delete_column(u'guestbook_entry', 'notified_user') + + + models = { + u'guestbook.entry': { + 'Meta': {'ordering': "['-pub_date', '-created_at']", 'object_name': 'Entry'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email_phone': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'notified_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] \ No newline at end of file diff --git a/project/guestbook/migrations/0004_auto__add_field_entry_added_origtext.py b/project/guestbook/migrations/0004_auto__add_field_entry_added_origtext.py new file mode 100644 index 0000000..f1ed3a1 --- /dev/null +++ b/project/guestbook/migrations/0004_auto__add_field_entry_added_origtext.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'Entry.added_origtext' + db.add_column(u'guestbook_entry', 'added_origtext', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'Entry.added_origtext' + db.delete_column(u'guestbook_entry', 'added_origtext') + + + models = { + u'guestbook.entry': { + 'Meta': {'ordering': "['-pub_date', '-created_at']", 'object_name': 'Entry'}, + 'added_origtext': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email_phone': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'notified_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] \ No newline at end of file diff --git a/project/guestbook/migrations/0005_auto__add_field_entry_email.py b/project/guestbook/migrations/0005_auto__add_field_entry_email.py new file mode 100644 index 0000000..a55e1fd --- /dev/null +++ b/project/guestbook/migrations/0005_auto__add_field_entry_email.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'Entry.email' + db.add_column(u'guestbook_entry', 'email', + self.gf('django.db.models.fields.EmailField')(default='', max_length=50, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'Entry.email' + db.delete_column(u'guestbook_entry', 'email') + + + models = { + u'guestbook.entry': { + 'Meta': {'ordering': "['-pub_date', '-created_at']", 'object_name': 'Entry'}, + 'added_origtext': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '50', 'blank': 'True'}), + 'email_phone': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'notified_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] \ No newline at end of file diff --git a/project/guestbook/migrations/0006_entry_set_email.py b/project/guestbook/migrations/0006_entry_set_email.py new file mode 100644 index 0000000..f35ad41 --- /dev/null +++ b/project/guestbook/migrations/0006_entry_set_email.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +from ..utils import extract_email + + +class Migration(DataMigration): + + def forwards(self, orm): + "Write your forwards methods here." + # Note: Don't use "from appname.models import ModelName". + # Use orm.ModelName to refer to models in this application, + # and orm['appname.ModelName'] for models in other applications. + + for entry in orm.Entry.objects.all(): + user_email = extract_email(entry.email_phone) + if user_email: + entry.email = user_email + entry.save() + entry.save() + + def backwards(self, orm): + "Write your backwards methods here." + raise RuntimeError("Cannot reverse this migration.") + + models = { + u'guestbook.entry': { + 'Meta': {'ordering': "['-pub_date', '-created_at']", 'object_name': 'Entry'}, + 'added_origtext': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '50', 'blank': 'True'}), + 'email_phone': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'notified_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] + symmetrical = True diff --git a/project/guestbook/migrations/0007_auto__del_field_entry_email_phone.py b/project/guestbook/migrations/0007_auto__del_field_entry_email_phone.py new file mode 100644 index 0000000..af6a9a4 --- /dev/null +++ b/project/guestbook/migrations/0007_auto__del_field_entry_email_phone.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'Entry.email_phone' + db.delete_column(u'guestbook_entry', 'email_phone') + + + def backwards(self, orm): + + # User chose to not deal with backwards NULL issues for 'Entry.email_phone' + raise RuntimeError("Cannot reverse this migration. 'Entry.email_phone' and its values cannot be restored.") + + # The following code is provided here to aid in writing a correct migration # Adding field 'Entry.email_phone' + db.add_column(u'guestbook_entry', 'email_phone', + self.gf('django.db.models.fields.CharField')(max_length=50), + keep_default=False) + + + models = { + u'guestbook.entry': { + 'Meta': {'ordering': "['-pub_date', '-created_at']", 'object_name': 'Entry'}, + 'added_origtext': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '50', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'notified_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] \ No newline at end of file diff --git a/project/guestbook/migrations/0008_auto__add_category__add_field_entry_category.py b/project/guestbook/migrations/0008_auto__add_category__add_field_entry_category.py new file mode 100644 index 0000000..b3d9bcd --- /dev/null +++ b/project/guestbook/migrations/0008_auto__add_category__add_field_entry_category.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Category' + db.create_table(u'guestbook_category', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=50)), + ('ordering', self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True)), + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'guestbook', ['Category']) + + # Adding field 'Entry.category' + db.add_column(u'guestbook_entry', 'category', + self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['guestbook.Category'], null=True, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting model 'Category' + db.delete_table(u'guestbook_category') + + # Deleting field 'Entry.category' + db.delete_column(u'guestbook_entry', 'category_id') + + + models = { + u'guestbook.category': { + 'Meta': {'ordering': "['ordering', 'name', '-pk']", 'object_name': 'Category'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.entry': { + 'Meta': {'ordering': "['-pub_date', '-created_at']", 'object_name': 'Entry'}, + 'added_origtext': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'category': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['guestbook.Category']", 'null': 'True', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '50', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'notified_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] \ No newline at end of file diff --git a/project/guestbook/migrations/0009_change_and_rename_field_category_title.py b/project/guestbook/migrations/0009_change_and_rename_field_category_title.py new file mode 100644 index 0000000..4d5a075 --- /dev/null +++ b/project/guestbook/migrations/0009_change_and_rename_field_category_title.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Changing field 'Category.title' + db.alter_column(u'guestbook_category', 'title', self.gf('django.db.models.fields.TextField')(max_length=5000)) + + # Renaming field 'Category.title' to 'Category.description' + db.rename_column('guestbook_category', 'title', 'description') + + def backwards(self, orm): + # Renaming field 'Category.description' to 'Category.title' + db.rename_column('guestbook_category', 'description', 'title') + + # Changing field 'Category.title' + db.alter_column(u'guestbook_category', 'title', self.gf('django.db.models.fields.CharField')(max_length=255)) + + models = { + u'guestbook.category': { + 'Meta': {'ordering': "['ordering', 'name', '-pk']", 'object_name': 'Category'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'description': ('django.db.models.fields.TextField', [], {'max_length': '5000'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.entry': { + 'Meta': {'ordering': "['-pub_date', '-created_at']", 'object_name': 'Entry'}, + 'added_origtext': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'category': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['guestbook.Category']", 'null': 'True', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '50', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'notified_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] \ No newline at end of file diff --git a/project/guestbook/migrations/0010_auto__add_field_category_page_title__add_field_category_meta_descripti.py b/project/guestbook/migrations/0010_auto__add_field_category_page_title__add_field_category_meta_descripti.py new file mode 100644 index 0000000..2f59672 --- /dev/null +++ b/project/guestbook/migrations/0010_auto__add_field_category_page_title__add_field_category_meta_descripti.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'Category.page_title' + db.add_column(u'guestbook_category', 'page_title', + self.gf('django.db.models.fields.CharField')(default='', max_length=255), + keep_default=False) + + # Adding field 'Category.meta_description' + db.add_column(u'guestbook_category', 'meta_description', + self.gf('django.db.models.fields.TextField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'Category.meta_keywords' + db.add_column(u'guestbook_category', 'meta_keywords', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'Category.page_title' + db.delete_column(u'guestbook_category', 'page_title') + + # Deleting field 'Category.meta_description' + db.delete_column(u'guestbook_category', 'meta_description') + + # Deleting field 'Category.meta_keywords' + db.delete_column(u'guestbook_category', 'meta_keywords') + + + models = { + u'guestbook.category': { + 'Meta': {'ordering': "['ordering', 'name', '-pk']", 'object_name': 'Category'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'max_length': '5000'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'meta_description': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}), + 'meta_keywords': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'page_title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.entry': { + 'Meta': {'ordering': "['-pub_date', '-created_at']", 'object_name': 'Entry'}, + 'added_origtext': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'category': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['guestbook.Category']", 'null': 'True', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '50', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'notified_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] \ No newline at end of file diff --git a/project/guestbook/migrations/0011_category_set_page_title.py b/project/guestbook/migrations/0011_category_set_page_title.py new file mode 100644 index 0000000..4805f11 --- /dev/null +++ b/project/guestbook/migrations/0011_category_set_page_title.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + "Write your forwards methods here." + # Note: Don't use "from appname.models import ModelName". + # Use orm.ModelName to refer to models in this application, + # and orm['appname.ModelName'] for models in other applications. + for cat in orm.Category.objects.all(): + name = cat.name.strip() + if name: + cat.page_title = name + cat.save() + + def backwards(self, orm): + "Write your backwards methods here." + raise RuntimeError("Cannot reverse this migration.") + + models = { + u'guestbook.category': { + 'Meta': {'ordering': "['ordering', 'name', '-pk']", 'object_name': 'Category'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'max_length': '5000'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'meta_description': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}), + 'meta_keywords': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'page_title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.entry': { + 'Meta': {'ordering': "['-pub_date', '-created_at']", 'object_name': 'Entry'}, + 'added_origtext': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'category': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['guestbook.Category']", 'null': 'True', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '50', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'max_length': '2000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'notified_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'pub_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'reply': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '2000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'guestbook.recipient': { + 'Meta': {'ordering': "['email']", 'object_name': 'Recipient'}, + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['guestbook'] + symmetrical = True diff --git a/project/guestbook/migrations/__init__.py b/project/guestbook/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/guestbook/models.py b/project/guestbook/models.py new file mode 100644 index 0000000..91ecf11 --- /dev/null +++ b/project/guestbook/models.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +from django.db import models +from django.core.urlresolvers import reverse + + +class Category(models.Model): + """Категория.""" + name = models.CharField(u'название', max_length=255, help_text=u'Название в меню.') + slug = models.SlugField(unique=True, help_text=u'Уникальная часть названия, используемая в URL.') + + page_title = models.CharField(u'заголовок страницы', max_length=255, help_text=u'Заголовок страницы.', default='') + + description = models.TextField(u'описание', max_length=5000) + + ordering = models.IntegerField(u'сортировка', null=True, blank=True, db_index=True, + help_text=u'Изменяет порядок сортировки.') + + meta_description = models.TextField(u'meta description', max_length=255, blank=True) + meta_keywords = models.CharField(u'meta keywords', max_length=255, blank=True) + + created_at = models.DateTimeField(u'создан', auto_now_add=True) + updated_at = models.DateTimeField(u'изменен', auto_now=True) + + class Meta: + verbose_name = u'категория' + verbose_name_plural = u'категории вопросов-ответов' + ordering = ['ordering', 'name', '-pk'] + + def __unicode__(self): + return self.name + + def get_absolute_url(self): + return reverse('guestbook-category-list', kwargs={'slug': self.slug}) + + def get_menu_title(self): + return self.name + + +class Entry(models.Model): + """Запись.""" + category = models.ForeignKey(Category, verbose_name=u'категория', blank=True, null=True, default=None) + + name = models.CharField(u'имя', max_length=100) + email = models.EmailField(u'email', max_length=50, blank=True, default='') + message = models.TextField(u'текст сообщения', max_length=2000) + reply = models.TextField(u'ваш ответ', max_length=2000, blank=True, default='') + + published = models.BooleanField(u'показывать', blank=True, default=False) + + pub_date = models.DateTimeField(u'дата публикации', blank=True, null=True, default=None) + + notified_user = models.BooleanField(u'уведомление пользователю', blank=True, default=False, + help_text=u'Уведомили пользователя об ответе на его вопрос?') + + added_origtext = models.BooleanField(u'добавлено в ориг.тексты', blank=True, default=False, + help_text=u'Добавили в оригинальные тексты Яндекс.Вебмастера?') + + created_at = models.DateTimeField(u'создан', auto_now_add=True) + updated_at = models.DateTimeField(u'изменен', auto_now=True) + + class Meta: + verbose_name = u'вопрос-ответ' + verbose_name_plural = u'вопросы-ответы' + ordering = ['-pub_date', '-created_at'] + + def __unicode__(self): + return u'%s, %s' % (self.name, self.email) + + def save(self, *args, **kwargs): + self.name = self.name.strip() + self.email = self.email.strip() + self.message = self.message.strip() + self.reply = self.reply.strip() + super(Entry, self).save(*args, **kwargs) + + +class Recipient(models.Model): + """Почучатель уведомлений о новых заявках.""" + email = models.EmailField(u'email', unique=True) + + class Meta: + verbose_name = u'получатель' + verbose_name_plural = u'получатели уведомлений' + ordering = ['email'] + + def __unicode__(self): + return self.email diff --git a/project/guestbook/templatetags/__init__.py b/project/guestbook/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/guestbook/templatetags/guestbook_tags.py b/project/guestbook/templatetags/guestbook_tags.py new file mode 100644 index 0000000..2c652f3 --- /dev/null +++ b/project/guestbook/templatetags/guestbook_tags.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from django.template import Library + +from ..models import Category + + +register = Library() + + +@register.assignment_tag +def get_guestbook_categories(): + return Category.objects.all() diff --git a/project/guestbook/tests.py b/project/guestbook/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/project/guestbook/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/project/guestbook/urls.py b/project/guestbook/urls.py new file mode 100644 index 0000000..5140627 --- /dev/null +++ b/project/guestbook/urls.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +from django.conf.urls import patterns, include, url + +from .views import index, category_list, thanks + + +urlpatterns = patterns('', + url(r'^$', index, name='guestbook-index'), + + url(r'^thanks/$', thanks, name='guestbook-thanks'), + + url(r'^(?P[0-9A-Za-z-_.]+)/$', category_list, name='guestbook-category-list'), +) diff --git a/project/guestbook/utils.py b/project/guestbook/utils.py new file mode 100644 index 0000000..843da0a --- /dev/null +++ b/project/guestbook/utils.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +import re + + +email_re = re.compile(r'[\w\-\.]+\@[\w\-\.]+') + + +def extract_email(s): + """Достать email из строки.""" + result = email_re.search(s) + return result.group(0) if result else None diff --git a/project/guestbook/views.py b/project/guestbook/views.py new file mode 100644 index 0000000..0c27349 --- /dev/null +++ b/project/guestbook/views.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +import logging + +from django.views.decorators.csrf import csrf_protect +from django.core.paginator import Paginator, InvalidPage +from django.shortcuts import render, redirect, get_object_or_404 +from django.conf import settings + +from project.teasers.models import get_teasers_for_path + +from .models import Category, Entry +from .forms import EntryForm +from .emails import mail_entry + + +PAGINATE_BY = getattr(settings, 'GUESTBOOK_PAGINATE_BY', 25) + +log = logging.getLogger('guestbook') + + +@csrf_protect +def index(request): + form = None + + if request.method == 'POST': + form = EntryForm(data=request.POST) + + if form.is_valid(): + entry = form.save() + + try: + mail_entry(entry) # уведомить по почте + except Exception as e: + log.exception(e) + + return redirect('guestbook-thanks') + + # если у записи не указана дата публикации, то учитывается дата создания + list_qry = (Entry.objects.filter(published=True) + .extra(select={'ordering_date': 'CASE WHEN pub_date IS NOT NULL THEN pub_date ELSE created_at END'}) + .order_by('-ordering_date') + ) + + paginator = Paginator(list_qry, PAGINATE_BY) + + try: + page_num = int(request.GET.get('page', 1)) + page = paginator.page(page_num) + except (ValueError, InvalidPage) as e: + page_num = 1 + page = paginator.page(1) + + teasers = get_teasers_for_path(request.path + u'?page=%s' % page_num) + + return render(request, 'guestbook/object_list.html', { + 'paginator': paginator, + 'page': page, + 'form': form or EntryForm(), + 'teasers': teasers, + }) + + +def category_list(request, slug): + """Вопросы-ответы внутри категории.""" + category = get_object_or_404(Category, slug__iexact=slug) + + # если у записи не указана дата публикации, то учитывается дата создания + list_qry = (Entry.objects.filter(category=category, published=True) + .extra(select={'ordering_date': 'CASE WHEN pub_date IS NOT NULL THEN pub_date ELSE created_at END'}) + .order_by('-ordering_date') + ) + + paginator = Paginator(list_qry, PAGINATE_BY) + + try: + page_num = int(request.GET.get('page', 1)) + page = paginator.page(page_num) + except (ValueError, InvalidPage) as e: + page_num = 1 + page = paginator.page(1) + + teasers = get_teasers_for_path(request.path + u'?page=%s' % page_num) + + return render(request, 'guestbook/category_list.html', { + 'paginator': paginator, + 'page': page, + 'category': category, + 'teasers': teasers, + }) + + +def thanks(request): + teasers = get_teasers_for_path(request.path) + return render(request, 'guestbook/thanks.html', {'teasers': teasers}) diff --git a/project/local_settings.py.dev-example b/project/local_settings.py.dev-example new file mode 100644 index 0000000..f4f195a --- /dev/null +++ b/project/local_settings.py.dev-example @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +from settings import * + +DEBUG = True +TEMPLATE_DEBUG = DEBUG + +ADMINS = ( + ('andrey.goo', 'andrey.goo@gmail.com'), +) + +MANAGERS = ADMINS + +SERVER_EMAIL = 'pensfond@localhost' # email that error messages come from +DEFAULT_FROM_EMAIL = 'pensfond@localhost' # email that other messages come from. default email for EmailMessage + +ALLOWED_HOSTS = ['*'] + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. + 'NAME': 'pensfond', # Or path to database file if using sqlite3. + 'USER': 'pensfond', # Not used with sqlite3. + 'PASSWORD': 'pensfond', # Not used with sqlite3. + 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. + 'PORT': '', # Set to empty string for default. Not used with sqlite3. + } +} + +EMAIL_BACKEND = 'eml_email_backend.EmailBackend' +EMAIL_FILE_PATH = path('../../tmp_emails') + +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', + #'BACKEND': 'django.core.cache.backends.dummy.DummyCache', + } +} + +DEVSERVER_DEFAULT_PORT = '8080' +DEVSERVER_MODULES = () +INSTALLED_APPS += ('devserver',) + +if False and 'debug_toolbar' not in INSTALLED_APPS: + MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',) + INSTALLED_APPS += ('debug_toolbar',) + + DEBUG_TOOLBAR_PANELS = ( + #'debug_toolbar.panels.version.VersionDebugPanel', + 'debug_toolbar.panels.timer.TimerDebugPanel', + 'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel', + 'debug_toolbar.panels.headers.HeaderDebugPanel', + 'debug_toolbar.panels.request_vars.RequestVarsDebugPanel', + 'debug_toolbar.panels.template.TemplateDebugPanel', + 'debug_toolbar.panels.sql.SQLDebugPanel', + 'debug_toolbar.panels.cache.CacheDebugPanel', + 'debug_toolbar.panels.logger.LoggingPanel', + ) + + INTERNAL_IPS = ('127.0.0.1',) + + DEBUG_TOOLBAR_CONFIG = { + 'EXCLUDE_URLS': ('/admin',), + 'INTERCEPT_REDIRECTS': False, + } diff --git a/project/local_settings.py.prod-example b/project/local_settings.py.prod-example new file mode 100644 index 0000000..01dbbe5 --- /dev/null +++ b/project/local_settings.py.prod-example @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from settings import * + +DEBUG = False +TEMPLATE_DEBUG = DEBUG + +ADMINS = ( + ('andrey.goo', 'andrey.goo@gmail.com'), +) + +MANAGERS = ADMINS + +ALLOWED_HOSTS = ['pensionnyj-fond.ru'] + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. + 'NAME': 'pensfond', # Or path to database file if using sqlite3. + 'USER': 'pensfond', # Not used with sqlite3. + 'PASSWORD': 'pensfond', # Not used with sqlite3. + 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. + 'PORT': '', # Set to empty string for default. Not used with sqlite3. + } +} + +# redefine secret_key if needed +#SECRET_KEY = 'wz6&*s4kz^%v8o4^v0wg*owh94!bocb!s-ubu87qzfea&kqwsq' + +# email settings +EMAIL_HOST = 'smtp.gmail.com' +EMAIL_PORT = 587 +EMAIL_HOST_USER = 'DEFINE EMAIL!' +EMAIL_HOST_PASSWORD = 'DEFINE PASSWORD!' +EMAIL_USE_TLS = True diff --git a/project/mysitemaps/__init__.py b/project/mysitemaps/__init__.py new file mode 100644 index 0000000..d8e6b41 --- /dev/null +++ b/project/mysitemaps/__init__.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +from .cms_sitemap import CMSSitemap +from .pensfonds_sitemaps import PensfondsStaticViewSitemap, PensfondsOblOtdelenSitemap, PensfondsNasPunktSitemap +from .guestbook_sitemaps import GuestbookIndexViewSitemap, GuestbookCategorySitemap + + +the_sitemaps = { + 'CMSSitemap': CMSSitemap, + 'PensfondsStaticView': PensfondsStaticViewSitemap, + 'PensfondsOblOtdelen': PensfondsOblOtdelenSitemap, + 'PensfondsNasPunkt': PensfondsNasPunktSitemap, + 'GuestbookIndexView': GuestbookIndexViewSitemap, + 'GuestbookCategory': GuestbookCategorySitemap, +} diff --git a/project/mysitemaps/cms_sitemap.py b/project/mysitemaps/cms_sitemap.py new file mode 100644 index 0000000..7554daf --- /dev/null +++ b/project/mysitemaps/cms_sitemap.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +from itertools import chain + +from django.contrib.sitemaps import Sitemap +from django.contrib.sites.models import Site +from django.db.models import Q +from django.core.urlresolvers import reverse + +from cms.models import Title, Page, CMSPlugin + + +class CMSSitemap(Sitemap): + """ + DjangoCMS Sitemap. + + Modified version of the original cms.sitemaps.CMSSitemap. + Everything cached to minimize number of sql queries. + + Notes: + - excluded pages that are redirected (items) + - excluded pages that require login (items) + - no multi language paths for pages (location) + + Project specific notes: + - excluded pages that are not in navigation (items) + - excluded page with 'guestbook' reverse_id (items) + """ + changefreq = 'monthly' + priority = None + + exclude_reverse_ids = ['guestbook'] + + def items(self): + self.all_page_placeholders = Page.placeholders.through.objects.all() + self.all_plugins = CMSPlugin.objects.all() + all_titles = ( + Title.objects.public() + .filter( + Q(redirect='') | Q(redirect__isnull=True), + page__login_required=False, + page__site=Site.objects.get_current(), + page__in_navigation=True, + ) + .exclude(page__reverse_id__in=self.exclude_reverse_ids) + .select_related('page') + .order_by('path') + ) + return all_titles + + def lastmod(self, title): + modification_dates = [title.page.changed_date, title.page.publication_date] + plugins_for_placeholder = lambda placeholder: \ + [p for p in self.all_plugins if p.placeholder_id == placeholder.placeholder_id] + page_placeholders = [pp for pp in self.all_page_placeholders if pp.page_id == title.page_id] + plugins = chain.from_iterable(map(plugins_for_placeholder, page_placeholders)) + plugin_modification_dates = map(lambda plugin: plugin.changed_date, plugins) + modification_dates.extend(plugin_modification_dates) + return max(modification_dates) + + def location(self, title): + if title.page.is_home(): + return reverse('pages-root') + return reverse('pages-details-by-slug', kwargs={'slug': title.path}) diff --git a/project/mysitemaps/guestbook_sitemaps.py b/project/mysitemaps/guestbook_sitemaps.py new file mode 100644 index 0000000..21a24e9 --- /dev/null +++ b/project/mysitemaps/guestbook_sitemaps.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +from django.core.urlresolvers import reverse +from django.contrib.sitemaps import Sitemap + +from project.guestbook.models import Category, Entry + + +class GuestbookIndexViewSitemap(Sitemap): + changefreq = 'monthly' + priority = None + + def items(self): + self.latest_entry = ( + Entry.objects.filter(published=True) + .extra(select={'ordering_date': 'CASE WHEN pub_date IS NOT NULL THEN pub_date ELSE created_at END'}) + .order_by('-ordering_date')[0] + ) + return ['guestbook-index'] + + def location(self, item): + return reverse(item) + + def lastmod(self, item): + return self.latest_entry.ordering_date + + +class GuestbookCategorySitemap(Sitemap): + changefreq = 'monthly' + priority = None + + def items(self): + # если у записи не указана дата публикации, то учитывается дата создания + self.all_entries = ( + Entry.objects.filter(published=True) + .extra(select={'ordering_date': 'CASE WHEN pub_date IS NOT NULL THEN pub_date ELSE created_at END'}) + .order_by('-ordering_date') + ) + return Category.objects.all() + + def lastmod(self, obj): + entry_dates = [e.ordering_date for e in self.all_entries if e.category_id == obj.id] + return max(entry_dates) diff --git a/project/mysitemaps/pensfonds_sitemaps.py b/project/mysitemaps/pensfonds_sitemaps.py new file mode 100644 index 0000000..7c1695a --- /dev/null +++ b/project/mysitemaps/pensfonds_sitemaps.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +from django.core.urlresolvers import reverse +from django.contrib.sitemaps import Sitemap + +from project.pensfonds.models import OblOtdelen, NasPunkt + + +class PensfondsStaticViewSitemap(Sitemap): + changefreq = 'monthly' + priority = None + + def items(self): + return ['pensfonds-all'] + + def location(self, item): + return reverse(item) + + +class PensfondsOblOtdelenSitemap(Sitemap): + changefreq = 'monthly' + priority = None + + def items(self): + return OblOtdelen.objects.exclude(slug__exact='').order_by('oblast').values('slug', 'updated_at') + + def location(self, obj): + return reverse('pensfonds-oblast', args=[obj['slug']]) + + def lastmod(self, obj): + return obj['updated_at'] + + +class PensfondsNasPunktSitemap(Sitemap): + changefreq = 'monthly' + priority = None + + def items(self): + return (NasPunkt.objects.exclude(obl_otdelen__slug__exact='').exclude(slug__exact='') + .order_by('obl_otdelen', 'name') + .values('obl_otdelen__slug', 'slug', 'updated_at') + ) + + def location(self, obj): + return reverse('pensfonds-naspunkt', args=[obj['obl_otdelen__slug'], obj['slug']]) + + def lastmod(self, obj): + return obj['updated_at'] diff --git a/project/npfs/__init__.py b/project/npfs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/npfs/admin.py b/project/npfs/admin.py new file mode 100644 index 0000000..7bead0a --- /dev/null +++ b/project/npfs/admin.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +from django.contrib import admin + +from .models import Fond, FondStats + + +class FondAdmin(admin.ModelAdmin): + list_display = ['license', 'license_date', 'name', 'slug'] + list_display_links = list_display + list_filter = ['license_date', 'ops'] + search_fields = ['license', 'name', 'slug', 'description', 'content', 'short_name', 'full_name', 'inn', 'ogrn', + 'addr', 'tel', 'tel2', 'tel3', 'url'] + prepopulated_fields = {'slug': ['name']} + + class Media: + css = {'all': ('css/custom-admin.css',)} + + +class FondStatsAdmin(admin.ModelAdmin): + list_display = ['fond', 'god', 'kvartal'] + list_display_links = list_display + list_filter = ['god', 'kvartal', 'fond'] + search_fields = ['fond__license'] + + class Media: + css = {'all': ('css/custom-admin.css',)} + + +admin.site.register(Fond, FondAdmin) +admin.site.register(FondStats, FondStatsAdmin) diff --git a/project/npfs/admin_views.py b/project/npfs/admin_views.py new file mode 100644 index 0000000..7c5177f --- /dev/null +++ b/project/npfs/admin_views.py @@ -0,0 +1,199 @@ +# -*- coding: utf-8 -*- +from django import forms +from django.shortcuts import render +from django.views.decorators.csrf import csrf_protect +from django.contrib.admin.views.decorators import staff_member_required +from django.contrib.auth.decorators import permission_required +from django.utils.encoding import force_text +from django.conf import settings + +import xlrd + +from .models import Fond, FondStats + +from .forms import AdminBaseImportForm, AdminFondStatsImportForm + + +DEBUG_IMPORT = getattr(settings, 'DEBUG_NPF_IMPORT', False) + + +def _getval_str(row, cx): + """Взять значение из колонки внутри переданной строки. + Если значение прочитано из экселя как float вида 123.0, то .0 отбрасывается. + Иначе значение берётся как есть. + Всегда возвращает строку, начальные и хвостовые пробелы отрезаются. + """ + val = row[cx].value + if isinstance(val, float) and val - int(val) == 0: + val = int(val) + return force_text((u'%s' % val).strip()) + + +def _getval_int(row, cx): + """Взять целое значение из колонки внутри переданной строки. + Возвращает число или выбрасывает ошибку конвертации. + """ + val = row[cx].value + return int(val) + + +def _getval_int_or_none(row, cx): + """Взять целое значение из колонки внутри переданной строки. + Возвращает число или None в случае ошибки конвертации. + """ + val = row[cx].value + try: + return int(val) + except ValueError: + return None + + +def _getval_float_or_none(row, cx): + """Взять float из колонки внутри переданной строки. + Возвращает число или None в случае ошибки конвертации. + """ + val = row[cx].value + try: + return float(val) + except ValueError: + return None + + +@csrf_protect +@staff_member_required +@permission_required('can_import_export_fond', raise_exception=True) +def revise_licenses(request): + """Сверка лицензий НПФ.""" + IDX_LICENSE = 0 # номер лицензии + + xls_file = None + new_licenses = None + closed_licenses = None + + start_nrow = 1 # с какой строки начинать импорт из файла (отсчёт с нуля) + + form_class = AdminBaseImportForm + + if request.method == 'GET': + form = form_class() + else: + form = form_class(request.POST, request.FILES) + + if request.method == 'POST' and form.is_valid(): + xls_file = request.FILES['xls_file'] + xls_to_import = xls_file.read() + book = xlrd.open_workbook(file_contents=xls_to_import) + + sh = book.sheet_by_index(0) + + # все лицензии в файле + xls_licenses = set([_getval_str(sh.row(rx), IDX_LICENSE) for rx in xrange(start_nrow, sh.nrows)]) + + # все лицензии на сайте + db_licenses = set(Fond.objects.all().order_by('license').values_list('license', flat=True)) + + # лицензии, которые есть в файле, но отсутствуют на сайте (новые фонды) + new_licenses = xls_licenses.difference(db_licenses) + + # лицензии, которые есть на сайте, но отсутствуют в файле (закрывшиеся фонды) + closed_licenses = db_licenses.difference(xls_licenses) + + return render(request, 'admin/npfs/revise_licenses.html', + { + 'form': form, + 'xls': xls_file, + 'new_licenses': new_licenses, + 'closed_licenses': closed_licenses, + }, + ) + + +@csrf_protect +@staff_member_required +@permission_required('can_imp_exp_fond_stats', raise_exception=True) +def import_fond_stats(request): + """Импорт основных показателей НПФ.""" + import_errors = [] + err_license_not_found = [] + + xls_file = None + wrong_file = None + + start_nrow = 4 # с какой строки начинать импорт из файла (отсчёт с нуля) + + form_class = AdminFondStatsImportForm + + if request.method == 'GET': + form = form_class() + else: + form = form_class(request.POST, request.FILES) + + if request.method == 'POST' and form.is_valid(): + xls_file = request.FILES['xls_file'] + xls_to_import = xls_file.read() + book = xlrd.open_workbook(file_contents=xls_to_import) + + sh = book.sheet_by_index(0) + + god = int(form.cleaned_data['god']) + kvartal = int(form.cleaned_data['kvartal']) + + # закешировать НПФ в словарь. ключ номер лицензии + fond_cache = {_fond.license: _fond for _fond in Fond.objects.all()} + + rx = 0 + for rx in xrange(start_nrow, sh.nrows): + row = sh.row(rx) + + try: + license = _getval_str(row, 0) + + if not license: + raise Exception(u'Не указан `№ лицензии` в строке номер %d!' % (rx+1)) + + try: + fond = fond_cache[license] + except KeyError: + err_license_not_found.append(rx + 1) + raise Exception(u'Не найден `НПФ` в строке номер %d!' % (rx+1)) + + fond_stats, created = FondStats.objects.get_or_create( + fond=fond, god=god, kvartal=kvartal) + + fond_stats.imusch = _getval_float_or_none(row, 2) + fond_stats.kapital = _getval_float_or_none(row, 3) + fond_stats.ioud = _getval_float_or_none(row, 4) + fond_stats.pens_rezerv = _getval_float_or_none(row, 5) + fond_stats.pens_nakopl = _getval_float_or_none(row, 6) + fond_stats.obyazat = _getval_float_or_none(row, 7) + fond_stats.pens_nakopl_rynok = _getval_float_or_none(row, 8) + fond_stats.num_zastrah = _getval_int_or_none(row, 9) + fond_stats.num_zastrah_pens = _getval_int_or_none(row, 10) + fond_stats.pens_ops = _getval_float_or_none(row, 11) + fond_stats.num_chel = _getval_int_or_none(row, 12) + fond_stats.num_chel_pens = _getval_int_or_none(row, 13) + fond_stats.vyplat_npo = _getval_float_or_none(row, 14) + fond_stats.dohod_razmesch = _getval_float_or_none(row, 15) + fond_stats.dohod_invest = _getval_float_or_none(row, 16) + + fond_stats.save() + except: + if DEBUG_IMPORT: + raise + else: + import_errors.append(rx + 1) + + if rx + 1 > len(import_errors): + wrong_file = False + else: + wrong_file = True + + return render(request, 'admin/npfs/fond_stats.html', + { + 'form': form, + 'import_errors': import_errors, + 'err_license_not_found': err_license_not_found, + 'xls': xls_file, + 'wrong_file': wrong_file, + }, + ) diff --git a/project/npfs/forms.py b/project/npfs/forms.py new file mode 100644 index 0000000..891f8e7 --- /dev/null +++ b/project/npfs/forms.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from django import forms + +from .models import FondStats + + +class AdminBaseImportForm(forms.Form): + """Форма импорта из указанного файла.""" + xls_file = forms.FileField(label=u'Файл для импорта') + + +class AdminFondStatsImportForm(AdminBaseImportForm): + """Форма импорта основных показателей НПФ.""" + god = forms.IntegerField(label=u'год', min_value=2000, max_value=2030) + kvartal = forms.ChoiceField(label=u'квартал', choices=FondStats.KVARTAL_CHOICES) diff --git a/project/npfs/migrations/0001_initial.py b/project/npfs/migrations/0001_initial.py new file mode 100644 index 0000000..dc5218d --- /dev/null +++ b/project/npfs/migrations/0001_initial.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Fond' + db.create_table(u'npfs_fond', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('license', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255, db_index=True)), + ('license_date', self.gf('django.db.models.fields.DateField')()), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=50)), + ('logo', self.gf('django.db.models.fields.files.ImageField')(default='', max_length=100, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(default='', max_length=5000, blank=True)), + ('content', self.gf('django.db.models.fields.TextField')(default='', max_length=10000, blank=True)), + ('short_name', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('full_name', self.gf('django.db.models.fields.TextField')(default='', max_length=500, blank=True)), + ('inn', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('ogrn', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('addr', self.gf('django.db.models.fields.TextField')(default='', max_length=500, blank=True)), + ('tel', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('tel2', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('tel3', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('url', self.gf('django.db.models.fields.URLField')(default='', max_length=255, blank=True)), + ('ops', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'npfs', ['Fond']) + + + def backwards(self, orm): + # Deleting model 'Fond' + db.delete_table(u'npfs_fond') + + + models = { + u'npfs.fond': { + 'Meta': {'ordering': "['name', 'license']", 'object_name': 'Fond'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '500', 'blank': 'True'}), + 'content': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '10000', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '5000', 'blank': 'True'}), + 'full_name': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '500', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'license': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}), + 'license_date': ('django.db.models.fields.DateField', [], {}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'ogrn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'ops': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'short_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'tel': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel2': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel3': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'url': ('django.db.models.fields.URLField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}) + } + } + + complete_apps = ['npfs'] \ No newline at end of file diff --git a/project/npfs/migrations/0002_auto__add_fondstats__add_unique_fondstats_fond_god_kvartal__add_index_.py b/project/npfs/migrations/0002_auto__add_fondstats__add_unique_fondstats_fond_god_kvartal__add_index_.py new file mode 100644 index 0000000..9d9dc44 --- /dev/null +++ b/project/npfs/migrations/0002_auto__add_fondstats__add_unique_fondstats_fond_god_kvartal__add_index_.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'FondStats' + db.create_table(u'npfs_fondstats', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('fond', self.gf('django.db.models.fields.related.ForeignKey')(related_name='stats', to=orm['npfs.Fond'])), + ('god', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('kvartal', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('imusch', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=12, decimal_places=2, blank=True)), + ('kapital', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=12, decimal_places=2, blank=True)), + ('ioud', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=12, decimal_places=2, blank=True)), + ('pens_rezerv', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=12, decimal_places=2, blank=True)), + ('pens_nakopl', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=12, decimal_places=2, blank=True)), + ('obyazat', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=12, decimal_places=2, blank=True)), + ('pens_nakopl_rynok', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=12, decimal_places=2, blank=True)), + ('num_zastrah', self.gf('django.db.models.fields.PositiveIntegerField')(default=None, null=True, blank=True)), + ('num_zastrah_pens', self.gf('django.db.models.fields.PositiveIntegerField')(default=None, null=True, blank=True)), + ('pens_ops', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=12, decimal_places=2, blank=True)), + ('num_chel', self.gf('django.db.models.fields.PositiveIntegerField')(default=None, null=True, blank=True)), + ('num_chel_pens', self.gf('django.db.models.fields.PositiveIntegerField')(default=None, null=True, blank=True)), + ('vyplat_npo', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=12, decimal_places=2, blank=True)), + ('dohod_razmesch', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=6, decimal_places=2, blank=True)), + ('dohod_invest', self.gf('django.db.models.fields.DecimalField')(default=None, null=True, max_digits=6, decimal_places=2, blank=True)), + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'npfs', ['FondStats']) + + # Adding unique constraint on 'FondStats', fields ['fond', 'god', 'kvartal'] + db.create_unique(u'npfs_fondstats', ['fond_id', 'god', 'kvartal']) + + # Adding index on 'FondStats', fields ['fond', 'god', 'kvartal'] + db.create_index(u'npfs_fondstats', ['fond_id', 'god', 'kvartal']) + + + def backwards(self, orm): + # Removing index on 'FondStats', fields ['fond', 'god', 'kvartal'] + db.delete_index(u'npfs_fondstats', ['fond_id', 'god', 'kvartal']) + + # Removing unique constraint on 'FondStats', fields ['fond', 'god', 'kvartal'] + db.delete_unique(u'npfs_fondstats', ['fond_id', 'god', 'kvartal']) + + # Deleting model 'FondStats' + db.delete_table(u'npfs_fondstats') + + + models = { + u'npfs.fond': { + 'Meta': {'ordering': "['name', 'license']", 'object_name': 'Fond'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '500', 'blank': 'True'}), + 'content': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '10000', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '5000', 'blank': 'True'}), + 'full_name': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '500', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'license': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}), + 'license_date': ('django.db.models.fields.DateField', [], {}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'ogrn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'ops': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'short_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'tel': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel2': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel3': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'url': ('django.db.models.fields.URLField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}) + }, + u'npfs.fondstats': { + 'Meta': {'ordering': "['fond', 'god', 'kvartal']", 'unique_together': "(['fond', 'god', 'kvartal'],)", 'object_name': 'FondStats', 'index_together': "[['fond', 'god', 'kvartal']]"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'dohod_invest': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '6', 'decimal_places': '2', 'blank': 'True'}), + 'dohod_razmesch': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '6', 'decimal_places': '2', 'blank': 'True'}), + 'fond': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'stats'", 'to': u"orm['npfs.Fond']"}), + 'god': ('django.db.models.fields.PositiveIntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imusch': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}), + 'ioud': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}), + 'kapital': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}), + 'kvartal': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'num_chel': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'num_chel_pens': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'num_zastrah': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'num_zastrah_pens': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'obyazat': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}), + 'pens_nakopl': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}), + 'pens_nakopl_rynok': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}), + 'pens_ops': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}), + 'pens_rezerv': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'vyplat_npo': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}) + } + } + + complete_apps = ['npfs'] \ No newline at end of file diff --git a/project/npfs/migrations/__init__.py b/project/npfs/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/npfs/models.py b/project/npfs/models.py new file mode 100644 index 0000000..bfa4753 --- /dev/null +++ b/project/npfs/models.py @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- +from django.db import models +from django.core.validators import MinValueValidator, MaxValueValidator + + +class Fond(models.Model): + """НПФ.""" + license = models.CharField(u'номер лицензии', max_length=255, unique=True, db_index=True) + license_date = models.DateField(u'дата выдачи лицензии') + + name = models.CharField(u'название', max_length=255) + slug = models.SlugField(u'слаг', unique=True) + + logo = models.ImageField(u'логотип', upload_to='npfs/', blank=True, default='') + description = models.TextField(u'описание', max_length=5000, blank=True, default='') + content = models.TextField(u'основной контент', max_length=10000, blank=True, default='') + + short_name = models.CharField(u'краткое наименование', max_length=255, blank=True, default='') + full_name = models.TextField(u'полное наименование', max_length=500, blank=True, default='') + + inn = models.CharField(u'ИНН', max_length=255, blank=True, default='') + ogrn = models.CharField(u'ОГРН', max_length=255, blank=True, default='') + addr = models.TextField(u'адрес юр. лица', max_length=500, blank=True, default='') + tel = models.CharField(u'телефон', max_length=255, blank=True, default='') + tel2 = models.CharField(u'телефон 2', max_length=255, blank=True, default='') + tel3 = models.CharField(u'телефон 3', max_length=255, blank=True, default='') + url = models.URLField(u'адрес сайта', max_length=255, blank=True, default='') + ops = models.BooleanField(u'деятельность по ОПС', blank=True, default=False) + + created_at = models.DateTimeField(u'создан', auto_now_add=True) + updated_at = models.DateTimeField(u'изменен', auto_now=True) + + class Meta: + verbose_name = u'фонд' + verbose_name_plural = u'фонды' + ordering = ['name', 'license'] + permissions = [['can_import_export_fond', u'Импорт/экспорт']] + + def __unicode__(self): + return (u'%s - %s' % (self.license.strip(), self.name.strip()[:50])).strip() + + +class FondStats(models.Model): + """Основные показатели НПФ.""" + KVARTAL_CHOICES = ( + (1, u'1 квартал'), + (2, u'2 квартал'), + (3, u'3 квартал'), + (4, u'4 квартал'), + ) + + fond = models.ForeignKey(Fond, verbose_name=u'фонд', related_name='stats') + + god = models.PositiveIntegerField(u'год', validators=[MinValueValidator(2000), MaxValueValidator(2030)]) + kvartal = models.PositiveIntegerField(u'квартал', choices=KVARTAL_CHOICES) + + imusch = models.DecimalField(u'Имущество фонда', max_digits=12, decimal_places=2, + blank=True, null=True, default=None, help_text=u'тыс. рублей') + + kapital = models.DecimalField(u'Капитал и резервы', max_digits=12, decimal_places=2, + blank=True, null=True, default=None, help_text= u'тыс. рублей') + + ioud = models.DecimalField(u'ИОУД', max_digits=12, decimal_places=2, + blank=True, null=True, default=None, help_text=u'тыс. рублей') + + pens_rezerv = models.DecimalField(u'Пенс. резервы', max_digits=12, decimal_places=2, + blank=True, null=True, default=None, help_text=u'тыс. рублей') + + pens_nakopl = models.DecimalField(u'Пенс. накопл. (балансовая стоимость)', max_digits=12, decimal_places=2, + blank=True, null=True, default=None, help_text=u'тыс. рублей') + + obyazat = models.DecimalField(u'Кратко- и долгосрочные обязательства фонда', max_digits=12, decimal_places=2, + blank=True, null=True, default=None, help_text=u'тыс. рублей') + + pens_nakopl_rynok = models.DecimalField(u'Пенс. накопл. (рыночная стоимость)', max_digits=12, decimal_places=2, + blank=True, null=True, default=None, help_text= u'тыс. рублей') + + num_zastrah = models.PositiveIntegerField(u'Кол-во застрах. лиц', + blank=True, null=True, default=None, help_text=u'человек') + + num_zastrah_pens = models.PositiveIntegerField(u'Кол-во застрах. лиц, получ. пенсию', + blank=True, null=True, default=None, + help_text=u'(единовременные выплаты, срочные выплаты, накопительная часть трудовой пенсии), человек') + + pens_ops = models.DecimalField(u'Выплаты пенсий по ОПС', max_digits=12, decimal_places=2, + blank=True, null=True, default=None, + help_text=u'(единовременные выплаты, срочные выплаты, накопительная часть трудовой пенсии), тыс. рублей') + + num_chel = models.PositiveIntegerField(u'Кол-во участников', + blank=True, null=True, default=None, help_text=u'человек') + + num_chel_pens = models.PositiveIntegerField(u'Кол-во участников, получ. пенсию', + blank=True, null=True, default=None, help_text= u'человек') + + vyplat_npo = models.DecimalField(u'Выплаты пенсий по НПО', max_digits=12, decimal_places=2, + blank=True, null=True, default=None, help_text=u'тыс. рублей') + + dohod_razmesch = models.DecimalField(u'Доходность размещения', max_digits=6, decimal_places=2, + blank=True, null=True, default=None, help_text=u'средств пенсионных резервов с начала года') + + dohod_invest = models.DecimalField(u'Доходность инвестирования', max_digits=6, decimal_places=2, + blank=True, null=True, default=None, help_text=u'средств пенсионных накоплений с начала года') + + created_at = models.DateTimeField(u'создан', auto_now_add=True) + updated_at = models.DateTimeField(u'изменен', auto_now=True) + + class Meta: + verbose_name = u'основные показатели фонда' + verbose_name_plural = u'основные показатели фондов' + permissions = [['can_imp_exp_fond_stats', u'Импорт/экспорт основных показателей НПФ']] + ordering = ['fond__license', 'god', 'kvartal'] + unique_together = ['fond', 'god', 'kvartal'] + index_together = [['fond', 'god', 'kvartal']] + + def __unicode__(self): + return u'%s, %s, %s' % (self.fond, self.god, self.kvartal) diff --git a/project/npfs/tests.py b/project/npfs/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/project/npfs/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/project/npfs/urls.py b/project/npfs/urls.py new file mode 100644 index 0000000..7c1f1a4 --- /dev/null +++ b/project/npfs/urls.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +from django.conf.urls import patterns, include, url + +from .views import npfs_all, npfs_fond + + +urlpatterns = patterns('', + url(r'^$', npfs_all, name='npfs-all'), + + url(r'^(?P[0-9A-Za-z-_.]+)/$', npfs_fond, name='npfs-fond'), +) diff --git a/project/npfs/views.py b/project/npfs/views.py new file mode 100644 index 0000000..e90399d --- /dev/null +++ b/project/npfs/views.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +from collections import OrderedDict + +from django.shortcuts import get_object_or_404, render + +from project.teasers.models import get_teasers_for_path + +from .models import Fond + + +def npfs_all(request): + """ .""" + _fond_list = Fond.objects.all().order_by('name') + + fonds = OrderedDict() # + _fonds_digit = OrderedDict() # , , + + for _fond in _fond_list: + _char = _fond.name.strip()[0] + if _char.isdigit(): + try: + _fonds_digit[_char].append(_fond) + except KeyError: + _fonds_digit[_char] = [_fond] + else: + try: + fonds[_char].append(_fond) + except KeyError: + fonds[_char] = [_fond] + + fonds.update(_fonds_digit) + + teasers = get_teasers_for_path(request.path) + + return render(request, 'npfs/npfs_all.html', {'fonds': fonds, 'teasers': teasers}) + + +def npfs_fond(request, slug): + """ .""" + fond = get_object_or_404(Fond, slug__iexact=slug) + + teasers = get_teasers_for_path(request.path) + + return render(request, 'npfs/npfs_fond.html', {'fond': fond, 'teasers': teasers}) diff --git a/project/pensfonds/__init__.py b/project/pensfonds/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/pensfonds/admin.py b/project/pensfonds/admin.py new file mode 100644 index 0000000..f53c3ce --- /dev/null +++ b/project/pensfonds/admin.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from django.contrib import admin + +from .models import OblOtdelen, NasPunkt, NasPunktOtdelen, Otdel, OtdelType + + +class OblOtdelenAdmin(admin.ModelAdmin): + list_display = ['oblast', 'slug'] + list_display_links = ['oblast'] + list_filter = ['oblast'] + search_fields = ['oblast', 'addr'] + prepopulated_fields = {'slug': ['oblast']} + + class Media: + css = {'all': ('css/custom-admin.css',)} + + +class NasPunktAdmin(admin.ModelAdmin): + list_display = ['name', 'slug', 'obl_otdelen'] + list_display_links = ['name', 'obl_otdelen'] + list_filter = ['obl_otdelen', 'obl_otdelen'] + search_fields = ['name', ] + prepopulated_fields = {'slug': ['name']} + + class Media: + css = {'all': ('css/custom-admin.css',)} + + +class OtdelInline(admin.TabularInline): + model = Otdel + extra = 0 + + +class NasPunktOtdelenAdmin(admin.ModelAdmin): + list_display = ['obj', 'ordering', 'naspunkt', 'obl_otdelen'] + list_display_links = ['obj', 'naspunkt', 'obl_otdelen'] + list_filter = ['obl_otdelen', 'obl_otdelen__oblast'] + search_fields = ['obj', 'addr'] + inlines = [OtdelInline,] + + class Media: + css = {'all': ('css/custom-admin.css',)} + + +admin.site.register(Otdel) +admin.site.register(OtdelType) +admin.site.register(OblOtdelen, OblOtdelenAdmin) +admin.site.register(NasPunkt, NasPunktAdmin) +admin.site.register(NasPunktOtdelen, NasPunktOtdelenAdmin) diff --git a/project/pensfonds/admin_views.py b/project/pensfonds/admin_views.py new file mode 100644 index 0000000..b7619c8 --- /dev/null +++ b/project/pensfonds/admin_views.py @@ -0,0 +1,710 @@ +# -*- coding: utf-8 -*- +from StringIO import StringIO + +from django import forms +from django.shortcuts import render, redirect +from django.http import HttpResponse +from django.views.decorators.csrf import csrf_protect +from django.contrib.admin.views.decorators import staff_member_required +from django.contrib.auth.decorators import permission_required +from django.utils.encoding import force_text +from django.utils import timezone +from django.db import connection, transaction +from django.conf import settings + +import xlrd +import xlsxwriter +from urlify import urlify + +from .models import OblOtdelen, NasPunkt, NasPunktOtdelen, OtdelType, Otdel + +from .forms import AdminBaseImportForm + + +DEBUG_IMPORT = getattr(settings, 'DEBUG_PENSFONDS_IMPORT', False) + +ALLOW_EMPTY_NASPUNKTS = False # разрешить пустые населенные пункты при импорте отделений + + +def _getval_str(row, cx, multiline=False): + """Взять значение из колонки внутри переданной строки. + Если значение прочитано из экселя как float, + то сначала переводит его в int - чтобы отбросить дробную часть. + Если задан multiline, то преобразует символы # в \n. + Всегда возвращает строку, начальные и хвостовые пробелы отрезаются. + """ + val = row[cx].value + if isinstance(val, float): + val = int(val) + if multiline: + return force_text(u'%s' % val).replace('#','\n').replace('\r','').strip() + else: + return force_text((u'%s' % val).strip()) + + +def _getval_int(row, cx): + """Взять целое значение из колонки внутри переданной строки. + Возвращает число или выбрасывает ошибку конвертации. + """ + val = row[cx].value + return int(val) + + +def _prep_str(s): + """Заменяет в переданной строке \r\n на \n. + Преобразует \n в символ #. + Начальные и хвостовые пробелы отрезаются. + """ + return s.replace('\r\n','\n').replace('\n','#').strip() + +@csrf_protect +@staff_member_required +@permission_required('can_import_export_oblotdelen', raise_exception=True) +def import_obl_otdelen(request): + """Импорт центральных отделений.""" + import_errors = [] + xls_file = None + wrong_file = None + + start_nrow = 1 # с какой строки начинать импорт (отсчёт с нуля) + + form_class = AdminBaseImportForm + + if request.method == 'GET': + form = form_class() + else: + form = form_class(request.POST, request.FILES) + + if request.method == 'POST' and form.is_valid(): + xls_file = request.FILES['xls_file'] + xls_to_import = xls_file.read() + book = xlrd.open_workbook(file_contents=xls_to_import) + + sh = book.sheet_by_index(0) + + rx = 0 + for rx in xrange(start_nrow, sh.nrows): + row = sh.row(rx) + + try: + oblast = _getval_str(row, 0) + + if not oblast: + raise Exception(u'Не указана `область` в строке номер %d!' % (rx+1)) + + otdelen, created = OblOtdelen.objects.get_or_create( + oblast__iexact=oblast) + + otdelen.oblast = oblast + otdelen.oblast_short = _getval_str(row, 1) + + otdelen.po_regionu = _getval_str(row, 2) + otdelen.po_regionu_short = _getval_str(row, 3) + otdelen.regiona = _getval_str(row, 4) + otdelen.regiona_short = _getval_str(row, 5) + otdelen.regionalnoe = _getval_str(row, 6) + otdelen.otdely = _getval_str(row, 7) + + otdelen.addr = _getval_str(row, 8) + # + otdelen.tel_hotline = _getval_str(row, 9, multiline=True) # multiline + otdelen.priemnaya = _getval_str(row, 10) + otdelen.fax = _getval_str(row, 11) + otdelen.smi = _getval_str(row, 12) + otdelen.head = _getval_str(row, 13) + otdelen.min_pensia = row[14].value or None + # + otdelen.doplata = row[15].value or None + + ## make slug + + otdelen.slug = urlify(otdelen.oblast) + + # now make sure slug is unique + _suffix = 2 + while OblOtdelen.objects.filter(slug=otdelen.slug).exclude(pk=otdelen.pk).exists(): + if _suffix > 10: + raise Exception(u'Too many iterations! Row %d.' % (rx+1)) + otdelen.slug = "%s-%d" % (otdelen.slug, _suffix) + _suffix += 1 + + ## + otdelen.save() + + except: + if DEBUG_IMPORT: + raise + else: + import_errors.append(rx + 1) + + if rx + 1 > len(import_errors): + wrong_file = False + else: + wrong_file = True + + return render(request, 'admin/pensfonds/import_obl_otdelen.html', + { + 'form': form, + 'import_errors': import_errors, + 'xls': xls_file, + 'wrong_file': wrong_file, + }, + ) + + +@csrf_protect +@staff_member_required +@permission_required('can_import_export_naspunkts', raise_exception=True) +def import_naspunkts(request): + """Импорт населённых пунктов.""" + import_errors = [] + xls_file = None + wrong_file = None + + start_nrow = 1 # с какой строки начинать импорт (отсчёт с нуля) + + form_class = AdminBaseImportForm + + if request.method == 'GET': + form = form_class() + else: + form = form_class(request.POST, request.FILES) + + if request.method == 'POST' and form.is_valid(): + xls_file = request.FILES['xls_file'] + xls_to_import = xls_file.read() + book = xlrd.open_workbook(file_contents=xls_to_import) + + sh = book.sheet_by_index(0) + + # закешировать центральные отделения в словарь. ключ название области + obl_otdelens_cache = {_obl.oblast: _obl for _obl in OblOtdelen.objects.all()} + + # закешировать населенные пункты в словарь. ключ tuple(naspunkt.obl_otdelen.pk, naspunkt.name) + naspunkts_cache = {(_naspunkt.obl_otdelen.pk, _naspunkt.name): _naspunkt + for _naspunkt in NasPunkt.objects.all().select_related()} + + # какие нас. пункты уже добавили: уникальность по tuple(obl_otdelen.pk, naspunkt.name) + added_otdelens = set() + + # список нас.пунктов, которые нужно добававить в базу (для bulk_create) + create_list = [] + + # список нас.пунктов, которые нужно изменить в базе (для bulk_update) + update_list = [] + + update_sql = '''UPDATE ''' + NasPunkt._meta.db_table + ''' + SET + obl_otdelen_id = %s, + name = %s, + gde = %s, + chego = %s, + chemu = %s, + kakoy = %s, + kakoe = %s, + kakie = %s, + people_count = %s, + slug = %s, + updated_at = %s + WHERE id = %s; + ''' + + rx = 0 + for rx in xrange(start_nrow, sh.nrows): + row = sh.row(rx) + + try: + oblast = _getval_str(row, 0) + + if not oblast: + raise Exception(u'Не указана `область` в строке номер %d!' % (rx+1)) + + try: + obl_otdelen = obl_otdelens_cache[oblast] + except KeyError: + raise Exception(u'Не найдено `центральное отделение` в строке номер %d!' % (rx+1)) + + # + naspunkt_name = _getval_str(row, 1) + + if not naspunkt_name: + raise Exception(u'Не указан `населенный пункт` в строке номер %d!' % (rx+1)) + + # + _curr_otdelen_key = (obl_otdelen.pk, naspunkt_name) + + # пропускать повторы + if _curr_otdelen_key in added_otdelens: + raise Exception(u'Повтор населенного пункта в строке номер %d!' % (rx+1)) + + added_otdelens.add(_curr_otdelen_key) + + # изменить существующий объект или создать новый + if _curr_otdelen_key in naspunkts_cache: + otdelen = naspunkts_cache[_curr_otdelen_key] + else: + otdelen = NasPunkt() + + otdelen.obl_otdelen = obl_otdelen + otdelen.name = naspunkt_name + + otdelen.gde = _getval_str(row, 2) + otdelen.chego = _getval_str(row, 3) + otdelen.chemu = _getval_str(row, 4) + otdelen.kakoy = _getval_str(row, 5) + otdelen.kakoe = _getval_str(row, 6) + otdelen.kakie = _getval_str(row, 7) + + otdelen.people_count = _getval_int(row, 8) + + otdelen.slug = urlify(otdelen.name) + + # + if _curr_otdelen_key in naspunkts_cache: + update_list.append(otdelen) + else: + create_list.append(otdelen) + + except: + if DEBUG_IMPORT: + raise + else: + import_errors.append(rx + 1) + + if create_list: + NasPunkt.objects.bulk_create(create_list) + + if update_list: + _params = [] + for otdelen in update_list: + _params.append(( + otdelen.obl_otdelen.pk, + otdelen.name, + otdelen.gde, + otdelen.chego, + otdelen.chemu, + otdelen.kakoy, + otdelen.kakoe, + otdelen.kakie, + otdelen.people_count, + otdelen.slug, + timezone.now(), # updated_at + otdelen.pk, # record id for where clause + )) + cursor = connection.cursor() + cursor.executemany(update_sql, _params) + transaction.commit_unless_managed() + + if rx + 1 > len(import_errors): + wrong_file = False + else: + wrong_file = True + + return render(request, 'admin/pensfonds/import_naspunkts.html', + { + 'form': form, + 'import_errors': import_errors, + 'xls': xls_file, + 'wrong_file': wrong_file, + }, + ) + + +@csrf_protect +@staff_member_required +@permission_required('can_import_export_naspunktotdelen', raise_exception=True) +def import_naspunkt_otdelen(request): + """Импорт отделений в нас. пунктах.""" + import_errors = [] + xls_file = None + wrong_file = None + + start_nrow = 1 # с какой строки начинать импорт (отсчёт с нуля) + + form_class = AdminBaseImportForm + + if request.method == 'GET': + form = form_class() + else: + form = form_class(request.POST, request.FILES) + + if request.method == 'POST' and form.is_valid(): + xls_file = request.FILES['xls_file'] + xls_to_import = xls_file.read() + book = xlrd.open_workbook(file_contents=xls_to_import) + + types_sh = book.sheet_by_index(1) + sh = book.sheet_by_index(0) + + # закешировать центральные отделения в словарь. ключ название области + obl_otdelens_cache = {_obl.oblast: _obl for _obl in OblOtdelen.objects.all()} + + # закешировать населенные пункты в словарь. ключ tuple(naspunkt.obl_otdelen.pk, naspunkt.name) + naspunkts_cache = {(_naspunkt.obl_otdelen.pk, _naspunkt.name): _naspunkt + for _naspunkt in NasPunkt.objects.all().select_related()} + + # какие отделения в нас. пунктах уже добавили: уникальность по tuple(naspunkt.pk, obj) + added_otdelens = set() + + # список объектов отделений, которые нужно сохранить в базу (для bulk_create) + objects_list = [] + + # в файле есть данные для импорта? + if sh.nrows > start_nrow: + NasPunktOtdelen.objects.all().delete() # очистить таблицу нас. пунктов + + rx = 0 + for rx in xrange(start_nrow, sh.nrows): + row = sh.row(rx) + + try: + order = _getval_str(row, 0) + if not order: + continue # информацию по отделам заполняем в другом цикле + oblast = _getval_str(row, 1) + + if not oblast: + raise Exception(u'Не указана `область` в строке номер %d!' % (rx+1)) + + try: + obl_otdelen = obl_otdelens_cache[oblast] + except KeyError: + raise Exception(u'Не найдено `центральное отделение` в строке номер %d!' % (rx+1)) + + # + + naspunkt_name = _getval_str(row, 2) + + if not naspunkt_name and not ALLOW_EMPTY_NASPUNKTS: + raise Exception(u'Не указан `населенный пункт` в строке номер %d!' % (rx+1)) + + try: + naspunkt = naspunkts_cache[(obl_otdelen.pk, naspunkt_name)] + except KeyError: + if not ALLOW_EMPTY_NASPUNKTS: + raise Exception(u'Не найден `населенный пункт` в строке номер %d!' % (rx+1)) + else: + naspunkt = None + + # + + obj = _getval_str(row, 3) + + if not obj: + raise Exception(u'Не указан `объект` в строке номер %d!' % (rx+1)) + + # + + if naspunkt: + _curr_otdelen_key = (naspunkt.pk, obj) + + if _curr_otdelen_key in added_otdelens: + raise Exception(u'Повтор отделения в строке номер %d!' % (rx+1)) + + added_otdelens.add((naspunkt.pk, obj)) + + # + + otdelen = NasPunktOtdelen() + + # + otdelen.obl_otdelen = obl_otdelen + otdelen.naspunkt = naspunkt + otdelen.obj = obj + # + otdelen.addr = _getval_str(row, 4) + # + otdelen.tel_hotline = _getval_str(row, 5, multiline=True) # multiline + otdelen.tel_priemn = _getval_str(row, 6, multiline=True) # multiline + otdelen.tel_info = _getval_str(row, 7, multiline=True) # multiline + # + otdelen.ordering = order + + objects_list.append(otdelen) + + except: + if DEBUG_IMPORT: + raise + else: + import_errors.append(rx + 1) + + if objects_list: + NasPunktOtdelen.objects.bulk_create(objects_list) + + order = None + + OtdelType.objects.all().delete() + Otdel.objects.all().delete() + otdeltype_list = [] + for rx in xrange(0, types_sh.nrows): + row = types_sh.row(rx) + otdel_type = OtdelType(name=_getval_str(row, 1)) + otdeltype_list.append(otdel_type) + + OtdelType.objects.bulk_create(otdeltype_list) + otdel_types = {i.name: i.id for i in OtdelType.objects.all()} + + otdel_list = [] + last_item = None + for rx in xrange(start_nrow, sh.nrows): + row = sh.row(rx) + + try: + order = _getval_str(row, 0) + if order: + last_item = NasPunktOtdelen.objects.get(ordering=order).id + otdel = Otdel() + otdel.nas_punkt_otdelen_id = last_item + otdel.otdel_type_id = otdel_types[_getval_str(row, 8)] + otdel.phones = _getval_str(row, 9, multiline=True) + otdel.schedule = { + u'Пн': [_getval_str(row, 10), + _getval_str(row, 11)], + u'Вт': [_getval_str(row, 12), + _getval_str(row, 13)], + u'Ср': [_getval_str(row, 14), + _getval_str(row, 15)], + u'Чт': [_getval_str(row, 16), + _getval_str(row, 17)], + u'Пт': [_getval_str(row, 18), + _getval_str(row, 19)], + } + otdel.text_block = _getval_str(row, 20, multiline=True) + otdel_list.append(otdel) + except Exception as e: + pass + Otdel.objects.bulk_create(otdel_list) + + + if rx + 1 > len(import_errors): + wrong_file = False + else: + wrong_file = True + + return render(request, 'admin/pensfonds/import_naspunkt_otdelen.html', + { + 'form': form, + 'import_errors': import_errors, + 'xls': xls_file, + 'wrong_file': wrong_file, + }, + ) + + +@staff_member_required +@permission_required('can_import_export_oblotdelen', raise_exception=True) +def export_obl_otdelen(request): + """Экспорт центральных отделений.""" + buf = StringIO() + + book = xlsxwriter.Workbook(buf, {'constant_memory': True}) + sh = book.add_worksheet() + + sh.set_column('A:T', 30) + + format_caption = book.add_format() + format_caption.set_bg_color('yellow') + format_caption.set_border(1) + + sh.set_row(0, None, format_caption) + + sh.write(0, 0, u'Регион') + sh.write(0, 1, u'Регион - коротко') + sh.write(0, 2, u'По региону') + sh.write(0, 3, u'По региону коротко') + sh.write(0, 4, u'Региона') + sh.write(0, 5, u'Региона коротко') + sh.write(0, 6, u'Региональное') + sh.write(0, 7, u'Отделы и управления') + sh.write(0, 8, u'Адрес') + sh.write(0, 9, u'Горячая линия') + sh.write(0, 10, u'Приемная') + sh.write(0, 11, u'Факс') + sh.write(0, 12, u'Работа со СМИ') + sh.write(0, 13, u'Руководитель отделения') + sh.write(0, 14, u'Мин. пенсия') + sh.write(0, 15, u'Размер соцдоплаты') + + for rx, otd in enumerate(OblOtdelen.objects.all(), start=1): + sh.write(rx, 0, otd.oblast) + # + sh.write(rx, 1, otd.oblast_short) + sh.write(rx, 2, otd.po_regionu) + sh.write(rx, 3, otd.po_regionu_short) + sh.write(rx, 4, otd.regiona) + sh.write(rx, 5, otd.regiona_short) + sh.write(rx, 6, otd.regionalnoe) + # + sh.write(rx, 7, otd.otdely) + # + sh.write(rx, 8, otd.addr) # multiline + sh.write(rx, 9, _prep_str(otd.tel_hotline)) # multiline + sh.write(rx, 10, _prep_str(otd.priemnaya)) # multiline + sh.write(rx, 11, _prep_str(otd.fax)) # multiline + sh.write(rx, 12, _prep_str(otd.smi)) # multiline + # + sh.write(rx, 13, otd.head) + # + sh.write(rx, 14, otd.min_pensia) + sh.write(rx, 15, otd.doplata) + + book.close() + + content = buf.getvalue() + buf.close() + + # + filename = u'Центральные_отделения' + + response = HttpResponse(content, mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') + response['Content-Disposition'] = 'attachment; filename=%s.xlsx' % filename.encode('windows-1251') + + return response + + +@staff_member_required +@permission_required('can_import_export_naspunkts', raise_exception=True) +def export_naspunkts(request): + """Экспорт населённых пунктов.""" + buf = StringIO() + + book = xlsxwriter.Workbook(buf, {'constant_memory': True}) + sh = book.add_worksheet() + + sh.set_column('A:J', 30) + + format_caption = book.add_format() + format_caption.set_bg_color('yellow') + format_caption.set_border(1) + + sh.set_row(0, None, format_caption) + + sh.write(0, 0, u'Регион') + sh.write(0, 1, u'населенный пункт') + sh.write(0, 2, u'где') + sh.write(0, 3, u'чего') + sh.write(0, 4, u'чему') + sh.write(0, 5, u'какой') + sh.write(0, 6, u'какое') + sh.write(0, 7, u'какие') + sh.write(0, 8, u'пенсионеры') + + for rx, otd in enumerate(NasPunkt.objects.all().select_related(), start=1): + sh.write(rx, 0, otd.obl_otdelen.oblast) + # + sh.write(rx, 1, otd.name) + sh.write(rx, 2, otd.gde) + sh.write(rx, 3, otd.chego) + sh.write(rx, 4, otd.chemu) + sh.write(rx, 5, otd.kakoy) + sh.write(rx, 6, otd.kakoe) + sh.write(rx, 7, otd.kakie) + # + sh.write(rx, 8, otd.people_count) + + book.close() + + content = buf.getvalue() + buf.close() + + # + filename = u'Населенные_пункты' + + response = HttpResponse(content, mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') + response['Content-Disposition'] = 'attachment; filename=%s.xlsx' % filename.encode('windows-1251') + + return response + + +@staff_member_required +@permission_required('can_import_export_naspunktotdelen', raise_exception=True) +def export_naspunkt_otdelen(request): + """Экспорт всех отделений в нас. пунктах.""" + buf = StringIO() + + book = xlsxwriter.Workbook(buf, {'constant_memory': True}) + sh = book.add_worksheet() + + sh.set_column('A:O', 30) + + format_caption = book.add_format() + format_caption.set_bg_color('yellow') + format_caption.set_border(1) + + sh.set_row(0, None, format_caption) + + sh.write(0, 0, u'№ объекта') + sh.write(0, 1, u'Область') + sh.write(0, 2, u'Населенный пункт') + sh.write(0, 3, u'Объект') + sh.write(0, 4, u'Адрес') + sh.write(0, 5, u'телефон горячей линии') + sh.write(0, 6, u'телефон приемной') + sh.write(0, 7, u'доп. телефоны') + + sh.write(0, 8, u'Отдел') + sh.write(0, 9, u'телефоны') + sh.write(0, 10, u'Пн.') + sh.write(0, 11, u'Пн. обед') + sh.write(0, 12, u'Вт.') + sh.write(0, 13, u'Вт. обед') + sh.write(0, 14, u'Ср.') + sh.write(0, 15, u'Ср. обед') + sh.write(0, 16, u'Чт.') + sh.write(0, 17, u'Чт. обед') + sh.write(0, 18, u'Пт.') + sh.write(0, 19, u'Пт. обед') + sh.write(0, 20, u'текст в блок') + + rx = 1 + for otd in NasPunktOtdelen.objects.all().order_by('ordering').select_related(): + sh.write(rx, 0, otd.ordering) + sh.write(rx, 1, otd.obl_otdelen.oblast) + # + if otd.naspunkt: + sh.write(rx, 2, otd.naspunkt.name) + # + sh.write(rx, 3, otd.obj) + # + sh.write(rx, 4, otd.addr) + sh.write(rx, 5, _prep_str(otd.tel_hotline)) # multiline + sh.write(rx, 6, _prep_str(otd.tel_priemn)) # multiline + sh.write(rx, 7, _prep_str(otd.tel_info)) # multiline + otdels = otd.otdels.all().select_related('otdel_type').order_by() + for otdel in otdels: + sh.write(rx, 8, otdel.otdel_type.name) + sh.write(rx, 9, _prep_str(otdel.phones)) + sh.write(rx, 10, otdel.schedule[u'Пн'][0]) + sh.write(rx, 11, otdel.schedule[u'Пн'][1]) + sh.write(rx, 12, otdel.schedule[u'Вт'][0]) + sh.write(rx, 13, otdel.schedule[u'Вт'][1]) + sh.write(rx, 14, otdel.schedule[u'Ср'][0]) + sh.write(rx, 15, otdel.schedule[u'Ср'][1]) + sh.write(rx, 16, otdel.schedule[u'Чт'][0]) + sh.write(rx, 17, otdel.schedule[u'Чт'][1]) + sh.write(rx, 18, otdel.schedule[u'Пт'][0]) + sh.write(rx, 19, otdel.schedule[u'Пт'][1]) + sh.write(rx, 20, _prep_str(otdel.text_block)) + rx += 1 + + if not otdels: + rx += 1 + + # справочник отделов + types_sh = book.add_worksheet() + types_sh.set_column('B:B', 60) + for rx, otdel_type in enumerate(OtdelType.objects.all()): + types_sh.write(rx, 1, otdel_type.name) + + book.close() + + content = buf.getvalue() + buf.close() + + # + filename = u'Отделения_в_населенных_пунктах' + + response = HttpResponse(content, mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') + response['Content-Disposition'] = 'attachment; filename=%s.xlsx' % filename.encode('windows-1251') + + return response diff --git a/project/pensfonds/forms.py b/project/pensfonds/forms.py new file mode 100644 index 0000000..21ae2c7 --- /dev/null +++ b/project/pensfonds/forms.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +from django import forms + + +class AdminBaseImportForm(forms.Form): + """Форма импорта из указанного файла.""" + xls_file = forms.FileField(label=u'Файл для импорта') diff --git a/project/pensfonds/migrations/0001_initial.py b/project/pensfonds/migrations/0001_initial.py new file mode 100644 index 0000000..8ca9e6d --- /dev/null +++ b/project/pensfonds/migrations/0001_initial.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'OblOtdelen' + db.create_table(u'pensfonds_oblotdelen', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('fed_okrug', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('oblast', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('gorod', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('addr', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('rasp', self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True)), + ('upravl', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('zam_upravl', self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True)), + ('tel_priemn', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('fax', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('tel_hotline', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('tel_dover', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('tel_korrup', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('email', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'pensfonds', ['OblOtdelen']) + + # Adding model 'NasPunktOtdelen' + db.create_table(u'pensfonds_naspunktotdelen', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('fed_okrug', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('oblast', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('obj', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('addr', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('rasp', self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True)), + ('upravl', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('zam_upravl', self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True)), + ('tel_priemn', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('fax', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('tel_info', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('tel_hotline', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('tel_dover', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('tel_korrup', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('email', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'pensfonds', ['NasPunktOtdelen']) + + + def backwards(self, orm): + # Deleting model 'OblOtdelen' + db.delete_table(u'pensfonds_oblotdelen') + + # Deleting model 'NasPunktOtdelen' + db.delete_table(u'pensfonds_naspunktotdelen') + + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'gorod': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0002_auto__add_field_naspunktotdelen_obl_otdelen.py b/project/pensfonds/migrations/0002_auto__add_field_naspunktotdelen_obl_otdelen.py new file mode 100644 index 0000000..9a632db --- /dev/null +++ b/project/pensfonds/migrations/0002_auto__add_field_naspunktotdelen_obl_otdelen.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'NasPunktOtdelen.obl_otdelen' + db.add_column(u'pensfonds_naspunktotdelen', 'obl_otdelen', + self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['pensfonds.OblOtdelen']), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'NasPunktOtdelen.obl_otdelen' + db.delete_column(u'pensfonds_naspunktotdelen', 'obl_otdelen_id') + + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['pensfonds.OblOtdelen']"}), + 'oblast': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'gorod': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0003_auto__del_field_naspunktotdelen_fed_okrug__del_field_naspunktotdelen_o.py b/project/pensfonds/migrations/0003_auto__del_field_naspunktotdelen_fed_okrug__del_field_naspunktotdelen_o.py new file mode 100644 index 0000000..a0e80cc --- /dev/null +++ b/project/pensfonds/migrations/0003_auto__del_field_naspunktotdelen_fed_okrug__del_field_naspunktotdelen_o.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'NasPunktOtdelen.fed_okrug' + db.delete_column(u'pensfonds_naspunktotdelen', 'fed_okrug') + + # Deleting field 'NasPunktOtdelen.oblast' + db.delete_column(u'pensfonds_naspunktotdelen', 'oblast') + + + def backwards(self, orm): + # Adding field 'NasPunktOtdelen.fed_okrug' + db.add_column(u'pensfonds_naspunktotdelen', 'fed_okrug', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'NasPunktOtdelen.oblast' + db.add_column(u'pensfonds_naspunktotdelen', 'oblast', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['pensfonds.OblOtdelen']"}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'gorod': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0004_auto__add_field_oblotdelen_slug.py b/project/pensfonds/migrations/0004_auto__add_field_oblotdelen_slug.py new file mode 100644 index 0000000..9bda887 --- /dev/null +++ b/project/pensfonds/migrations/0004_auto__add_field_oblotdelen_slug.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'OblOtdelen.slug' + db.add_column(u'pensfonds_oblotdelen', 'slug', + self.gf('django.db.models.fields.SlugField')(default=None, max_length=50, null=True, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'OblOtdelen.slug' + db.delete_column(u'pensfonds_oblotdelen', 'slug') + + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['pensfonds.OblOtdelen']"}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'gorod': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'default': 'None', 'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0005_obl_otdelen_set_slug.py b/project/pensfonds/migrations/0005_obl_otdelen_set_slug.py new file mode 100644 index 0000000..9da7f55 --- /dev/null +++ b/project/pensfonds/migrations/0005_obl_otdelen_set_slug.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +from pytils.translit import slugify + + +class Migration(DataMigration): + + def forwards(self, orm): + "Write your forwards methods here." + # Note: Don't use "from appname.models import ModelName". + # Use orm.ModelName to refer to models in this application, + # and orm['appname.ModelName'] for models in other applications. + for otdelen in orm.OblOtdelen.objects.filter(slug__isnull=True): + slug = slugify(otdelen.oblast) + otdelen.slug = slug + + # make sure slug is unique + suffix = 2 + while orm.OblOtdelen.objects.filter(slug=otdelen.slug).exists(): + otdelen.slug = "%s-%d" % (slug, suffix) + suffix += 1 + + otdelen.save() + + def backwards(self, orm): + "Write your backwards methods here." + raise RuntimeError("Cannot reverse this migration.") + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['pensfonds.OblOtdelen']"}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'gorod': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'default': 'None', 'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] + symmetrical = True diff --git a/project/pensfonds/migrations/0006_auto__chg_field_oblotdelen_slug__add_unique_oblotdelen_slug.py b/project/pensfonds/migrations/0006_auto__chg_field_oblotdelen_slug__add_unique_oblotdelen_slug.py new file mode 100644 index 0000000..2e991dd --- /dev/null +++ b/project/pensfonds/migrations/0006_auto__chg_field_oblotdelen_slug__add_unique_oblotdelen_slug.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'OblOtdelen.slug' + db.alter_column(u'pensfonds_oblotdelen', 'slug', self.gf('django.db.models.fields.SlugField')(default=1, unique=True, max_length=50)) + # Adding unique constraint on 'OblOtdelen', fields ['slug'] + db.create_unique(u'pensfonds_oblotdelen', ['slug']) + + + def backwards(self, orm): + # Removing unique constraint on 'OblOtdelen', fields ['slug'] + db.delete_unique(u'pensfonds_oblotdelen', ['slug']) + + + # Changing field 'OblOtdelen.slug' + db.alter_column(u'pensfonds_oblotdelen', 'slug', self.gf('django.db.models.fields.SlugField')(max_length=50, null=True)) + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['pensfonds.OblOtdelen']"}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'gorod': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0007_auto__add_field_naspunktotdelen_ordering.py b/project/pensfonds/migrations/0007_auto__add_field_naspunktotdelen_ordering.py new file mode 100644 index 0000000..cfd6040 --- /dev/null +++ b/project/pensfonds/migrations/0007_auto__add_field_naspunktotdelen_ordering.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'NasPunktOtdelen.ordering' + db.add_column(u'pensfonds_naspunktotdelen', 'ordering', + self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'NasPunktOtdelen.ordering' + db.delete_column(u'pensfonds_naspunktotdelen', 'ordering') + + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'gorod': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0008_auto__add_field_oblotdelen_title__add_field_oblotdelen_pensov_num__add.py b/project/pensfonds/migrations/0008_auto__add_field_oblotdelen_title__add_field_oblotdelen_pensov_num__add.py new file mode 100644 index 0000000..a89f373 --- /dev/null +++ b/project/pensfonds/migrations/0008_auto__add_field_oblotdelen_title__add_field_oblotdelen_pensov_num__add.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'OblOtdelen.title' + db.add_column(u'pensfonds_oblotdelen', 'title', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.pensov_num' + db.add_column(u'pensfonds_oblotdelen', 'pensov_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.poluchat_num' + db.add_column(u'pensfonds_oblotdelen', 'poluchat_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.zastrah_num' + db.add_column(u'pensfonds_oblotdelen', 'zastrah_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.sofinans_num' + db.add_column(u'pensfonds_oblotdelen', 'sofinans_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.materinsk_num' + db.add_column(u'pensfonds_oblotdelen', 'materinsk_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.obj' + db.add_column(u'pensfonds_oblotdelen', 'obj', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.otdely' + db.add_column(u'pensfonds_oblotdelen', 'otdely', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'OblOtdelen.title' + db.delete_column(u'pensfonds_oblotdelen', 'title') + + # Deleting field 'OblOtdelen.pensov_num' + db.delete_column(u'pensfonds_oblotdelen', 'pensov_num') + + # Deleting field 'OblOtdelen.poluchat_num' + db.delete_column(u'pensfonds_oblotdelen', 'poluchat_num') + + # Deleting field 'OblOtdelen.zastrah_num' + db.delete_column(u'pensfonds_oblotdelen', 'zastrah_num') + + # Deleting field 'OblOtdelen.sofinans_num' + db.delete_column(u'pensfonds_oblotdelen', 'sofinans_num') + + # Deleting field 'OblOtdelen.materinsk_num' + db.delete_column(u'pensfonds_oblotdelen', 'materinsk_num') + + # Deleting field 'OblOtdelen.obj' + db.delete_column(u'pensfonds_oblotdelen', 'obj') + + # Deleting field 'OblOtdelen.otdely' + db.delete_column(u'pensfonds_oblotdelen', 'otdely') + + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'gorod': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'materinsk_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'pensov_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'poluchat_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'sofinans_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'zastrah_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0009_auto__chg_field_naspunktotdelen_tel_korrup__chg_field_naspunktotdelen_.py b/project/pensfonds/migrations/0009_auto__chg_field_naspunktotdelen_tel_korrup__chg_field_naspunktotdelen_.py new file mode 100644 index 0000000..58354d6 --- /dev/null +++ b/project/pensfonds/migrations/0009_auto__chg_field_naspunktotdelen_tel_korrup__chg_field_naspunktotdelen_.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'NasPunktOtdelen.tel_korrup' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_korrup', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + # Changing field 'NasPunktOtdelen.tel_info' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_info', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + # Changing field 'NasPunktOtdelen.tel_dover' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_dover', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + # Changing field 'NasPunktOtdelen.tel_priemn' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_priemn', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + # Changing field 'NasPunktOtdelen.tel_hotline' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_hotline', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + # Changing field 'OblOtdelen.tel_priemn' + db.alter_column(u'pensfonds_oblotdelen', 'tel_priemn', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + # Changing field 'OblOtdelen.tel_dover' + db.alter_column(u'pensfonds_oblotdelen', 'tel_dover', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + # Changing field 'OblOtdelen.tel_korrup' + db.alter_column(u'pensfonds_oblotdelen', 'tel_korrup', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + # Changing field 'OblOtdelen.tel_hotline' + db.alter_column(u'pensfonds_oblotdelen', 'tel_hotline', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + def backwards(self, orm): + + # Changing field 'NasPunktOtdelen.tel_korrup' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_korrup', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'NasPunktOtdelen.tel_info' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_info', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'NasPunktOtdelen.tel_dover' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_dover', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'NasPunktOtdelen.tel_priemn' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_priemn', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'NasPunktOtdelen.tel_hotline' + db.alter_column(u'pensfonds_naspunktotdelen', 'tel_hotline', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'OblOtdelen.tel_priemn' + db.alter_column(u'pensfonds_oblotdelen', 'tel_priemn', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'OblOtdelen.tel_dover' + db.alter_column(u'pensfonds_oblotdelen', 'tel_dover', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'OblOtdelen.tel_korrup' + db.alter_column(u'pensfonds_oblotdelen', 'tel_korrup', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'OblOtdelen.tel_hotline' + db.alter_column(u'pensfonds_oblotdelen', 'tel_hotline', self.gf('django.db.models.fields.CharField')(max_length=255)) + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'gorod': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'materinsk_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'pensov_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'poluchat_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'sofinans_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'zastrah_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0010_auto__chg_field_oblotdelen_otdely.py b/project/pensfonds/migrations/0010_auto__chg_field_oblotdelen_otdely.py new file mode 100644 index 0000000..1abd958 --- /dev/null +++ b/project/pensfonds/migrations/0010_auto__chg_field_oblotdelen_otdely.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'OblOtdelen.otdely' + db.alter_column(u'pensfonds_oblotdelen', 'otdely', self.gf('django.db.models.fields.CharField')(max_length=255)) + + def backwards(self, orm): + + # Changing field 'OblOtdelen.otdely' + db.alter_column(u'pensfonds_oblotdelen', 'otdely', self.gf('django.db.models.fields.TextField')(max_length=1000)) + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast', 'gorod']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'gorod': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'materinsk_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'pensov_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'poluchat_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'sofinans_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'zastrah_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0011_auto__del_field_oblotdelen_gorod.py b/project/pensfonds/migrations/0011_auto__del_field_oblotdelen_gorod.py new file mode 100644 index 0000000..a69f72f --- /dev/null +++ b/project/pensfonds/migrations/0011_auto__del_field_oblotdelen_gorod.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'OblOtdelen.gorod' + db.delete_column(u'pensfonds_oblotdelen', 'gorod') + + + def backwards(self, orm): + + # User chose to not deal with backwards NULL issues for 'OblOtdelen.gorod' + raise RuntimeError("Cannot reverse this migration. 'OblOtdelen.gorod' and its values cannot be restored.") + + # The following code is provided here to aid in writing a correct migration # Adding field 'OblOtdelen.gorod' + db.add_column(u'pensfonds_oblotdelen', 'gorod', + self.gf('django.db.models.fields.CharField')(max_length=255), + keep_default=False) + + + models = { + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'materinsk_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'pensov_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'poluchat_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'sofinans_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'zastrah_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0012_auto__add_naspunkt.py b/project/pensfonds/migrations/0012_auto__add_naspunkt.py new file mode 100644 index 0000000..b36381f --- /dev/null +++ b/project/pensfonds/migrations/0012_auto__add_naspunkt.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'NasPunkt' + db.create_table(u'pensfonds_naspunkt', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('obl_otdelen', self.gf('django.db.models.fields.related.ForeignKey')(related_name='naspunkts', to=orm['pensfonds.OblOtdelen'])), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('slug', self.gf('django.db.models.fields.SlugField')(max_length=50)), + ('short_description', self.gf('django.db.models.fields.CharField')(default='', max_length=255)), + ('title', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True)), + ('trud_num', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('starost_num', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('invalid_num', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('poterya_num', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('social_num', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('uhod_num', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'pensfonds', ['NasPunkt']) + + + def backwards(self, orm): + # Deleting model 'NasPunkt' + db.delete_table(u'pensfonds_naspunkt') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'object_name': 'NasPunkt'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'invalid_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'poterya_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'short_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'social_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'starost_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'trud_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'uhod_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'materinsk_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'pensov_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'poluchat_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'sofinans_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'zastrah_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0013_auto__add_field_naspunktotdelen_naspunkt.py b/project/pensfonds/migrations/0013_auto__add_field_naspunktotdelen_naspunkt.py new file mode 100644 index 0000000..8ee373f --- /dev/null +++ b/project/pensfonds/migrations/0013_auto__add_field_naspunktotdelen_naspunkt.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'NasPunktOtdelen.naspunkt' + db.add_column(u'pensfonds_naspunktotdelen', 'naspunkt', + self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='naspunkt_otdelens', null=True, blank=True, to=orm['pensfonds.NasPunkt']), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'NasPunktOtdelen.naspunkt' + db.delete_column(u'pensfonds_naspunktotdelen', 'naspunkt_id') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'object_name': 'NasPunkt'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'invalid_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'poterya_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'short_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'social_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'starost_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'trud_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'uhod_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'materinsk_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'pensov_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'poluchat_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'sofinans_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'zastrah_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0014_auto__add_unique_naspunkt_obl_otdelen_name__add_index_naspunkt_obl_otd.py b/project/pensfonds/migrations/0014_auto__add_unique_naspunkt_obl_otdelen_name__add_index_naspunkt_obl_otd.py new file mode 100644 index 0000000..243cc01 --- /dev/null +++ b/project/pensfonds/migrations/0014_auto__add_unique_naspunkt_obl_otdelen_name__add_index_naspunkt_obl_otd.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding unique constraint on 'NasPunkt', fields ['obl_otdelen', 'name'] + db.create_unique(u'pensfonds_naspunkt', ['obl_otdelen_id', 'name']) + + # Adding index on 'NasPunkt', fields ['obl_otdelen', 'name'] + db.create_index(u'pensfonds_naspunkt', ['obl_otdelen_id', 'name']) + + + def backwards(self, orm): + # Removing index on 'NasPunkt', fields ['obl_otdelen', 'name'] + db.delete_index(u'pensfonds_naspunkt', ['obl_otdelen_id', 'name']) + + # Removing unique constraint on 'NasPunkt', fields ['obl_otdelen', 'name'] + db.delete_unique(u'pensfonds_naspunkt', ['obl_otdelen_id', 'name']) + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'invalid_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'poterya_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'short_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'social_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'starost_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'trud_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'uhod_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'materinsk_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'pensov_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'poluchat_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'sofinans_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'zastrah_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0015_auto__del_field_naspunkt_starost_num__del_field_naspunkt_uhod_num__del.py b/project/pensfonds/migrations/0015_auto__del_field_naspunkt_starost_num__del_field_naspunkt_uhod_num__del.py new file mode 100644 index 0000000..0be232a --- /dev/null +++ b/project/pensfonds/migrations/0015_auto__del_field_naspunkt_starost_num__del_field_naspunkt_uhod_num__del.py @@ -0,0 +1,133 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'NasPunkt.starost_num' + db.delete_column(u'pensfonds_naspunkt', 'starost_num') + + # Deleting field 'NasPunkt.uhod_num' + db.delete_column(u'pensfonds_naspunkt', 'uhod_num') + + # Deleting field 'NasPunkt.social_num' + db.delete_column(u'pensfonds_naspunkt', 'social_num') + + # Deleting field 'NasPunkt.poterya_num' + db.delete_column(u'pensfonds_naspunkt', 'poterya_num') + + # Deleting field 'NasPunkt.trud_num' + db.delete_column(u'pensfonds_naspunkt', 'trud_num') + + # Deleting field 'NasPunkt.invalid_num' + db.delete_column(u'pensfonds_naspunkt', 'invalid_num') + + # Adding field 'NasPunkt.people_count' + db.add_column(u'pensfonds_naspunkt', 'people_count', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Adding field 'NasPunkt.starost_num' + db.add_column(u'pensfonds_naspunkt', 'starost_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'NasPunkt.uhod_num' + db.add_column(u'pensfonds_naspunkt', 'uhod_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'NasPunkt.social_num' + db.add_column(u'pensfonds_naspunkt', 'social_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'NasPunkt.poterya_num' + db.add_column(u'pensfonds_naspunkt', 'poterya_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'NasPunkt.trud_num' + db.add_column(u'pensfonds_naspunkt', 'trud_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'NasPunkt.invalid_num' + db.add_column(u'pensfonds_naspunkt', 'invalid_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Deleting field 'NasPunkt.people_count' + db.delete_column(u'pensfonds_naspunkt', 'people_count') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'short_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['fed_okrug', 'oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fed_okrug': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'materinsk_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'obj': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'oblast': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'pensov_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'poluchat_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'sofinans_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'zastrah_num': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0016_auto__del_field_oblotdelen_materinsk_num__del_field_oblotdelen_rasp__d.py b/project/pensfonds/migrations/0016_auto__del_field_oblotdelen_materinsk_num__del_field_oblotdelen_rasp__d.py new file mode 100644 index 0000000..083cd17 --- /dev/null +++ b/project/pensfonds/migrations/0016_auto__del_field_oblotdelen_materinsk_num__del_field_oblotdelen_rasp__d.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'OblOtdelen.materinsk_num' + db.delete_column(u'pensfonds_oblotdelen', 'materinsk_num') + + # Deleting field 'OblOtdelen.rasp' + db.delete_column(u'pensfonds_oblotdelen', 'rasp') + + # Deleting field 'OblOtdelen.tel_priemn' + db.delete_column(u'pensfonds_oblotdelen', 'tel_priemn') + + # Deleting field 'OblOtdelen.email' + db.delete_column(u'pensfonds_oblotdelen', 'email') + + # Deleting field 'OblOtdelen.upravl' + db.delete_column(u'pensfonds_oblotdelen', 'upravl') + + # Deleting field 'OblOtdelen.pensov_num' + db.delete_column(u'pensfonds_oblotdelen', 'pensov_num') + + # Deleting field 'OblOtdelen.fed_okrug' + db.delete_column(u'pensfonds_oblotdelen', 'fed_okrug') + + # Deleting field 'OblOtdelen.tel_dover' + db.delete_column(u'pensfonds_oblotdelen', 'tel_dover') + + # Deleting field 'OblOtdelen.sofinans_num' + db.delete_column(u'pensfonds_oblotdelen', 'sofinans_num') + + # Deleting field 'OblOtdelen.zastrah_num' + db.delete_column(u'pensfonds_oblotdelen', 'zastrah_num') + + # Deleting field 'OblOtdelen.tel_korrup' + db.delete_column(u'pensfonds_oblotdelen', 'tel_korrup') + + # Deleting field 'OblOtdelen.zam_upravl' + db.delete_column(u'pensfonds_oblotdelen', 'zam_upravl') + + # Deleting field 'OblOtdelen.poluchat_num' + db.delete_column(u'pensfonds_oblotdelen', 'poluchat_num') + + # Adding field 'OblOtdelen.oblast_short' + db.add_column(u'pensfonds_oblotdelen', 'oblast_short', + self.gf('django.db.models.fields.TextField')(default='', max_length=255), + keep_default=False) + + # Adding field 'OblOtdelen.smi' + db.add_column(u'pensfonds_oblotdelen', 'smi', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + + # Changing field 'OblOtdelen.otdely' + db.alter_column(u'pensfonds_oblotdelen', 'otdely', self.gf('django.db.models.fields.TextField')(max_length=255)) + + # Changing field 'OblOtdelen.obj' + db.alter_column(u'pensfonds_oblotdelen', 'obj', self.gf('django.db.models.fields.TextField')(max_length=255)) + + # Changing field 'OblOtdelen.addr' + db.alter_column(u'pensfonds_oblotdelen', 'addr', self.gf('django.db.models.fields.TextField')(max_length=255)) + + # Changing field 'OblOtdelen.oblast' + db.alter_column(u'pensfonds_oblotdelen', 'oblast', self.gf('django.db.models.fields.TextField')(max_length=255)) + + def backwards(self, orm): + # Adding field 'OblOtdelen.materinsk_num' + db.add_column(u'pensfonds_oblotdelen', 'materinsk_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.rasp' + db.add_column(u'pensfonds_oblotdelen', 'rasp', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.tel_priemn' + db.add_column(u'pensfonds_oblotdelen', 'tel_priemn', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.email' + db.add_column(u'pensfonds_oblotdelen', 'email', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.upravl' + db.add_column(u'pensfonds_oblotdelen', 'upravl', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.pensov_num' + db.add_column(u'pensfonds_oblotdelen', 'pensov_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + + # User chose to not deal with backwards NULL issues for 'OblOtdelen.fed_okrug' + raise RuntimeError("Cannot reverse this migration. 'OblOtdelen.fed_okrug' and its values cannot be restored.") + + # The following code is provided here to aid in writing a correct migration # Adding field 'OblOtdelen.fed_okrug' + db.add_column(u'pensfonds_oblotdelen', 'fed_okrug', + self.gf('django.db.models.fields.CharField')(max_length=255), + keep_default=False) + + # Adding field 'OblOtdelen.tel_dover' + db.add_column(u'pensfonds_oblotdelen', 'tel_dover', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.sofinans_num' + db.add_column(u'pensfonds_oblotdelen', 'sofinans_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.zastrah_num' + db.add_column(u'pensfonds_oblotdelen', 'zastrah_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.tel_korrup' + db.add_column(u'pensfonds_oblotdelen', 'tel_korrup', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.zam_upravl' + db.add_column(u'pensfonds_oblotdelen', 'zam_upravl', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.poluchat_num' + db.add_column(u'pensfonds_oblotdelen', 'poluchat_num', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True), + keep_default=False) + + # Deleting field 'OblOtdelen.oblast_short' + db.delete_column(u'pensfonds_oblotdelen', 'oblast_short') + + # Deleting field 'OblOtdelen.smi' + db.delete_column(u'pensfonds_oblotdelen', 'smi') + + + # Changing field 'OblOtdelen.otdely' + db.alter_column(u'pensfonds_oblotdelen', 'otdely', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'OblOtdelen.obj' + db.alter_column(u'pensfonds_oblotdelen', 'obj', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'OblOtdelen.addr' + db.alter_column(u'pensfonds_oblotdelen', 'addr', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Changing field 'OblOtdelen.oblast' + db.alter_column(u'pensfonds_oblotdelen', 'oblast', self.gf('django.db.models.fields.CharField')(max_length=255)) + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'short_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'obj': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0017_auto__add_field_oblotdelen_priemnaya__add_field_oblotdelen_head__add_f.py b/project/pensfonds/migrations/0017_auto__add_field_oblotdelen_priemnaya__add_field_oblotdelen_head__add_f.py new file mode 100644 index 0000000..1987253 --- /dev/null +++ b/project/pensfonds/migrations/0017_auto__add_field_oblotdelen_priemnaya__add_field_oblotdelen_head__add_f.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'OblOtdelen.priemnaya' + db.add_column(u'pensfonds_oblotdelen', 'priemnaya', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.head' + db.add_column(u'pensfonds_oblotdelen', 'head', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'OblOtdelen.min_pensia' + db.add_column(u'pensfonds_oblotdelen', 'min_pensia', + self.gf('django.db.models.fields.FloatField')(null=True), + keep_default=False) + + # Adding field 'OblOtdelen.doplata' + db.add_column(u'pensfonds_oblotdelen', 'doplata', + self.gf('django.db.models.fields.FloatField')(null=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'OblOtdelen.priemnaya' + db.delete_column(u'pensfonds_oblotdelen', 'priemnaya') + + # Deleting field 'OblOtdelen.head' + db.delete_column(u'pensfonds_oblotdelen', 'head') + + # Deleting field 'OblOtdelen.min_pensia' + db.delete_column(u'pensfonds_oblotdelen', 'min_pensia') + + # Deleting field 'OblOtdelen.doplata' + db.delete_column(u'pensfonds_oblotdelen', 'doplata') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'short_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'rasp': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_dover': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_korrup': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'obj': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0018_auto__add_otdel__del_field_naspunktotdelen_tel_korrup__del_field_naspu.py b/project/pensfonds/migrations/0018_auto__add_otdel__del_field_naspunktotdelen_tel_korrup__del_field_naspu.py new file mode 100644 index 0000000..31834cc --- /dev/null +++ b/project/pensfonds/migrations/0018_auto__add_otdel__del_field_naspunktotdelen_tel_korrup__del_field_naspu.py @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Otdel' + db.create_table(u'pensfonds_otdel', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('nas_punkt_otdelen', self.gf('django.db.models.fields.related.ForeignKey')(related_name='otdels', to=orm['pensfonds.NasPunktOtdelen'])), + ('phones', self.gf('django.db.models.fields.TextField')()), + ('text_block', self.gf('django.db.models.fields.TextField')()), + )) + db.send_create_signal(u'pensfonds', ['Otdel']) + + # Deleting field 'NasPunktOtdelen.tel_korrup' + db.delete_column(u'pensfonds_naspunktotdelen', 'tel_korrup') + + # Deleting field 'NasPunktOtdelen.fax' + db.delete_column(u'pensfonds_naspunktotdelen', 'fax') + + # Deleting field 'NasPunktOtdelen.tel_dover' + db.delete_column(u'pensfonds_naspunktotdelen', 'tel_dover') + + # Deleting field 'NasPunktOtdelen.rasp' + db.delete_column(u'pensfonds_naspunktotdelen', 'rasp') + + # Deleting field 'NasPunktOtdelen.email' + db.delete_column(u'pensfonds_naspunktotdelen', 'email') + + + def backwards(self, orm): + # Deleting model 'Otdel' + db.delete_table(u'pensfonds_otdel') + + # Adding field 'NasPunktOtdelen.tel_korrup' + db.add_column(u'pensfonds_naspunktotdelen', 'tel_korrup', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'NasPunktOtdelen.fax' + db.add_column(u'pensfonds_naspunktotdelen', 'fax', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'NasPunktOtdelen.tel_dover' + db.add_column(u'pensfonds_naspunktotdelen', 'tel_dover', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'NasPunktOtdelen.rasp' + db.add_column(u'pensfonds_naspunktotdelen', 'rasp', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Adding field 'NasPunktOtdelen.email' + db.add_column(u'pensfonds_naspunktotdelen', 'email', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'short_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'obj': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.otdel': { + 'Meta': {'object_name': 'Otdel'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nas_punkt_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.NasPunktOtdelen']"}), + 'phones': ('django.db.models.fields.TextField', [], {}), + 'text_block': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0019_auto__add_field_otdel_schedule.py b/project/pensfonds/migrations/0019_auto__add_field_otdel_schedule.py new file mode 100644 index 0000000..ec092e8 --- /dev/null +++ b/project/pensfonds/migrations/0019_auto__add_field_otdel_schedule.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'Otdel.schedule' + db.add_column(u'pensfonds_otdel', 'schedule', + self.gf('jsonfield.fields.JSONField')(default=''), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'Otdel.schedule' + db.delete_column(u'pensfonds_otdel', 'schedule') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'short_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'upravl': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'zam_upravl': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'obj': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.otdel': { + 'Meta': {'object_name': 'Otdel'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nas_punkt_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.NasPunktOtdelen']"}), + 'phones': ('django.db.models.fields.TextField', [], {}), + 'schedule': ('jsonfield.fields.JSONField', [], {}), + 'text_block': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0020_auto__add_otdeltype__del_field_naspunktotdelen_upravl__del_field_naspu.py b/project/pensfonds/migrations/0020_auto__add_otdeltype__del_field_naspunktotdelen_upravl__del_field_naspu.py new file mode 100644 index 0000000..77efa15 --- /dev/null +++ b/project/pensfonds/migrations/0020_auto__add_otdeltype__del_field_naspunktotdelen_upravl__del_field_naspu.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'OtdelType' + db.create_table(u'pensfonds_otdeltype', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.TextField')()), + )) + db.send_create_signal(u'pensfonds', ['OtdelType']) + + # Deleting field 'NasPunktOtdelen.upravl' + db.delete_column(u'pensfonds_naspunktotdelen', 'upravl') + + # Deleting field 'NasPunktOtdelen.zam_upravl' + db.delete_column(u'pensfonds_naspunktotdelen', 'zam_upravl') + + # Adding field 'Otdel.otdel_type' + db.add_column(u'pensfonds_otdel', 'otdel_type', + self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='otdels', to=orm['pensfonds.OtdelType']), + keep_default=False) + + + def backwards(self, orm): + # Deleting model 'OtdelType' + db.delete_table(u'pensfonds_otdeltype') + + # Adding field 'NasPunktOtdelen.upravl' + db.add_column(u'pensfonds_naspunktotdelen', 'upravl', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'NasPunktOtdelen.zam_upravl' + db.add_column(u'pensfonds_naspunktotdelen', 'zam_upravl', + self.gf('django.db.models.fields.TextField')(default='', max_length=1000, blank=True), + keep_default=False) + + # Deleting field 'Otdel.otdel_type' + db.delete_column(u'pensfonds_otdel', 'otdel_type_id') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'short_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'obj': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.otdel': { + 'Meta': {'object_name': 'Otdel'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nas_punkt_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.NasPunktOtdelen']"}), + 'otdel_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.OtdelType']"}), + 'phones': ('django.db.models.fields.TextField', [], {}), + 'schedule': ('jsonfield.fields.JSONField', [], {}), + 'text_block': ('django.db.models.fields.TextField', [], {}) + }, + u'pensfonds.otdeltype': { + 'Meta': {'object_name': 'OtdelType'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0021_auto__del_field_naspunkt_short_description__add_field_naspunkt_chego__.py b/project/pensfonds/migrations/0021_auto__del_field_naspunkt_short_description__add_field_naspunkt_chego__.py new file mode 100644 index 0000000..42f4edf --- /dev/null +++ b/project/pensfonds/migrations/0021_auto__del_field_naspunkt_short_description__add_field_naspunkt_chego__.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'NasPunkt.short_description' + db.delete_column(u'pensfonds_naspunkt', 'short_description') + + # Adding field 'NasPunkt.chego' + db.add_column(u'pensfonds_naspunkt', 'chego', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'NasPunkt.chemu' + db.add_column(u'pensfonds_naspunkt', 'chemu', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'NasPunkt.kakoy' + db.add_column(u'pensfonds_naspunkt', 'kakoy', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'NasPunkt.kakoe' + db.add_column(u'pensfonds_naspunkt', 'kakoe', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Adding field 'NasPunkt.kakie' + db.add_column(u'pensfonds_naspunkt', 'kakie', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Adding field 'NasPunkt.short_description' + db.add_column(u'pensfonds_naspunkt', 'short_description', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Deleting field 'NasPunkt.chego' + db.delete_column(u'pensfonds_naspunkt', 'chego') + + # Deleting field 'NasPunkt.chemu' + db.delete_column(u'pensfonds_naspunkt', 'chemu') + + # Deleting field 'NasPunkt.kakoy' + db.delete_column(u'pensfonds_naspunkt', 'kakoy') + + # Deleting field 'NasPunkt.kakoe' + db.delete_column(u'pensfonds_naspunkt', 'kakoe') + + # Deleting field 'NasPunkt.kakie' + db.delete_column(u'pensfonds_naspunkt', 'kakie') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'chego': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'chemu': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kakie': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoe': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoy': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'obj': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.otdel': { + 'Meta': {'object_name': 'Otdel'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nas_punkt_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.NasPunktOtdelen']"}), + 'otdel_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.OtdelType']"}), + 'phones': ('django.db.models.fields.TextField', [], {}), + 'schedule': ('jsonfield.fields.JSONField', [], {}), + 'text_block': ('django.db.models.fields.TextField', [], {}) + }, + u'pensfonds.otdeltype': { + 'Meta': {'object_name': 'OtdelType'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0022_auto__del_field_naspunkt_title__add_field_naspunkt_gde.py b/project/pensfonds/migrations/0022_auto__del_field_naspunkt_title__add_field_naspunkt_gde.py new file mode 100644 index 0000000..7b5093d --- /dev/null +++ b/project/pensfonds/migrations/0022_auto__del_field_naspunkt_title__add_field_naspunkt_gde.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'NasPunkt.title' + db.delete_column(u'pensfonds_naspunkt', 'title') + + # Adding field 'NasPunkt.gde' + db.add_column(u'pensfonds_naspunkt', 'gde', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Adding field 'NasPunkt.title' + db.add_column(u'pensfonds_naspunkt', 'title', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + # Deleting field 'NasPunkt.gde' + db.delete_column(u'pensfonds_naspunkt', 'gde') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'chego': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'chemu': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'gde': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kakie': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoe': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoy': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'obj': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.otdel': { + 'Meta': {'object_name': 'Otdel'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nas_punkt_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.NasPunktOtdelen']"}), + 'otdel_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.OtdelType']"}), + 'phones': ('django.db.models.fields.TextField', [], {}), + 'schedule': ('jsonfield.fields.JSONField', [], {}), + 'text_block': ('django.db.models.fields.TextField', [], {}) + }, + u'pensfonds.otdeltype': { + 'Meta': {'object_name': 'OtdelType'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0023_auto__add_field_oblotdelen_po_regionu__add_field_oblotdelen_po_regionu.py b/project/pensfonds/migrations/0023_auto__add_field_oblotdelen_po_regionu__add_field_oblotdelen_po_regionu.py new file mode 100644 index 0000000..fcbf172 --- /dev/null +++ b/project/pensfonds/migrations/0023_auto__add_field_oblotdelen_po_regionu__add_field_oblotdelen_po_regionu.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'OblOtdelen.po_regionu' + db.add_column(u'pensfonds_oblotdelen', 'po_regionu', + self.gf('django.db.models.fields.TextField')(default='', max_length=255), + keep_default=False) + + # Adding field 'OblOtdelen.po_regionu_short' + db.add_column(u'pensfonds_oblotdelen', 'po_regionu_short', + self.gf('django.db.models.fields.TextField')(default='', max_length=255), + keep_default=False) + + # Adding field 'OblOtdelen.regiona' + db.add_column(u'pensfonds_oblotdelen', 'regiona', + self.gf('django.db.models.fields.TextField')(default='', max_length=255), + keep_default=False) + + # Adding field 'OblOtdelen.regiona_korotko' + db.add_column(u'pensfonds_oblotdelen', 'regiona_korotko', + self.gf('django.db.models.fields.TextField')(default='', max_length=255), + keep_default=False) + + # Adding field 'OblOtdelen.regionalnoe' + db.add_column(u'pensfonds_oblotdelen', 'regionalnoe', + self.gf('django.db.models.fields.TextField')(default='', max_length=255), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'OblOtdelen.po_regionu' + db.delete_column(u'pensfonds_oblotdelen', 'po_regionu') + + # Deleting field 'OblOtdelen.po_regionu_short' + db.delete_column(u'pensfonds_oblotdelen', 'po_regionu_short') + + # Deleting field 'OblOtdelen.regiona' + db.delete_column(u'pensfonds_oblotdelen', 'regiona') + + # Deleting field 'OblOtdelen.regiona_korotko' + db.delete_column(u'pensfonds_oblotdelen', 'regiona_korotko') + + # Deleting field 'OblOtdelen.regionalnoe' + db.delete_column(u'pensfonds_oblotdelen', 'regionalnoe') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'chego': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'chemu': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'gde': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kakie': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoe': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoy': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'obj': ('django.db.models.fields.TextField', [], {'max_length': '255'}), + 'oblast': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'po_regionu': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'po_regionu_short': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'regiona': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'regiona_korotko': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'regionalnoe': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.otdel': { + 'Meta': {'object_name': 'Otdel'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nas_punkt_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.NasPunktOtdelen']"}), + 'otdel_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.OtdelType']"}), + 'phones': ('django.db.models.fields.TextField', [], {}), + 'schedule': ('jsonfield.fields.JSONField', [], {}), + 'text_block': ('django.db.models.fields.TextField', [], {}) + }, + u'pensfonds.otdeltype': { + 'Meta': {'object_name': 'OtdelType'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0024_auto__del_field_oblotdelen_obj.py b/project/pensfonds/migrations/0024_auto__del_field_oblotdelen_obj.py new file mode 100644 index 0000000..dee43d2 --- /dev/null +++ b/project/pensfonds/migrations/0024_auto__del_field_oblotdelen_obj.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'OblOtdelen.obj' + db.delete_column(u'pensfonds_oblotdelen', 'obj') + + + def backwards(self, orm): + + # User chose to not deal with backwards NULL issues for 'OblOtdelen.obj' + raise RuntimeError("Cannot reverse this migration. 'OblOtdelen.obj' and its values cannot be restored.") + + # The following code is provided here to aid in writing a correct migration # Adding field 'OblOtdelen.obj' + db.add_column(u'pensfonds_oblotdelen', 'obj', + self.gf('django.db.models.fields.TextField')(max_length=255), + keep_default=False) + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'chego': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'chemu': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'gde': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kakie': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoe': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoy': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'oblast': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'po_regionu': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'po_regionu_short': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'regiona': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'regiona_korotko': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'regionalnoe': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.otdel': { + 'Meta': {'object_name': 'Otdel'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nas_punkt_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.NasPunktOtdelen']"}), + 'otdel_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.OtdelType']"}), + 'phones': ('django.db.models.fields.TextField', [], {}), + 'schedule': ('jsonfield.fields.JSONField', [], {}), + 'text_block': ('django.db.models.fields.TextField', [], {}) + }, + u'pensfonds.otdeltype': { + 'Meta': {'object_name': 'OtdelType'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0025_auto__del_field_oblotdelen_title.py b/project/pensfonds/migrations/0025_auto__del_field_oblotdelen_title.py new file mode 100644 index 0000000..e2bf89b --- /dev/null +++ b/project/pensfonds/migrations/0025_auto__del_field_oblotdelen_title.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'OblOtdelen.title' + db.delete_column(u'pensfonds_oblotdelen', 'title') + + + def backwards(self, orm): + # Adding field 'OblOtdelen.title' + db.add_column(u'pensfonds_oblotdelen', 'title', + self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), + keep_default=False) + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'chego': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'chemu': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'gde': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kakie': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoe': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoy': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'oblast': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'po_regionu': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'po_regionu_short': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'regiona': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'regiona_korotko': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'regionalnoe': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.otdel': { + 'Meta': {'object_name': 'Otdel'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nas_punkt_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.NasPunktOtdelen']"}), + 'otdel_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.OtdelType']"}), + 'phones': ('django.db.models.fields.TextField', [], {}), + 'schedule': ('jsonfield.fields.JSONField', [], {}), + 'text_block': ('django.db.models.fields.TextField', [], {}) + }, + u'pensfonds.otdeltype': { + 'Meta': {'object_name': 'OtdelType'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/0026_auto__del_field_oblotdelen_regiona_korotko__add_field_oblotdelen_regio.py b/project/pensfonds/migrations/0026_auto__del_field_oblotdelen_regiona_korotko__add_field_oblotdelen_regio.py new file mode 100644 index 0000000..1a7ca03 --- /dev/null +++ b/project/pensfonds/migrations/0026_auto__del_field_oblotdelen_regiona_korotko__add_field_oblotdelen_regio.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'OblOtdelen.regiona_korotko' + db.delete_column(u'pensfonds_oblotdelen', 'regiona_korotko') + + # Adding field 'OblOtdelen.regiona_short' + db.add_column(u'pensfonds_oblotdelen', 'regiona_short', + self.gf('django.db.models.fields.TextField')(default='', max_length=255), + keep_default=False) + + + def backwards(self, orm): + # Adding field 'OblOtdelen.regiona_korotko' + db.add_column(u'pensfonds_oblotdelen', 'regiona_korotko', + self.gf('django.db.models.fields.TextField')(default='', max_length=255), + keep_default=False) + + # Deleting field 'OblOtdelen.regiona_short' + db.delete_column(u'pensfonds_oblotdelen', 'regiona_short') + + + models = { + u'pensfonds.naspunkt': { + 'Meta': {'ordering': "['obl_otdelen', 'name']", 'unique_together': "(['obl_otdelen', 'name'],)", 'object_name': 'NasPunkt', 'index_together': "[['obl_otdelen', 'name']]"}, + 'chego': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'chemu': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'gde': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kakie': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoe': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'kakoy': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'naspunkts'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'people_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.naspunktotdelen': { + 'Meta': {'ordering': "['obl_otdelen', 'naspunkt', 'ordering', 'obj']", 'object_name': 'NasPunktOtdelen'}, + 'addr': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'naspunkt': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'naspunkt_otdelens'", 'null': 'True', 'blank': 'True', 'to': u"orm['pensfonds.NasPunkt']"}), + 'obj': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'obl_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'obl_naspunkt_otdelens'", 'to': u"orm['pensfonds.OblOtdelen']"}), + 'ordering': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_info': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_priemn': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.oblotdelen': { + 'Meta': {'ordering': "['oblast']", 'object_name': 'OblOtdelen'}, + 'addr': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'doplata': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'head': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'min_pensia': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'oblast': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'oblast_short': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'otdely': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'po_regionu': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'po_regionu_short': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'priemnaya': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'regiona': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'regiona_short': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'regionalnoe': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '255'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'smi': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'tel_hotline': ('django.db.models.fields.TextField', [], {'default': "''", 'max_length': '1000', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'pensfonds.otdel': { + 'Meta': {'object_name': 'Otdel'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nas_punkt_otdelen': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.NasPunktOtdelen']"}), + 'otdel_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'otdels'", 'to': u"orm['pensfonds.OtdelType']"}), + 'phones': ('django.db.models.fields.TextField', [], {}), + 'schedule': ('jsonfield.fields.JSONField', [], {}), + 'text_block': ('django.db.models.fields.TextField', [], {}) + }, + u'pensfonds.otdeltype': { + 'Meta': {'object_name': 'OtdelType'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['pensfonds'] \ No newline at end of file diff --git a/project/pensfonds/migrations/__init__.py b/project/pensfonds/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/pensfonds/models.py b/project/pensfonds/models.py new file mode 100644 index 0000000..d486c94 --- /dev/null +++ b/project/pensfonds/models.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +import collections + +from django.db import models +from django.db.models import Sum + +from jsonfield import JSONField + + +class OblOtdelen(models.Model): + """Центральное отделение.""" + oblast = models.TextField(u'регион', max_length=255, default='') + oblast_short = models.TextField(u'регион - коротко', max_length=255, default='') + po_regionu = models.TextField(u'по региону', max_length=255, default='') + po_regionu_short = models.TextField(u'по региону - коротко', max_length=255, default='') + regiona = models.TextField(u'региона', max_length=255, default='') + regiona_short = models.TextField(u'региона коротко', max_length=255, default='') + regionalnoe = models.TextField(u'региональное', max_length=255, default='') + otdely = models.TextField(u'отделы и управления', max_length=255, blank=True, default='') + addr = models.TextField(u'адрес', max_length=255, blank=True, default='') + tel_hotline = models.TextField(u'телефон горячей линии', max_length=1000, blank=True, default='') + priemnaya = models.TextField(u'приемная', max_length=1000, blank=True, default='') + fax = models.CharField(u'факс', max_length=255, blank=True, default='') + smi = models.TextField(u'работа со СМИ', max_length=1000, blank=True, default='') + head = models.TextField(u'руководитель отделения', max_length=1000, blank=True, default='') + min_pensia = models.FloatField(u'мин.пенсия', null=True) + doplata = models.FloatField(u'соц.доплата', null=True) + + slug = models.SlugField(unique=True, help_text=u'Уникальная часть названия, используемая в URL.') + created_at = models.DateTimeField(u'создан', auto_now_add=True) + updated_at = models.DateTimeField(u'изменен', auto_now=True) + + class Meta: + verbose_name = u'центральное отделение' + verbose_name_plural = u'центральные отделения' + ordering = ['oblast'] + permissions = [['can_import_export_oblotdelen', u'Импорт/экспорт']] + + def __unicode__(self): + result = (u'%s' % (self.oblast)).strip() + if len(result) > 2: + return result + return u'нет данных (id=%d)' % self.pk + + def save(self, *args, **kwargs): + super(OblOtdelen, self).save(*args, **kwargs) + + +class NasPunkt(models.Model): + """Населённый пункт.""" + obl_otdelen = models.ForeignKey(OblOtdelen, verbose_name=u'регион', related_name='naspunkts') + + name = models.CharField(u'нас. пункт', max_length=255) + + slug = models.SlugField(unique=False) + + # short_description = models.CharField(u'подпись к нас. пункту', max_length=255, blank=True, default='') + gde = models.CharField(u'где', max_length=255, blank=True, default='') + chego = models.CharField(u'чего', max_length=255, blank=True, default='') + chemu = models.CharField(u'чему', max_length=255, blank=True, default='') + kakoy = models.CharField(u'какой', max_length=255, blank=True, default='') + kakoe = models.CharField(u'какое', max_length=255, blank=True, default='') + kakie = models.CharField(u'какие', max_length=255, blank=True, default='') + + people_count = models.PositiveIntegerField(u'пенсионеры', blank=True, default=0) + + created_at = models.DateTimeField(u'создан', auto_now_add=True) + updated_at = models.DateTimeField(u'изменен', auto_now=True) + + class Meta: + verbose_name = u'населенный пункт' + verbose_name_plural = u'населенные пункты' + ordering = ['obl_otdelen', 'name'] + permissions = [['can_import_export_naspunkts', u'Импорт/экспорт']] + unique_together = ['obl_otdelen', 'name'] + index_together = [['obl_otdelen', 'name']] + + def __unicode__(self): + return (u'%s (%s)' % (self.name, self.obl_otdelen.oblast)).strip() + if len(result) > 2: + return result + return u'нет данных (id=%d)' % self.pk + + +class NasPunktOtdelen(models.Model): + """Отделение в нас. пункте.""" + obl_otdelen = models.ForeignKey(OblOtdelen, verbose_name=u'центральное отделение', related_name='obl_naspunkt_otdelens') + + naspunkt = models.ForeignKey(NasPunkt, verbose_name=u'населенный пункт', related_name='naspunkt_otdelens', + blank=True, null=True, default=None) + + obj = models.CharField(u'объект', max_length=255) + + addr = models.CharField(u'адрес', max_length=255, blank=True, default='') + + tel_hotline = models.TextField(u'телефон горячей линии', max_length=1000, blank=True, default='') + tel_priemn = models.TextField(u'телефон приемной', max_length=1000, blank=True, default='') + tel_info = models.TextField(u'другие телефоны', max_length=1000, blank=True, default='') + + ordering = models.IntegerField(u'сортировка', null=True, blank=True, db_index=True, + help_text=u'Изменяет порядок сортировки.') + + created_at = models.DateTimeField(u'создан', auto_now_add=True) + updated_at = models.DateTimeField(u'изменен', auto_now=True) + + class Meta: + verbose_name = u'отделение в нас. пункте' + verbose_name_plural = u'отделения в нас. пунктах' + ordering = ['obl_otdelen', 'naspunkt', 'ordering', 'obj'] + permissions = [['can_import_export_naspunktotdelen', u'Импорт/экспорт']] + + def __unicode__(self): + obj = self.obj.strip() + if obj: + return obj + return u'нет данных (id=%d)' % self.pk + + +class OtdelType(models.Model): + """Справочник отделов""" + name = models.TextField(u'название отдела') + + def __unicode__(self): + return self.name + + +class Otdel(models.Model): + """Отдел в отделении""" + nas_punkt_otdelen = models.ForeignKey(NasPunktOtdelen, verbose_name=u'отделение', related_name='otdels') + otdel_type = models.ForeignKey(OtdelType, verbose_name=u'тип отдела', related_name='otdels') + phones = models.TextField(u'Телефоны') + text_block = models.TextField(u'Текст в блок') + schedule = JSONField(load_kwargs={'object_pairs_hook': collections.OrderedDict}) + + def __unicode__(self): + return u'{} {}'.format(self.nas_punkt_otdelen.obj, self.otdel_type.name) diff --git a/project/pensfonds/templatetags/__init__.py b/project/pensfonds/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/pensfonds/templatetags/pensfonds_tags.py b/project/pensfonds/templatetags/pensfonds_tags.py new file mode 100644 index 0000000..efe7b61 --- /dev/null +++ b/project/pensfonds/templatetags/pensfonds_tags.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +from collections import OrderedDict + +from django.template import Library + +from ..models import OblOtdelen, NasPunkt + + +register = Library() + + +@register.assignment_tag +def get_obl_otdelens(): + _obl_list = OblOtdelen.objects.all().order_by('oblast') + + obl_otdelens = OrderedDict() # группировка отделений + + for _obl in _obl_list: + try: + obl_otdelens[_obl].append(_obl) + except KeyError: + obl_otdelens[_obl] = [_obl] + + return obl_otdelens + + +@register.assignment_tag +def get_obl_naspunkts(): + _naspunkts = NasPunkt.objects.all().select_related().order_by('obl_otdelen', 'name') + + obl_naspunkts = {} + for _naspunkt in _naspunkts: + try: + obl_naspunkts[_naspunkt.obl_otdelen].append(_naspunkt) + except KeyError: + obl_naspunkts[_naspunkt.obl_otdelen] = [_naspunkt] + + return obl_naspunkts + + +@register.assignment_tag +def get_otdels_template(otdels_count): + return u'pensfonds/otdels/%s.html' % min(int(otdels_count), 10) diff --git a/project/pensfonds/tests.py b/project/pensfonds/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/project/pensfonds/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/project/pensfonds/urls.py b/project/pensfonds/urls.py new file mode 100644 index 0000000..f4a364d --- /dev/null +++ b/project/pensfonds/urls.py @@ -0,0 +1,12 @@ +from django.conf.urls import patterns, include, url + +from .views import pensfonds_all, pensfonds_oblast, pensfonds_naspunkt + + +urlpatterns = patterns('', + url(r'^$', pensfonds_all, name='pensfonds-all'), + + url(r'^(?P[0-9A-Za-z-_.]+)/$', pensfonds_oblast, name='pensfonds-oblast'), + + url(r'^(?P[0-9A-Za-z-_.]+)/(?P[0-9A-Za-z-_.]+)/$', pensfonds_naspunkt, name='pensfonds-naspunkt'), +) diff --git a/project/pensfonds/views.py b/project/pensfonds/views.py new file mode 100644 index 0000000..20a140a --- /dev/null +++ b/project/pensfonds/views.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +from collections import OrderedDict + +from django.shortcuts import get_object_or_404, render +from django.db.models import F +from django.db.models import Sum + +from project.teasers.models import get_teasers_for_path + +from .models import OblOtdelen, NasPunkt, NasPunktOtdelen + + +def get_naspunkts_letters_dict(_naspunkt_list): + naspunkts = OrderedDict() # . + _np_digit = OrderedDict() # , , + + for _naspunkt in _naspunkt_list: + _char = _naspunkt.name.strip()[0] + if _char.isdigit(): + try: + _np_digit[_char].append(_naspunkt) + except KeyError: + _np_digit[_char] = [_naspunkt] + else: + try: + naspunkts[_char].append(_naspunkt) + except KeyError: + naspunkts[_char] = [_naspunkt] + + naspunkts.update(_np_digit) + return naspunkts + + +def group_obl_otdelens_by_first_char(obj_list): + out_dict = OrderedDict() # + digits_dict = OrderedDict() # , , + + for obj in obj_list: + char = obj.oblast_short.strip()[0].upper() + if char.isdigit(): + try: + digits_dict[char].append(obj) + except KeyError: + digits_dict[char] = [obj] + else: + try: + out_dict[char].append(obj) + except KeyError: + out_dict[char] = [obj] + + out_dict.update(digits_dict) + + return out_dict + + +def pensfonds_all(request): + """ .""" + _obl_list = OblOtdelen.objects.all().order_by('oblast_short').annotate(people_count=Sum('naspunkts__people_count')) + obl_otdelens = group_obl_otdelens_by_first_char(_obl_list) + + teasers = get_teasers_for_path(request.path) + + # . + _naspunkt_list = NasPunkt.objects.all().select_related().order_by('name', 'obl_otdelen') + naspunkts = get_naspunkts_letters_dict(_naspunkt_list) + + naspunkt_teasers = get_teasers_for_path(request.path + u'#naspunkty') + + return render(request, 'pensfonds/pensfonds_all.html', { + 'obl_otdelens': obl_otdelens, 'teasers': teasers, + 'naspunkts': naspunkts, 'naspunkt_teasers': naspunkt_teasers, + }) + + +def pensfonds_oblast(request, slug): + """ .""" + obl_otdelen = get_object_or_404(OblOtdelen, slug__iexact=slug) + naspunkts = obl_otdelen.naspunkts.all().select_related() + naspunkts = get_naspunkts_letters_dict(naspunkts) + + teasers = get_teasers_for_path(request.path) + + return render(request, 'pensfonds/pensfonds_oblast.html', + {'obl_otdelen': obl_otdelen, 'teasers': teasers, 'naspunkts': naspunkts}) + + +def pensfonds_naspunkt(request, obl_slug, slug): + """ .""" + obl_otdelen = get_object_or_404(OblOtdelen, slug__iexact=obl_slug) + naspunkt = get_object_or_404(NasPunkt, obl_otdelen=obl_otdelen, slug__iexact=slug) + + obl_otdelen.people_count = obl_otdelen.naspunkts.aggregate(people_count=Sum('people_count'))['people_count'] + + teasers = get_teasers_for_path(request.path) + + return render(request, 'pensfonds/pensfonds_naspunkt.html', + {'obl_otdelen': obl_otdelen, 'naspunkt': naspunkt, 'teasers': teasers}) diff --git a/project/search/__init__.py b/project/search/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/search/index.py b/project/search/index.py new file mode 100644 index 0000000..e3060d7 --- /dev/null +++ b/project/search/index.py @@ -0,0 +1,20 @@ +from djapian import space, Indexer + +from .models import PageProxy + + +def is_searchable(indexer, obj): + return obj.published and not obj.publisher_is_draft and obj.level > 0 + + +class PageProxyIndexer(Indexer): + fields = ['proxy_get_content'] + tags = [ + ('teaser', 'proxy_get_teaser'), + ('title', 'proxy_get_title'), + ('path', 'proxy_get_path'), + ] + trigger = is_searchable + + +space.add_index(PageProxy, PageProxyIndexer, attach_as='indexer') diff --git a/project/search/models.py b/project/search/models.py new file mode 100644 index 0000000..c97cf89 --- /dev/null +++ b/project/search/models.py @@ -0,0 +1,40 @@ +from django.db import models +from django.utils.encoding import force_text +from django.utils.text import Truncator + +from cms.models import Page + +from .utils import strip_tags + + +LANGUAGE = 'ru' + + +class PageProxy(Page): + """Proxy model for Page. + Add a prefix `proxy_` to method names to avoid base class override. + """ + class Meta: + proxy = True + + def proxy_get_content(self): + if getattr(self, '_cache_content', None) is None: + content = [ + plugin.render_plugin().strip() + for placeholder in self.placeholders.all() + for plugin in placeholder.get_plugins() + if plugin.plugin_type == u'TextPlugin' + ] + self._cache_content = strip_tags(' '.join(content).strip()) + return self._cache_content + + def proxy_get_teaser(self): + if getattr(self, '_cache_teaser', None) is None: + self._cache_teaser = Truncator(self.proxy_get_content()).chars(500) + return self._cache_teaser + + def proxy_get_title(self): + return super(PageProxy, self).get_title(language=LANGUAGE) + + def proxy_get_path(self): + return super(PageProxy, self).get_path(language=LANGUAGE) diff --git a/project/search/paginator.py b/project/search/paginator.py new file mode 100644 index 0000000..a5a7844 --- /dev/null +++ b/project/search/paginator.py @@ -0,0 +1,28 @@ +from django.core.paginator import Paginator, InvalidPage + + +DEFAULT_PER_PAGE = 10 +DEFAULT_ORPHANS = 5 + +DEFAULT_PAGE_VAR = 'page' + + +def pagination(request, object_list): + paginator = Paginator(object_list, DEFAULT_PER_PAGE, DEFAULT_ORPHANS) + + try: + page_number = int(request.GET.get(DEFAULT_PAGE_VAR) or 1) + page_obj = paginator.page(page_number) + except (ValueError, InvalidPage) as e: + page_obj = paginator.page(page_number) # show first page on error + + request_GET = request.GET.copy() + if DEFAULT_PAGE_VAR in request_GET: + del request_GET[DEFAULT_PAGE_VAR] + + if len(request_GET.keys()) > 0: + getvars = '&%s' % request_GET.urlencode() + else: + getvars = '' + + return paginator, page_obj, getvars diff --git a/project/search/tests.py b/project/search/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/project/search/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/project/search/utils.py b/project/search/utils.py new file mode 100644 index 0000000..2dc9001 --- /dev/null +++ b/project/search/utils.py @@ -0,0 +1,10 @@ +from django.utils.html import strip_tags_re +from django.utils.encoding import force_text +from django.utils.functional import allow_lazy + + +def strip_tags(value): + """Returns the given HTML with all tags replaced with single space.""" + return strip_tags_re.sub(' ', force_text(value)) + +strip_tags = allow_lazy(strip_tags) diff --git a/project/search/views.py b/project/search/views.py new file mode 100644 index 0000000..ac99117 --- /dev/null +++ b/project/search/views.py @@ -0,0 +1,32 @@ +from django.shortcuts import render +from django.views.decorators.http import require_GET + +from .models import PageProxy +from .paginator import pagination + + +@require_GET +def search(request): + query = (u'%s' % request.GET.get('q', '')).strip() + + if query: + results = PageProxy.indexer.search(query).prefetch().spell_correction() + + # last chance to filter out unpubliched/draft pages. also accept only pages of level > 0 + final_results = [ + p for p in results + if p.instance.published and not p.instance.publisher_is_draft and p.instance.level > 0 + ] + + paginator, page_obj, getvars = pagination(request, final_results) + + context = dict( + maybe = results.get_corrected_query_string(), + paginator = paginator, + page_obj = page_obj, + getvars = getvars, + ) + else: + context = {} + + return render(request, 'search/search.html', context) diff --git a/project/settings.py b/project/settings.py new file mode 100644 index 0000000..a23b706 --- /dev/null +++ b/project/settings.py @@ -0,0 +1,388 @@ +# -*- coding: utf-8 -*- + +# Django settings for project project. + +import os + +from django.conf import global_settings + + +path = lambda *xs: os.path.abspath(os.path.join(os.path.dirname(__file__), *xs)) + + +DEBUG = False +TEMPLATE_DEBUG = DEBUG + +ADMINS = ( + # ('Your Name', 'your_email@example.com'), +) + +MANAGERS = ADMINS + +#DATABASES = { + #'default': { + #'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. + #'NAME': '', # Or path to database file if using sqlite3. + #The following settings are not used with sqlite3: + #'USER': '', + #'PASSWORD': '', + #'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP. + #'PORT': '', # Set to empty string for default. + #} +#} + +# Hosts/domain names that are valid for this site; required if DEBUG is False +# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts +ALLOWED_HOSTS = [] + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# In a Windows environment this must be set to your system time zone. +TIME_ZONE = 'Europe/Moscow' + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'ru' + +SITE_ID = 1 + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True + +# If you set this to False, Django will not format dates, numbers and +# calendars according to the current locale. +USE_L10N = True + +# If you set this to False, Django will not use timezone-aware datetimes. +USE_TZ = True + +# Absolute filesystem path to the directory that will hold user-uploaded files. +# Example: "/var/www/example.com/media/" +MEDIA_ROOT = path('../public_html/media') + +# URL that handles the media served from MEDIA_ROOT. Make sure to use a +# trailing slash. +# Examples: "http://example.com/media/", "http://media.example.com/" +MEDIA_URL = '/m/' + +# Absolute path to the directory static files should be collected to. +# Don't put anything in this directory yourself; store your static files +# in apps' "static/" subdirectories and in STATICFILES_DIRS. +# Example: "/var/www/example.com/static/" +STATIC_ROOT = path('../public_html/static') + +# URL prefix for static files. +# Example: "http://example.com/static/", "http://static.example.com/" +STATIC_URL = '/s/' + +# Additional locations of static files +STATICFILES_DIRS = ( + # Put strings here, like "/home/html/static" or "C:/www/django/static". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. + path('static'), +) + +# List of finder classes that know how to find static files in +# various locations. +STATICFILES_FINDERS = ( + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', +# 'django.contrib.staticfiles.finders.DefaultStorageFinder', +) + +# Make this unique, and don't share it with anybody. +SECRET_KEY = 'n*t&j(gng8ag57esyvn)&t8v=d@$#-(aeou@oc!plsu!g0fyv6' + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', +# 'django.template.loaders.eggs.Loader', +) + +MIDDLEWARE_CLASSES = ( + 'django.middleware.common.CommonMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + # Uncomment the next line for simple clickjacking protection: + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + + # django-cms + 'cms.middleware.page.CurrentPageMiddleware', + 'cms.middleware.user.CurrentUserMiddleware', + 'cms.middleware.toolbar.ToolbarMiddleware', + #'cms.middleware.language.LanguageCookieMiddleware', + + 'project.commons.middleware.FullBaseUrlMiddleware', +) + +ROOT_URLCONF = 'project.urls' + +# Python dotted path to the WSGI application used by Django's runserver. +WSGI_APPLICATION = 'project.wsgi.application' + +TEMPLATE_DIRS = ( + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. + path('templates'), +) + +INSTALLED_APPS = ( + 'admin_tools', + #'admin_tools.theming', + #'admin_tools.menu', + 'admin_tools.dashboard', + + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.messages', + 'django.contrib.staticfiles', + # Uncomment the next line to enable the admin: + 'django.contrib.admin', + # Uncomment the next line to enable admin documentation: + 'django.contrib.admindocs', + + 'django.contrib.humanize', + 'django.contrib.sitemaps', + + 'tinymce', + 'captcha', + 'sorl.thumbnail', + 'pytils', + + 'cms', + 'mptt', + 'menus', + 'sekizai', + + 'cms.plugins.file', + 'cms.plugins.flash', + 'cms.plugins.link', + 'cms.plugins.picture', + 'cms.plugins.text', + 'cms.plugins.video', + + 'project.commons', + 'project.banners', + 'project.cmsplugin_htmlsitemap', + 'project.feedback', + 'project.teasers', + 'project.guestbook', + 'project.pensfonds', + 'project.npfs', + 'project.articles', + + 'djapian', + 'project.search', + + 'django_extensions', + # keep it last + 'south', +) + +# A sample logging configuration. The only tangible logging +# performed by this configuration is to send an email to +# the site admins on every HTTP 500 error when DEBUG=False. +# See http://docs.djangoproject.com/en/dev/topics/logging for +# more details on how to customize your logging configuration. +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'formatters': { + 'standard': { + 'format': "[%(asctime)s] %(levelname)s %(message)s", + }, + }, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse' + } + }, + 'handlers': { + 'logfile_feedback': { + 'level': 'DEBUG', + 'class': 'logging.handlers.RotatingFileHandler', + 'filename': path('../log/feedback.log'), + 'maxBytes': 2*1024*1024, + 'backupCount': 5, + 'formatter': 'standard', + }, + 'logfile_guestbook': { + 'level': 'DEBUG', + 'class': 'logging.handlers.RotatingFileHandler', + 'filename': path('../log/guestbook.log'), + 'maxBytes': 2*1024*1024, + 'backupCount': 5, + 'formatter': 'standard', + }, + 'mail_admins': { + 'level': 'ERROR', + 'filters': ['require_debug_false'], + 'class': 'django.utils.log.AdminEmailHandler' + } + }, + 'loggers': { + 'django.request': { + 'handlers': ['mail_admins'], + 'level': 'ERROR', + 'propagate': True, + }, + 'feedback': { + 'handlers': ['logfile_feedback'], + 'level': 'DEBUG', + }, + 'guestbook': { + 'handlers': ['logfile_guestbook'], + 'level': 'DEBUG', + }, + } +} + +SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer' + +TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( + 'django.core.context_processors.request', + 'cms.context_processors.media', + 'sekizai.context_processors.sekizai', + 'project.feedback.context_processors.forms', +) + + +SOUTH_MIGRATION_MODULES = { + 'captcha': 'captcha.south_migrations', +} + +PLACEHOLDER_FRONTEND_EDITING = True + +CMS_TEMPLATE_INHERITANCE = False +CMS_SEO_FIELDS = True +CMS_MENU_TITLE_OVERWRITE = True + +gettext = lambda s: s + +LANGUAGES = ( + ('ru', gettext('Russian')), +) + +CMS_TEMPLATES = ( + ('cms/pages/article.html', u'Статья'), + ('cms/pages/inner-level-3.html', u'Внутренняя 3-го уровня'), + ('cms/pages/inner-level-2-with-index.html', u'Внутренняя 2-го уровня'), + ('cms/pages/index.html', u'Главная страница'), + ('cms/pages/company-page.html', u'Страница фондов'), + ('cms/pages/sitemap.html', u'Карта сайта'), +) + +CMS_PLACEHOLDER_CONF = { + 'content-main': { + 'name': u'Основной контент', + }, + 'content-main2': { + 'name': u'Основной контент 2', + }, + 'content-main3': { + 'name': u'Основной контент 3', + }, + 'content-main4': { + 'name': u'Основной контент 4', + }, + 'content-main5': { + 'name': u'Основной контент 5', + }, + 'content-main6': { + 'name': u'Основной контент 6', + }, + 'content-main7': { + 'name': u'Основной контент 7', + }, + 'content-left': { + 'name': u'Контент левой колонки', + }, + 'content-right': { + 'name': u'Контент правой колонки', + }, + 'category-desc': { + 'name': u'Описание категории', + }, + 'on-index': { + 'name': u'Блок на главной', + 'plugins': ['TextPlugin', 'PicturePlugin'], + }, + 'page-teasers': { + 'name': u'Тизеры', + 'plugins': ['TeasersPlugin'], + }, + 'page-teasers2': { + 'name': u'Тизеры 2', + 'plugins': ['TeasersPlugin'], + }, + 'article-contents': { + 'name': u'Содержание', + }, +} + +TINYMCE_DEFAULT_CONFIG = { + 'theme': "advanced", + 'plugins': "autolink,lists,table,paste,style", + + 'theme_advanced_buttons1': ",bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,fontselect,fontsizeselect,|,forecolor,backcolor,styleprops,removeformat,styleselect", + 'theme_advanced_buttons2': "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,images,cleanup,help,code,|,charmap,insertdate,inserttime", + 'theme_advanced_buttons3': "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,fullscreen,preview,print,", + 'theme_advanced_toolbar_location': "top", + 'theme_advanced_toolbar_align': "left", + 'theme_advanced_statusbar_location': "bottom", + 'theme_advanced_resizing': True, + 'convert_urls': False, + 'relative_urls': False, + 'remove_script_host': False, + 'style_formats': [ + {'title': 'таблица фондов', 'selector': 'table', 'classes': 'mce-fond-table'}, + ], + 'content_css' : "/static/css/tinymce.css", + 'body_class': "mce_body", +} + +DJAPIAN_DATABASE_PATH = path('../djapian_spaces/') +DJAPIAN_STEMMING_LANG = 'ru' + +ADMIN_TOOLS_INDEX_DASHBOARD = 'project.admin_dashboard.CustomIndexDashboard' + +# cache settings +COMMON_CACHE_PREFIX = 'pensfond_new_' +CMS_CACHE_PREFIX = '%scms-' % COMMON_CACHE_PREFIX + +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'LOCATION': '127.0.0.1:11211', + } +} + +THOUSAND_SEPARATOR = ' ' + +# Yandex.Webmaster settings +YANDEX_WEBMASTER_DOMAIN = 'https://pensionnyj-fond.ru' +YANDEX_WEBMASTER_TOKEN = None # DEFINE IN local_settings.py !!! +YANDEX_WEBMASTER_TOKEN_EXPIRES = None # DEFINE IN local_settings.py !!! + +# email settings +# DEFINE IN local_settings.py !!! + +SERVER_EMAIL = u'ERROR Пенсионный фонд ' # email that error messages come from +DEFAULT_FROM_EMAIL = u'Пенсионный фонд ' # email that other messages come from. default email for EmailMessage + +FEEDBACK_EMAILS = ['alexander@air51.ru', 'lu@air51.ru'] + + +try: + from project.local_settings import * +except ImportError: + pass diff --git a/project/static/_1504785325778.php b/project/static/_1504785325778.php new file mode 100644 index 0000000..9acef73 --- /dev/null +++ b/project/static/_1504785325778.php @@ -0,0 +1,57 @@ + + array( + 'method' => 'POST', + 'header' => 'Content-type: application/x-www-form-urlencoded', + 'content' => $postdata + ) + ); + $context = stream_context_create($opts); + $result = file_get_contents(HOST . 'lead', false, $context); + die(); + } + + $response = array( + 'status' => 'reject', + 'message' => '' + ); + + // get widget + $query = "wnew.js?wc=leadia/default/blade&w=" . WMID . "&p=lawyer&guest=1"; + if (!empty($_GET)) { + $query .= '&' . http_build_query($_GET, '', '&'); + } + + $referer = '//' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; + $opts = array( + 'http'=>array( + 'method'=>"GET", + 'header'=>"Referer: " . $referer . "\r\n", + 'user_agent'=>$_SERVER['HTTP_USER_AGENT'] + ) + ); + $context = stream_context_create($opts); + + try { + $file = file_get_contents(HOST . $query, false, $context); + if ($file === false) { + $error = error_get_last(); + $response['message'] = "HTTP request failed. Error was: " . $error['message']; + die (json_encode($response)); + } else { + echo $file; + } + } catch (Exception $e) { + $response['message'] = 'CATCH: ' . $e->getMessage(); + die (json_encode($response)); + } +?> diff --git a/project/static/css/common.css b/project/static/css/common.css new file mode 100644 index 0000000..f0728fb --- /dev/null +++ b/project/static/css/common.css @@ -0,0 +1,1482 @@ +* { margin: 0; padding: 0; } + +html { height: 100%; } + +@font-face { + font-family: "a_AvanteLt-db"; + src: url('../fonts/261413575-a_AvanteLt-DemiBold.eot'); + src: url('../fonts/261413575-a_AvanteLt-DemiBold.eot?#iefix') format('embedded-opentype'), + url('../fonts/261413575-a_AvanteLt-DemiBold.svg#a_AvanteLt') format('svg'), + url('../fonts/261413575-a_AvanteLt-DemiBold.woff') format('woff'), + url('../fonts/261413575-a_AvanteLt-DemiBold.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "a_AvanteLt-light"; + src: url('../fonts/332733155-a_AvanteLt-Light.eot'); + src: url('../fonts/332733155-a_AvanteLt-Light.eot?#iefix') format('embedded-opentype'), + url('../fonts/332733155-a_AvanteLt-Light.svg#a_AvanteLt') format('svg'), + url('../fonts/332733155-a_AvanteLt-Light.woff') format('woff'), + url('../fonts/332733155-a_AvanteLt-Light.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +h4 {font-size: 16px;margin: 10px 0 10px 0;} +#sitemap li { +padding:0; +} +#sitemap ul { +margin:0 0 0 40px; +} +@media only screen +and (max-device-width: 728px) { +#yandex_ad{ width:300px; height: 300px; margin: 0 auto } +} +@media only screen +and (min-device-width: 729px) { +#yandex_ad{ width:728px; height: 90px; margin: 0 auto} +} +#yandex_ad_inner_6, #yandex_ad_inner_12, #yandex_ad_inner_15, #yandex_ad_inner_18, #yandex_ad_inner_21, #yandex_ad_inner_24 { +width:728px; +height: 90px; +margin: 0 auto; +display:block; +} +#yandex_ad { +width:728px; +height: 90px; +margin: 0 auto; +display:block; +margin-bottom: 10px; +} +#yandex_ad_contents { +width:728px; +height: 90px; +margin: 0 auto; +display:block; +} +#yandex_ad_main2 { +width:728px; +height: 90px; +margin: 0 auto; +display:block; +} +#yandex_ad_main3 { +width:728px; +height: 90px; +margin: 0 auto; +display:block; +} +#yandex_ad_main4 { +width:728px; +height: 90px; +margin: 0 auto; +display:block; +} +#yandex_ad_main5 { +width:728px; +height: 90px; +margin: 0 auto; +display:block; +} +#yandex_ad_main6 { +width:728px; +height: 90px; +margin: 0 auto; +display:block; +} +#yandex_ad_main7 { +width:728px; +height: 90px; +margin: 0 auto; +display:block; +} +.yandex_rtb{ +width:728px; +height: 90px; +margin: 0 auto 10px; +display:block; +} +.yandex_rtb301{ +width:301px; +} +body { + font-family: Tahoma, Geneva, sans-serif; + font-size:14px; + color:#414141; + border: 0; /* This removes the border around the viewport in old versions of IE */ + width: 100%; + height: 100%; + margin: 0 auto; +} + +a { color: #4387c8; text-decoration: underline;} +a:hover { color: #4387c8; text-decoration: none;} +img { border: 0; } +table { width: 100%; margin: 0; padding: 0; border-collapse: collapse; } +h1 { font-size:28px; font-weight:600; margin:0 0 5px 0; font-family: 'a_AvanteLt-light';} +h2 { font-size:20px; font-weight: 600;margin-bottom: 5px;} +h3 { margin-top: 20px; margin-bottom:10px; font-size:24px; } +ol {margin-left: 40px;} +ul {margin-left: 40px; margin-bottom:10px; margin-top:-16px;} +li {padding: 2px 0 0 0;} + + +.clear { clear: both; } +.left { float: left; } +.right { float: right; } +.file {line-height: 40px;} +.top-menu{ +position: absolute; +margin-left: 376px; +background: #fff; +margin-top: 81px; +} +address { + margin-bottom: 15px; + border-left: 3px solid #0ea9dc; + padding-left: 10px; + font-size: 17px; + font-style: normal; + font-family: Helvetica; + color: #0ea9dc; +} +.circle_quote { +border: 1px dashed #6ab5cd; + padding: 10px; + font-weight: bold; + color: #59727a; + font-size: 13px; +} +.row1 { +margin-left: 95px; +margin-bottom:10px; +} +.row1-ya { + margin-bottom: 10px; +} +.row2 { +margin-left: 95px; +margin-bottom:10px; +} +.row3 { +margin: 30px 10px 40px 95px!Important; +} +.row3-ya { +margin: 30px 0px 40px 0px !Important; +} +.row4 { +float:right; +margin:10px 0 10px 0; +} +.row5 { +margin-left: 95px; +margin-bottom:10px; +width:728px; +height:90px; +} +.row6 { +margin-left: 45px; +margin-bottom:10px; +display:block; +} +.row6-ya { +margin-left: 0px; +margin-bottom:10px; +display:block; +} + +.row7 { + margin: 10px; + float: left; +} +.banner295x350 { +margin: 10px 0 10px 0; + display: block; +} + +.right_row1{ +float: right; + margin: 3px 0 0 0!Important; + width: 510px; +} +.card_otd { +background: #fafafa; +padding: 10px 4px 10px 4px; +} +.card_otd p { +font-size:15px; +color:#414141; +} +.info-block { +min-height: 350px; +position: relative; +} +.info-block p{ +font-size:13px; +color:#858585; +} +.bigcity-list{ +width: 67%; + display: block; + float: left; + margin: 0 5px 0 0!Important; + font-size: 14px; + line-height: 19px; + column-count: 3; + -moz-column-count: 3; + -webkit-column-count: 3; +} +.big-city{ +margin: 0 2px 2px 0!Important; + width: 163px; + overflow: hidden; + border: 1px solid #f1f1f1; + padding: 10px; + background: #fff; + page-break-inside: avoid; +} +.big-city h3{margin: 0 0 10px 0;color: #858585;} +.info-text{ +display: block; +margin: 10px 10px 20px 0!Important; +font-size:14px; +line-height: 19px; +} +.info-text p{ +font-size:14px; +color:#434343; +line-height: 19px; +} +.info-text-city { +width: 63%; +display: block; +float: left; +margin: 10px 10px 0 0!Important; +line-height: 19px; +} +.info-text-city p{font-size:14px; +line-height: 19px;color:#434343;} +.info-oblast-city{ +width: 67%; +display: block; +float: left; +margin:0!Important; +font-size:14px; +line-height: 19px; +column-count: 3; +-moz-column-count: 3; + -webkit-column-count: 3; +} +.info_teaser_city { +display: inline-block; + width: 295px; + position: relative; + border: 1px solid #16a3e2; + padding: 0 0 8px 0; + margin: 0!Important; +} +.info_num { +font-size:30px; +color:#414141; +font-weight:bold; +} +.info_num_big{ +font-size:50px; +color:#414141; +} +.small-info { +float:right; +font-size:13px; +margin-top: 20px!Important; +position: absolute; +margin-left: 200px!Important; +} +.small-info p{ +padding:0; +margin:5px 0 0 0; +} +.info_otd { +width:550px; +margin: 0 10px 0 0!Important; +} +.info_otd p{ +font-size:13px; +color:#858585; +} +.info_otd_num { +font-size: 17px; +color: #414141; +} +.info_otd h3{ +margin:0 0 10px 0; +} +.info_teaser { +margin: 0 10px 10px 455px!Important; +width: 455px; +position: absolute; +left:0; +top:0; +} + +.info_otd_npf { +width:450px; +display:inline-block; +margin-bottom: 20px!Important; +color:#858585; +font-size:13px; +} +.column { +height: 212px; +background: #fbfbfb; +padding: 30px; +border: 1px solid #f1f1f1; + -webkit-column-width: 100px; + -moz-column-width: 100px; + column-width: 100px; + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 3; + -webkit-column-gap: 30px; + -moz-column-gap: 30px; + column-gap: 30px; + -webkit-column-rule: 1px solid #f1f1f1; + -moz-column-rule: 1px solid #f1f1f1; + column-rule: 1px solid #f1f1f1; + } + +.info_naspunkt { +height: 212px; +background: #fbfbfb; +padding: 20px; +border: 1px solid #f1f1f1; + } +.header { + font-family: 'a_AvanteLt-light'; + margin: 10px auto 2px; + height: 100px; + padding: 0px; + overflow: visible; + box-shadow: 0 3px 2px rgba(0,0,0,0.3); + position: relative; + min-width: 1200px; + background: #fff; +} + +.header .logo{ + display:block; + position:relative; + float:left; + height:88px; + width:253px; + margin: 5px 0 0 0px; + background:url('../img/logo.png') no-repeat; +} +.header .header-link1 {display:block;width:385px;height:40px;top:35px;left:315px;position:absolute;padding-left:60px;background:url('../img/header4.png') no-repeat; font-family: Tahoma; +color: #414141;} +.header .header-link1.active-header-link {background:url('../img/header2.png') no-repeat;} +.header .header-link2.active-header-link {background:url('../img/header3.png') no-repeat;} +.header .header-link1 a, .header .header-link2 a, .header .header-link1 span, .header .header-link2 span {display:block;} +.header .header-link2 {display:block;width:385px;height:42px;top:35px;left:730px;position:absolute;padding-left:65px;background:url('../img/header5.png') no-repeat; font-family: Tahoma; +color: #414141;} +.wrapper {width:1200px;margin:0 auto;padding:0;position:relative;} +.header .header-link1 a, .header .header-link2 a {color: #414141; font-size:15px; font-weight:bold;} +.header .header-link1 span, .header .header-link2 span {font-size:14px;} +.active-header-link span.h {color: #16a9e2; text-decoration:none;font-size:15px;font-weight:bold;} +.menu-stripe { + clear: both; + float: left; + width: 100%; + height: 50px; + overflow: hidden; +} + +.menu-top { + width: 1000px; + margin: 0 auto; +} +.menu-top li{ + float: left; + list-style: none; + margin: 0; + width:200px; + line-height:50px; + font-size:16px; + color:#ffffff; + text-align:center; + text-decoration:underline; +} +.menu-top li.last{ + border:3px solid #ffffff; + width:194px; + height:45px; +} +.menu-top li a{ + width:200px; + display:block; + color:#ffffff; + text-decoration:none; + line-height:50px; + text-align:center; +} +.menu-top li:hover, .menu-top li.selected{ + text-decoration:none; + cursor:pointer; +} +.menu-top li:hover a, .menu-top li.selected a{ + color:#ffffff; +} + +.breadcrumbs { + float:left; + position:absolute; + z-index:1; + margin: 20px 0 10px 10px; +} +.breadcrumbs a{ +color:#216397; +text-decoration:underline; +} +.breadcrumbs a:hover{ +color:#216397; +text-decoration:none; +} +.breadcrumbs ul { + list-style: none; + margin:0; +} +.breadcrumbs ul li { + float:left; + font-family:arial; + font-size:11px; + color:#000; + margin:0; + padding:0; +} + +.menu-left { + margin: 5px 0; + padding: 0; + display:table; + font-family:"Tahoma"; + font-size:16px; + list-style:none; +} +.menu-left .sibling, .menu-left .descendant, .menu-left .level-1 { + min-height:43px; + padding:10px 0 0 0; +} +.menu-left a { + text-decoration: none; + display:table-cell; + width:200px; + padding-left:5px; +} +.menu-left > li > span { + display:block; + background:#304d8b url('../img/menu-list-sel.png') no-repeat 5px center; + color:#ffba00; + padding:12px 10px 20px 20px; + width:220px; +} + +.menu-left > li > a { + background:#304d8b url('../img/menu-list.png') no-repeat 5px center; + display:block; + color:#fff; + padding:12px 10px 12px 20px; + width:220px; + +} + +.menu-left > li > a:hover { + color:#11aae0; +} +.file a{ + background: url('../img/download.png') no-repeat; + width: 16px; + height: 17px; + padding-left: 20px; +} +.menu-left .selected ul, .menu-left .ancestor ul { + margin-left: 0px; + padding: 10px 5px 5px 20px; + list-style:none; + background:#d0edfa; + font-size:14px; + width: 225px; + margin-top: 0px; +} +.menu-left .selected ul li.first, .menu-left .ancestor ul li.first { margin-top: 0px; } +.menu-left li ul li.last { margin-bottom: 10px; } + +.menu-left-submenu li{ margin-bottom: 15px;} +.menu-left-submenu li a { text-decoration:underline; padding-left:0;} +.menu-left-submenu li a:hover { text-decoration:none; padding-left:0;} +.menu-left-submenu li a { color:#304d8b; } +.menu-left-submenu li span { color:#434343; font-weight:bold;background: url('../img/active.png') no-repeat;display:block;width:228px;margin-left:-20px;padding:12px 0 12px 22px;} + +.banner{ + margin:4px 0 10px 4px; + width:200px; + float:left; +} +.banner728x90 { + width: 728px; + height: 90px; + overflow:hidden; + margin: 0 auto 20px!Important; +} +.banner img{ + width:200px; +} + +.content-main{ + float:left; + width:937px; + +} + +.footer { + margin: 20px auto 0; + height: 95px; + overflow: hidden; + color:#0ea9ea; + border-top:9px solid #28292a; + font-size:12px; + width:100%; + min-width:1200px; + background:url('../img/footer_bg.png'); + position:relative; +} +.footer a{ + color:#fff; + text-decoration:underline; +} +.footer a:hover{ + color:#fff; + text-decoration:none; +} +.footer .contact_admin{ + font-size:13px; + padding-left:28px; + background:url('../img/envelope.png') no-repeat left center; + position:absolute; + left:263px; + top:0px; + margin-top:30px; + width:300px; + height:18px; +} + +.footer .left-footer{ + margin-top:30px; + width:200px; + height:40px; + position: absolute; +} +.pre-footer {margin:10px auto; width:937px;position: relative;display: inline-block;} +ul.main{ + clear:both; + float:left; + margin:0 0 0 10px; + list-style: none; +} +ul.main ul.level1{ + float:left; + margin:0 0 0 30px; + list-style:none; +} +ul.main ul.level1 li{ + margin:5px 0 0 0; +} +ul.main ul.level2{ + float:left; + margin:0 0 0 30px; + list-style:none; +} + +.index_block { + font-size:13px; + font-family: Tahoma, Geneva, sans-serif; + display:block; + text-decoration:none; + float: left; + width: 275px; + padding: 7px 5px 5px 175px; + margin: 0 10px 10px 0; + height: 100px; + position:relative; +} + +.index_block a{ + text-decoration:none; + font-size:17px; +} + +.index_block a h3{ + line-height:1; +font-family: Arial, sans-serif; +font-size: 18px; + margin: 0; + +} +.index_block a h3:hover{ + line-height:1; + color: #2a5680; + +} + +.index_block img { + position:absolute; + left:0; + top:10px; +} + +.category-desc { + font-size:17px; + position:relative; + margin-bottom:20px; +} +.category-desc .logo { +float:left; +} +.category-desc-company { + font-family: 'a_AvanteLt-light'; + color: #fff; + font-size:21px; + position:relative; + margin-bottom:20px; + margin-top: 30px; + padding-top: 10px; +} +.category-desc-company h1 { +color: #fff; + font-size:36px; + text-shadow: 1px 1px 0 #999999; +} +.graph_otd_npf { +float:right; +width:400px; +border: 1px solid #f1f1f1; +padding:7px; +font-size:11px; +} +.tabs_npf { +margin:0!Important; +} +.tab-nav-info { +display:inline; +list-style:none; +margin:0; +} +.tab-nav-info li { +display:inline; +padding: 0 10px 0 0; +} +.tab-nav-info li a.selected { +display:inline; +padding: 0 10px 0 0; +color:#858585; +text-decoration:none; +} +.main-text { + font-family: 'a_AvanteLt-light'; + color: #fff; + font-size:21px; + position:relative; + margin-bottom:20px; +} +.main-text h1 { + color: #fff; + font-size:36px; + text-shadow: 1px 1px 0 #999999; +} +p { +margin-bottom: 10px; +} +.category-desc h1{ + color: #16a3e2; + font-size:38px; +} + +.index-text-2 { + color:#515151; + margin: 15px 0 0 0; +} + +.hr {margin: 15px 0px; border-top:solid 1px #d9d9d9;} + +.color_info { + width:100%; + height:160px; + display:table; + margin-top:25px; +} + +.color_info div{ + font-family:'a_AvanteLt-db'; + width:25%; + float:none; + display:table-cell; + padding:15px; +} +.color_info div a{ + color:#fff; + text-decoration:none; + font-size: 20px; +line-height: 20px; +} +.color_info div:nth-child(1){ + background:#35b3ae; +} +.color_info div:nth-child(2){ + background:#304d8b; +} +.color_info div:nth-child(3){ + background:#dcaa48; +} +.color_info div:nth-child(4){ + background:#e9812e; +} + +.hidden { display: none; } + +#feedback_dialog .field { + margin: 10px 0 0 0; + font-size:14px; + font-style:italic; + color: #727272; + position: relative; +} + +#feedback_dialog .field label { + float: left; + width: 145px; + text-align: right; + margin: 0 10px 0 0; +} + +#feedback_dialog .field input, textarea { + width: 325px; + border:1px solid #727272; +} + +#feedback_dialog .field input[type=text] { height:25px; } + +#feedback_dialog .field input[type=text]#id_captcha_1 { + float:left; + width: 180px; + margin-right: 20px; +} + +#feedback_dialog .js-captcha-refresh { + background: url(../img/refresh.png) no-repeat scroll 0 0 transparent; + display: block; + height: 15px; + left: 450px; + margin: 2px 15px; + position: absolute; + top: 3px; + width: 15px; +} + +/* --- */ + +.guestbook-form .field { + margin: 10px 0 0 0; + font-size:14px; + font-style:italic; + color: #727272; + position: relative; +} + +.guestbook-form .field label { + float: left; + width: 145px; + text-align: right; + margin: 0 10px 0 0; + font-size: 16px; + +} + +.guestbook-form .field input, textarea { + width: 325px; + border:1px solid #727272; +} + +.guestbook-form .field input[type=text] { height:25px; } + +.guestbook-form .field input[type=text]#id_captcha_1 { + float:left; + width: 180px; + margin-right: 20px; + height: 38px; +} + +.guestbook-form .js-captcha-refresh { + background: url(../img/refresh.png) no-repeat scroll 0 0 transparent; + display: block; + height: 15px; + left: 450px; + margin: 2px 5px; + position: absolute; + top: 10px; + width: 15px; +} + +.guestbook-form .errorlist { + color: red; + margin-left: 156px; + list-style: none; +} + +.guestbook-form .buttons { + margin: 20px 0 20px 130px; +} +.buttons input[type=submit] { +cursor: pointer; +width: 250px; +border: none; +border-radius: 20px; +height: 50px; +background: #283e70; +background: -moz-linear-gradient(top, #283e70 0%, #4a9cf8 100%); +background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#283e70), color-stop(100%,#4a9cf8)); +background: -webkit-linear-gradient(top, #283e70 0%,#4a9cf8 100%); +background: -o-linear-gradient(top, #283e70 0%,#4a9cf8 100%); +background: -ms-linear-gradient(top, #283e70 0%,#4a9cf8 100%); +background: linear-gradient(to bottom, #283e70 0%,#4a9cf8 100%); +filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#283e70', endColorstr='#4a9cf8',GradientType=0 ); +color: #fff; +font-family: arial; +font-size: 20px; +text-shadow: 0px 2px 3px #555; +margin-top: 0px; +} +.buttons input[type=submit]:hover { +cursor: pointer; +width: 250px; +border: none; +border-radius: 20px; +height: 50px; +background: #283e70; +background: -moz-linear-gradient(top, #283e70 0%, #418adb 100%); +background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#283e70), color-stop(100%,#418adb)); +background: -webkit-linear-gradient(top, #283e70 0%,#418adb 100%); +background: -o-linear-gradient(top, #283e70 0%,#418adb 100%); +background: -ms-linear-gradient(top, #283e70 0%,#418adb 100%); +background: linear-gradient(to bottom, #283e70 0%,#418adb 100%); +filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#283e70', endColorstr='#418adb',GradientType=0 ); +color: #fff; +font-family: arial; +font-size: 20px; +text-shadow: 0px 2px 3px #555; +margin-top: 0px; +} + +.guestbook-comment { + margin: 5px 0; + padding: 15px; + background: #fbfbfb; + border: 1px solid #f1f1f1; + border-radius: 15px; +} + +.guestbook-comment p { + margin: 0; +} + +.guestbook-comment-name { + float: left; + color: #414141; + width: auto; +margin-right: 15px; +} + +.guestbook-comment-time { + color:#858585; + font-style: normal; +} + +.guestbook-comment-row { + font-size: 12px; + font-weight: bold; + color: #727272; + padding-bottom: 4px; +} + +.guestbook-reply { + margin: 5px 20px 0 5px; + padding: 5px 5px 6px 15px; +} + +.guestbook-reply p { + margin-bottom: 10px; +} + +.guestbook-reply-name{ + font-size: 12px; + font-weight: bold; + color: #727272; + padding-bottom: 4px; + text-align: right; + font-style: italic; +} + +/* --- */ + +.pagination { + margin-top: 20px; +} + +.pagination ul { + list-style: none; +} + +.pagination ul li { + display: inline; + padding: 0 5px; +} + +.pagination ul li a { + text-decoration: none; +} + +.pagination .current { + background: #ddd; +} + +/* ================================= from http://matthewjamestaylor.com/blog */ + +/* column container */ +.colmask { + position: relative; /* This fixes the IE7 overflow hidden bug */ + clear: both; + width: 100%; /* width of whole page */ + overflow: hidden; /* This chops off any overhanging divs */ +} + +/* common column settings */ +.colright, +.colmid, +.colleft { + float: left; + width: 100%; /* width of page */ + position: relative; +} + +/* 2 Column (left menu) settings */ +.leftmenu { + margin: 0 auto; + width:1200px; + overflow:hidden; +} +.leftmenu .colleft{ + width:1200px; + float:none; + overflow:hidden; + min-height: 465px; +} +.leftmenu .col1-main { + width:940px; + margin-left:10px; + float:right; +} + +.leftmenu .col2-left { + width:250px; + float:left; +} + +.wide-bg { + background:url('../img/index-text-bg.png'); + height:490px!Important; + width:100%; + min-width:1200px; + z-index:-2; + position:absolute; + top:110px; + left:0; + overflow:visible; +} + +/* ========================================================================= */ +.category-text {background:#fff;padding: 15px 7px 10px 10px; box-shadow: 0 0 5px #cacaca;margin-top:15px;overflow:hidden;width:920px;} +.category-text ul {} +.w-triangle { +background:url('../img/triangle.png') no-repeat top center; +position:absolute; +top:99px; +left:570px; +width:29px; +height:12px; +overflow:visible; +margin-bottom:-28px;} +.w-triangle2 { +background: url('../img/triangle.png') no-repeat top center; + position: absolute; + top: 99px; + left: 980px; + width: 29px; + height: 12px; + overflow: visible; + margin-bottom: -28px;} + +.fond-table { + width:100%; +} +.fond-table tr:nth-of-type(2n){ + background:#e7f6fb; +} +.fond-table th { + background:#000; +} + +.company-text {position:relative;background:#fff;padding:10px;border-radius:0 0 10px 10px;border:solid 1px #16a3e2;margin-top:50px;overflow:visible;} +.company-text > .tabs {position:absolute;top:-42px;left:0;height:41px;margin-left:-1px;font-size:18px;} +.company-text > .tabs a {background:#304d8b;display:block;float:left;border-radius:10px 10px 0 0;padding:10px 50px 0 50px;margin-right:1px;height:30px;text-decoration:none;color:#fff;border:solid 1px #304d8b;border-bottom:none;} +.company-text > .tabs a.active {background:#fff; border:solid 1px #16a3e2;color:#16abe0;border-bottom:solid 1px #fff;} + +#left-banner {width:240px;height:400px;margin:30px auto 0;} +#inner-narrow-banner {margin: 0 0 0 -10px;} +#inner-wide-banner {margin: 0 0 0 -10px;} + +/* --- */ +.article-contents { +overflow: hidden; + display: block; + height: auto; +} +.article-contents ul {margin:0 0 10px 40px;} + +.page-teasers { + margin-top: 25px; + background: #0ea5e4; + padding: 0 0 10px 0; +} + +.page-teasers .teaser, .page-teasers .teaser-last-in-row { + float: left; + width: 440px; + height: 120px; + padding: 5px; + border: 1px solid #16a3e2; + margin: 10px 0 0 10px !important; + background: #fff; +} + +.vertical-teasers > .page-teasers { + margin-bottom: 25px; + background: none !important; + float: right; + width: 460px; + margin: 0; +} + +.vertical-teasers > .page-teasers .teaser, .vertical-teasers > .page-teasers .teaser-last-in-row { + float: left; + width: 430px; + height: 120px; + padding: 5px; + border: 1px solid #16a3e2; + margin: 0 0 10px 10px !important; + background: #fff; +} + +.teasers_275x350 { + float: left; + height: 350px; + width: 299px; + display:inline-block; + position: relative; + border: 1px solid #16a3e2; + padding: 0 0 8px 0; + background:#fff; + margin-bottom: 10px; +} + +.teasers_275x440 { + float: left; + height: 440px; + width: 275px; + display:inline-block; +} + +.teasers4 .one-teaser { + width:430px; +} + +.info_teaser .one-teaser { + width:270px; +} + +.teasers_295x350 .one-teaser { + width:270px; +} + +.one-teaser { + float: left; + height: 120px; + padding: 5px; + border: 1px solid #16a3e2; + margin: 0 0 10px 7px !important; + background: #fff; +} + +.page-teasers .image, .one-teaser .image { + float: left; + margin: 0 5px 0 0 !important; + width: 120px; + height: 120px; +} + +.page-teasers .title, .one-teaser .title { + font-size: 15px; + line-height: 16px; + text-decoration: underline; +} + +.page-teasers .title:hover, .one-teaser .title:hover { + text-decoration: none; +} + +.page-teasers .body, .one-teaser .body { + margin-top: 8px 0 0 0 !important; + font-size:13px; +} +.letter-teaser{ +margin: 10px 10px 10px 10px!Important; +display: block; +float:left; +width: 270px; +height:60px; +font-size:16px;} +.letter-teaser .image { +float:left; +margin: 0 10px 0 0!Important;} +.letter-teaser .title { +margin: 10px 10px 0 0!Important; +} + +.one-teaser-city { +margin: 10px 10px 10px 10px!Important; +display: block; +float:left; +width: 280px; +height:60px; +font-size:16px; +} +.one-teaser-city .image { +float:left; +margin: 0 10px 0 0!Important;} + +.one-teaser-city .title { +margin: 10px 10px 0 0!Important; + +} +.page-teaser-city{ +overflow:hidden; +width:914px; +border: 1px solid #16a3e2; +} + +/* --- */ + +.page404 { + font-size: 24px; + line-height: 24px; + text-align: center; + margin-top: 140px; + color:#fff; +} + +/* --- */ + +.search { + position: relative; + float: right; +} + +.search .search-input { + float: right; + border-radius: 0; + line-height: 20px; + height: 36px; + width: 312px; + margin-right: 10px; + padding: 8px 8px; + background-color: #fbf9f9; + border: 0; + font-size: 15px; +} + +.search .search-button { + float: right; + width: 44px; + height: 36px; + vertical-align: top; + line-height: 36px; + text-align: center; + background: url(../img/search.png) no-repeat; + margin-right: 80px; + margin-top: 8px; + border: none; + cursor: pointer; +} + +.search-entry { + margin: 10px 0 25px; +} + +.search-entry p { + margin-bottom: 10px; +} + +.search-pagination { + float: right; +} + +.search-pagination ul li { + float: left; + list-style: none; + text-align: center; + width: 20px; + padding: 5px 0; +} + +.search-pagination ul li a { + text-decoration: none; +} + +.search-pagination ul li.selected { + background: #ccc; +} +#toTop { + display:none; + text-decoration:none; + position:fixed; + bottom:10px; + left:10px; + overflow:hidden; + width:51px; + height:51px; + border:none; + text-indent:100%; + background:url(../img/ui.totop.png) no-repeat left top; + +} + +#toTopHover { + background:url(../img/ui.totop.png) no-repeat left -51px; + width:51px; + height:51px; + display:block; + overflow:hidden; + float:left; + opacity: 0; + -moz-opacity: 0; + filter:alpha(opacity=0); +} + +#toTop:active, #toTop:focus { + outline:none; +} + +.guestbook-form { + width: 500px; + margin: 0 15px 0 0; + background: #c0deeb; + padding: 15px 15px 20px 15px; + float: left; +} + +.guestbook-form-teasers { + float: left; + width: 369px; + overflow: hidden; + margin-bottom: 15px; +} + +.guestbook-form-teasers .one-teaser { + float: left; + width: 357px; + padding: 5px; + margin: 0 0 10px 0 !important; + font-size: 12px; +line-height: 12px; +overflow: inherit; +} +.guestbook-form-teasers .one-teaser .body { +margin-top:3px; +font-size: 12px; +} +.teaser-otdelenya { +width:250px; +height:150px; +background:url(../img/teaser-pf-otdelenya.jpg); +margin-top:5px; +} + +.one-city-letter { + padding: 7px; + width: 285px; + border:1px solid #f1f1f1; + font-size: 13px; + color: #858585; + margin-bottom: 10px; + background: #fff; +} +.one-city-letter h3 {margin:0;color:#858585;} +.oblast-city-np{margin: 0 0 10px 0;} +.oblast-city-np a{font-size:15px;} +.oblast-city { + margin: 0 2px 2px 0!Important; + width: 163px; + overflow: hidden; + padding: 10px; + background: #fff; + page-break-inside: avoid; + border: 1px solid #f1f1f1; +} +.oblast-city h3 { +margin:0 0 10px 0; +color:#858585; +} + +.otdel { + float: left; + margin: 10px 2px 0 0!Important; + width: 295px; + height: 350px; + overflow: hidden; + border: 1px solid #9b9b9b; + padding: 10px 0 10px 5px; + background: #fff; +} + +.npfs-one { + float: left; + margin: 0 10px 10px 0!Important; + width: 270px; + height: 50px; + overflow: hidden; + border: 1px solid #f1f1f1; + padding: 10px; + background: #fafafa; +} + +/* --- */ + +.tabs .tab-nav { + float: right; + margin: 0px 0 0 630px; + position: absolute; + display: block; +} + +.tabs .tab-nav li { + float: left; + list-style: none; + margin: 0 20px 0 0; +} + +.tabs .tab-nav li a { + float: left; + display: block; + text-decoration: none; +} + +.tabs .tab-nav li a.selected { + color: #858585; + cursor:default; +} +.tabs .tab-nav li a.selected:hover {color: #858585; + cursor:default} + +.tabs .tab-nav li a:hover { color: #11aae0; } + + +#graph_imusch div, +#graph_rezerv div, +#graph_nakopl div, +#graph_obyazat div, +#graph_zastrah div, +#graph_uchastniki div, +#graph_vyplat_ops div, +#graph_vyplat_npo div, +#graph_razmesch div, +#graph_invest div + { margin: 0 !important; } + +#graph_imusch, +#graph_rezerv, +#graph_nakopl, +#graph_obyazat, +#graph_zastrah, +#graph_uchastniki, +#graph_vyplat_ops, +#graph_vyplat_npo, +#graph_razmesch, +#graph_invest{ float: left; padding-top:50px; width:400px!Important;} + +.formula {border: 3px solid #0ea9dc;padding:10px;background:url(../img/strelka.png) 765px 18px no-repeat #f9f9f9;} +.title-name {text-align: center; + padding-bottom: 10px; + font-size: 24px; + font-weight: bold; + color: #0ea9dc; + } +.value-text {text-align: center; + padding-bottom: 10px; + font-size: 20px; + font-weight: bold;} +.text-formula{font-size:16px;} +.text-formula br{display: block;line-height:24px;} +.example { +padding:10px; + border: 5px solid #fff; + background: #f9f9f9; + box-shadow: 0px 0px 2px 1px #eee; + } +.example-text { + font-size:16px; +} +.example-text br {display: block;line-height:24px;} +.example-title {font-size:24px;font-weight:bold;color: #0ea9dc;padding-bottom: 10px;} +.attention, .advise {background:#f9f9f9; box-shadow: 0px 0px 2px 1px #eee;padding: 10px; border: 5px solid #fff;margin: 10px 0 10px 0;} +.att-title {background:url('../img/attention.png') no-repeat left; font-size:24px;margin-bottom: 10px;padding: 0 0 0 40px;} +.att-text {font-size:16px;} +.att-text br {display: block;line-height:24px;} +.advise-title {background:url('../img/sovet.png') no-repeat left; font-size:24px;margin-bottom: 10px;padding: 0 0 0 40px;} +.advise-text {font-size:16px;} +.advise-text br {display: block;line-height:24px;} + +.obl-column, .obl-city-column { + float:left; + margin: 10px 2px 0 0; +} + +.one-obl-letter { +padding:7px; + width:285px; + border:1px solid #f1f1f1; + font-size: 13px; + color: #858585; + margin-bottom: 10px; + background: #fff; +} + +.one-obl-letter h3{ +margin:0; +} +.one-obl-letter a { +font-size:15px; +} + +.obl-letter { +margin: 0 0 10px 0; +} + diff --git a/project/static/css/custom-admin.css b/project/static/css/custom-admin.css new file mode 100644 index 0000000..076e778 --- /dev/null +++ b/project/static/css/custom-admin.css @@ -0,0 +1 @@ +.vTextField { width: 55em; } diff --git a/project/static/css/smoothness/images/animated-overlay.gif b/project/static/css/smoothness/images/animated-overlay.gif new file mode 100644 index 0000000..d441f75 Binary files /dev/null and b/project/static/css/smoothness/images/animated-overlay.gif differ diff --git a/project/static/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/project/static/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..87f812d Binary files /dev/null and b/project/static/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/project/static/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/project/static/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000..4cb0d6d Binary files /dev/null and b/project/static/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/project/static/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/project/static/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000..bfe8974 Binary files /dev/null and b/project/static/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/project/static/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/project/static/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..168a182 Binary files /dev/null and b/project/static/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/project/static/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/project/static/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..25bf099 Binary files /dev/null and b/project/static/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/project/static/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/project/static/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..c5dc70a Binary files /dev/null and b/project/static/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/project/static/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/project/static/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000..bf1f164 Binary files /dev/null and b/project/static/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/project/static/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/project/static/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..11c1841 Binary files /dev/null and b/project/static/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/project/static/css/smoothness/images/ui-icons_222222_256x240.png b/project/static/css/smoothness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..2943302 Binary files /dev/null and b/project/static/css/smoothness/images/ui-icons_222222_256x240.png differ diff --git a/project/static/css/smoothness/images/ui-icons_2e83ff_256x240.png b/project/static/css/smoothness/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..25dfde1 Binary files /dev/null and b/project/static/css/smoothness/images/ui-icons_2e83ff_256x240.png differ diff --git a/project/static/css/smoothness/images/ui-icons_454545_256x240.png b/project/static/css/smoothness/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..0063819 Binary files /dev/null and b/project/static/css/smoothness/images/ui-icons_454545_256x240.png differ diff --git a/project/static/css/smoothness/images/ui-icons_888888_256x240.png b/project/static/css/smoothness/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000..53aaf6f Binary files /dev/null and b/project/static/css/smoothness/images/ui-icons_888888_256x240.png differ diff --git a/project/static/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/project/static/css/smoothness/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..145e3d3 Binary files /dev/null and b/project/static/css/smoothness/images/ui-icons_cd0a0a_256x240.png differ diff --git a/project/static/css/smoothness/jquery-ui-1.10.2.min.css b/project/static/css/smoothness/jquery-ui-1.10.2.min.css new file mode 100644 index 0000000..572a6a9 --- /dev/null +++ b/project/static/css/smoothness/jquery-ui-1.10.2.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.10.2 - 2013-03-14 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file diff --git a/project/static/css/tinymce.css b/project/static/css/tinymce.css new file mode 100644 index 0000000..2f2afd2 --- /dev/null +++ b/project/static/css/tinymce.css @@ -0,0 +1,44 @@ +.mce_body p { + font-size: 12px; + line-height:1.5em; + margin: 0.2em 0 1.2em 0; +} +.mce_body h2 { + color: #5d6169; + font-size: 18px; + font-weight: bold; + margin: 1em 0 0.2em 0; + line-height: 1.5em; +} +.mce-fond-table { + width:100%; + font-size:13px; + margin-bottom:15px; +} +.mce-fond-table td { + text-align:center; +} +.mce-fond-table tr td:nth-of-type(1){ + text-align:left; + padding:10px 10px 0 10px; + width:380px; +} +.mce-fond-table tr td:nth-of-type(2){ + + padding:10px 10px 0 10px; +} +.mce-fond-table tr td:nth-of-type(2), .mce-fond-table tr td:nth-of-type(3), .mce-fond-table tr td:nth-of-type(4), .mce-fond-table tr td:nth-of-type(5), .mce-fond-table tr td:nth-of-type(6), .mce-fond-table tr td:nth-of-type(7), .mce-fond-table tr td:nth-of-type(8), .mce-fond-table tr td:nth-of-type(9), .mce-fond-table tr td:nth-of-type(10), .mce-fond-table tr td:nth-of-type(11){ + font-weight:bold; + padding:10px 10px 0 10px; +} +.mce-fond-table tr{ + height:45px; +} +.mce-fond-table tr:nth-of-type(2n+1){ + background:#f7f7f7; +} +.mce-fond-table tr:nth-of-type(1){ + background:#494949; + color:#fff; + font-weight:bold; +} diff --git a/project/static/favicon.ico b/project/static/favicon.ico new file mode 100644 index 0000000..c21bf30 Binary files /dev/null and b/project/static/favicon.ico differ diff --git a/project/static/fonts/261413575-a_AvanteLt-DemiBold.eot b/project/static/fonts/261413575-a_AvanteLt-DemiBold.eot new file mode 100644 index 0000000..3bf5ac8 Binary files /dev/null and b/project/static/fonts/261413575-a_AvanteLt-DemiBold.eot differ diff --git a/project/static/fonts/261413575-a_AvanteLt-DemiBold.html b/project/static/fonts/261413575-a_AvanteLt-DemiBold.html new file mode 100644 index 0000000..fa88d48 --- /dev/null +++ b/project/static/fonts/261413575-a_AvanteLt-DemiBold.html @@ -0,0 +1,39 @@ + + + + + Demo a_AvanteLt + + + + +

+Ea fore firmissimum ab ubi ea illustriora. Qui nisi deserunt cohaerescant. Nam +legam domesticarum o illum aliquip excepteur et mandaremus e fore litteris ut do +enim tempor proident. Ullamco quis amet pariatur minim, offendit despicationes +in fabulas se aut quem tempor, aut mandaremus ad quamquam. Ut velit laboris +exercitation iis a te dolore sunt quorum. Quamquam philosophari ad ullamco. +Veniam laboris eruditionem id id velit occaecat eu probant eram varias e duis, +ut e firmissimum. +

+
+Generated using the @font-face Generator at font-face-generator.com +
+ + + \ No newline at end of file diff --git a/project/static/fonts/261413575-a_AvanteLt-DemiBold.svg b/project/static/fonts/261413575-a_AvanteLt-DemiBold.svg new file mode 100644 index 0000000..e69de29 diff --git a/project/static/fonts/261413575-a_AvanteLt-DemiBold.ttf b/project/static/fonts/261413575-a_AvanteLt-DemiBold.ttf new file mode 100644 index 0000000..694e6c7 Binary files /dev/null and b/project/static/fonts/261413575-a_AvanteLt-DemiBold.ttf differ diff --git a/project/static/fonts/261413575-a_AvanteLt-DemiBold.woff b/project/static/fonts/261413575-a_AvanteLt-DemiBold.woff new file mode 100644 index 0000000..d629d35 Binary files /dev/null and b/project/static/fonts/261413575-a_AvanteLt-DemiBold.woff differ diff --git a/project/static/fonts/332733155-a_AvanteLt-Light.eot b/project/static/fonts/332733155-a_AvanteLt-Light.eot new file mode 100644 index 0000000..f54734f Binary files /dev/null and b/project/static/fonts/332733155-a_AvanteLt-Light.eot differ diff --git a/project/static/fonts/332733155-a_AvanteLt-Light.html b/project/static/fonts/332733155-a_AvanteLt-Light.html new file mode 100644 index 0000000..72a365d --- /dev/null +++ b/project/static/fonts/332733155-a_AvanteLt-Light.html @@ -0,0 +1,39 @@ + + + + + Demo a_AvanteLt + + + + +

+Ea fore firmissimum ab ubi ea illustriora. Qui nisi deserunt cohaerescant. Nam +legam domesticarum o illum aliquip excepteur et mandaremus e fore litteris ut do +enim tempor proident. Ullamco quis amet pariatur minim, offendit despicationes +in fabulas se aut quem tempor, aut mandaremus ad quamquam. Ut velit laboris +exercitation iis a te dolore sunt quorum. Quamquam philosophari ad ullamco. +Veniam laboris eruditionem id id velit occaecat eu probant eram varias e duis, +ut e firmissimum. +

+
+Generated using the @font-face Generator at font-face-generator.com +
+ + + \ No newline at end of file diff --git a/project/static/fonts/332733155-a_AvanteLt-Light.svg b/project/static/fonts/332733155-a_AvanteLt-Light.svg new file mode 100644 index 0000000..e69de29 diff --git a/project/static/fonts/332733155-a_AvanteLt-Light.ttf b/project/static/fonts/332733155-a_AvanteLt-Light.ttf new file mode 100644 index 0000000..7ac90a1 Binary files /dev/null and b/project/static/fonts/332733155-a_AvanteLt-Light.ttf differ diff --git a/project/static/fonts/332733155-a_AvanteLt-Light.woff b/project/static/fonts/332733155-a_AvanteLt-Light.woff new file mode 100644 index 0000000..4ce7486 Binary files /dev/null and b/project/static/fonts/332733155-a_AvanteLt-Light.woff differ diff --git a/project/static/fonts/MyriadPro-Regular.eot b/project/static/fonts/MyriadPro-Regular.eot new file mode 100644 index 0000000..4d091c3 Binary files /dev/null and b/project/static/fonts/MyriadPro-Regular.eot differ diff --git a/project/static/fonts/MyriadPro-Regular.ttf b/project/static/fonts/MyriadPro-Regular.ttf new file mode 100644 index 0000000..70c4cb8 Binary files /dev/null and b/project/static/fonts/MyriadPro-Regular.ttf differ diff --git a/project/static/img/active.png b/project/static/img/active.png new file mode 100644 index 0000000..b9c19eb Binary files /dev/null and b/project/static/img/active.png differ diff --git a/project/static/img/attention.png b/project/static/img/attention.png new file mode 100644 index 0000000..a81a234 Binary files /dev/null and b/project/static/img/attention.png differ diff --git a/project/static/img/ban753x87.png b/project/static/img/ban753x87.png new file mode 100644 index 0000000..ab89608 Binary files /dev/null and b/project/static/img/ban753x87.png differ diff --git a/project/static/img/ban937x87.png b/project/static/img/ban937x87.png new file mode 100644 index 0000000..f151776 Binary files /dev/null and b/project/static/img/ban937x87.png differ diff --git a/project/static/img/banner.jpg b/project/static/img/banner.jpg new file mode 100644 index 0000000..4799c98 Binary files /dev/null and b/project/static/img/banner.jpg differ diff --git a/project/static/img/download.png b/project/static/img/download.png new file mode 100644 index 0000000..87bcbab Binary files /dev/null and b/project/static/img/download.png differ diff --git a/project/static/img/envelope.png b/project/static/img/envelope.png new file mode 100644 index 0000000..d2a0d83 Binary files /dev/null and b/project/static/img/envelope.png differ diff --git a/project/static/img/footer_bg.png b/project/static/img/footer_bg.png new file mode 100644 index 0000000..9742665 Binary files /dev/null and b/project/static/img/footer_bg.png differ diff --git a/project/static/img/header2.png b/project/static/img/header2.png new file mode 100644 index 0000000..493a189 Binary files /dev/null and b/project/static/img/header2.png differ diff --git a/project/static/img/header3.png b/project/static/img/header3.png new file mode 100644 index 0000000..7ab7b91 Binary files /dev/null and b/project/static/img/header3.png differ diff --git a/project/static/img/header4.png b/project/static/img/header4.png new file mode 100644 index 0000000..798ce45 Binary files /dev/null and b/project/static/img/header4.png differ diff --git a/project/static/img/header5.png b/project/static/img/header5.png new file mode 100644 index 0000000..177413a Binary files /dev/null and b/project/static/img/header5.png differ diff --git a/project/static/img/index-bg.png b/project/static/img/index-bg.png new file mode 100644 index 0000000..59430fe Binary files /dev/null and b/project/static/img/index-bg.png differ diff --git a/project/static/img/index-text-bg.png b/project/static/img/index-text-bg.png new file mode 100644 index 0000000..753da91 Binary files /dev/null and b/project/static/img/index-text-bg.png differ diff --git a/project/static/img/logo.png b/project/static/img/logo.png new file mode 100644 index 0000000..f075c1c Binary files /dev/null and b/project/static/img/logo.png differ diff --git a/project/static/img/map.jpg b/project/static/img/map.jpg new file mode 100644 index 0000000..0945976 Binary files /dev/null and b/project/static/img/map.jpg differ diff --git a/project/static/img/menu-list-sel.png b/project/static/img/menu-list-sel.png new file mode 100644 index 0000000..cfd90bf Binary files /dev/null and b/project/static/img/menu-list-sel.png differ diff --git a/project/static/img/menu-list.png b/project/static/img/menu-list.png new file mode 100644 index 0000000..8dcde36 Binary files /dev/null and b/project/static/img/menu-list.png differ diff --git a/project/static/img/refresh.png b/project/static/img/refresh.png new file mode 100644 index 0000000..c078dc7 Binary files /dev/null and b/project/static/img/refresh.png differ diff --git a/project/static/img/sovet.png b/project/static/img/sovet.png new file mode 100644 index 0000000..d4dbb94 Binary files /dev/null and b/project/static/img/sovet.png differ diff --git a/project/static/img/strelka.png b/project/static/img/strelka.png new file mode 100644 index 0000000..b0ce9b6 Binary files /dev/null and b/project/static/img/strelka.png differ diff --git a/project/static/img/teaser-pf-otdelenya.jpg b/project/static/img/teaser-pf-otdelenya.jpg new file mode 100644 index 0000000..557ad21 Binary files /dev/null and b/project/static/img/teaser-pf-otdelenya.jpg differ diff --git a/project/static/img/triangle.png b/project/static/img/triangle.png new file mode 100644 index 0000000..917e956 Binary files /dev/null and b/project/static/img/triangle.png differ diff --git a/project/static/img/ui.totop.png b/project/static/img/ui.totop.png new file mode 100644 index 0000000..eb75efc Binary files /dev/null and b/project/static/img/ui.totop.png differ diff --git a/project/static/img/vert-banner.png b/project/static/img/vert-banner.png new file mode 100644 index 0000000..8657120 Binary files /dev/null and b/project/static/img/vert-banner.png differ diff --git a/project/static/js/csrf.js b/project/static/js/csrf.js new file mode 100644 index 0000000..ebf0ecb --- /dev/null +++ b/project/static/js/csrf.js @@ -0,0 +1,23 @@ +$.ajaxSetup({ + beforeSend: function(xhr, settings) { + function getCookie(name) { + var cookieValue = null; + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } + if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { + // Only send the token to relative URLs i.e. locally. + xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); + } + } +}); diff --git a/project/static/js/easing.js b/project/static/js/easing.js new file mode 100644 index 0000000..d068c90 --- /dev/null +++ b/project/static/js/easing.js @@ -0,0 +1,141 @@ +/* + * jQuery EasIng v1.1.2 - http://gsgd.co.uk/sandbox/jquery.easIng.php + * + * Uses the built In easIng capabilities added In jQuery 1.1 + * to offer multiple easIng options + * + * Copyright (c) 2007 George Smith + * Licensed under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + */ + +// t: current time, b: begInnIng value, c: change In value, d: duration + +jQuery.extend( jQuery.easing, +{ + easeInQuad: function (x, t, b, c, d) { + return c*(t/=d)*t + b; + }, + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + easeInOutQuad: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + easeInCubic: function (x, t, b, c, d) { + return c*(t/=d)*t*t + b; + }, + easeOutCubic: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t + 1) + b; + }, + easeInOutCubic: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t + b; + return c/2*((t-=2)*t*t + 2) + b; + }, + easeInQuart: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + easeOutQuart: function (x, t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + easeInOutQuart: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t + b; + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + easeInQuint: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t*t + b; + }, + easeOutQuint: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t*t*t + 1) + b; + }, + easeInOutQuint: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; + return c/2*((t-=2)*t*t*t*t + 2) + b; + }, + easeInSine: function (x, t, b, c, d) { + return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + }, + easeOutSine: function (x, t, b, c, d) { + return c * Math.sin(t/d * (Math.PI/2)) + b; + }, + easeInOutSine: function (x, t, b, c, d) { + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + }, + easeInExpo: function (x, t, b, c, d) { + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + }, + easeOutExpo: function (x, t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + easeInOutExpo: function (x, t, b, c, d) { + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function (x, t, b, c, d) { + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + }, + easeOutCirc: function (x, t, b, c, d) { + return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + }, + easeInOutCirc: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + }, + easeInElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + easeInOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; + }, + easeInBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + easeOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + easeInOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + easeInBounce: function (x, t, b, c, d) { + return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; + }, + easeOutBounce: function (x, t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + } else { + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + } + }, + easeInOutBounce: function (x, t, b, c, d) { + if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; + return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; + } +}); + diff --git a/project/static/js/ie-png.js b/project/static/js/ie-png.js new file mode 100644 index 0000000..4796f89 --- /dev/null +++ b/project/static/js/ie-png.js @@ -0,0 +1,14 @@ +/** +* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML . +* Author: Drew Diller +* Email: drew.diller@gmail.com +* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/ +* Version: 0.0.8a +* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license +* +* Example usage: +* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector +* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement +**/ +var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;bn.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet(); +DD_belatedPNG.fix('.logo, .navigation-left, .navigation-right, .box-top, .box-mid, .box-bot, .content h3, .content-tools li.first, .content-tools li.second, .form-top-right .button, .num span, li'); \ No newline at end of file diff --git a/project/static/js/jqBarGraph.1.1.js b/project/static/js/jqBarGraph.1.1.js new file mode 100644 index 0000000..7822c2b --- /dev/null +++ b/project/static/js/jqBarGraph.1.1.js @@ -0,0 +1,288 @@ +/** + * jqBarGraph - jQuery plugin + * @version: 1.1 (2011/04/03) + * @requires jQuery v1.2.2 or later + * @author Ivan Lazarevic + * Examples and documentation at: http://www.workshop.rs/jqbargraph/ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * @param data: arrayOfData // array of data for your graph + * @param title: false // title of your graph, accept HTML + * @param barSpace: 10 // this is default space between bars in pixels + * @param width: 400 // default width of your graph ghhjgjhg + * @param height: 200 //default height of your graph + * @param color: '#000000' // if you don't send colors for your data this will be default bars color + * @param colors: false // array of colors that will be used for your bars and legends + * @param lbl: '' // if there is no label in your array + * @param sort: false // sort your data before displaying graph, you can sort as 'asc' or 'desc' + * @param position: 'bottom' // position of your bars, can be 'bottom' or 'top'. 'top' doesn't work for multi type + * @param prefix: '' // text that will be shown before every label + * @param postfix: '' // text that will be shown after every label + * @param animate: true // if you don't need animated appereance change to false + * @param speed: 2 // speed of animation in seconds + * @param legendWidth: 100 // width of your legend box + * @param legend: false // if you want legend change to true + * @param legends: false // array for legend. for simple graph type legend will be extracted from labels if you don't set this + * @param type: false // for multi array data default graph type is stacked, you can change to 'multi' for multi bar type + * @param showValues: true // you can use this for multi and stacked type and it will show values of every bar part + * @param showValuesColor: '#fff' // color of font for values + + * @example $('#divForGraph').jqBarGraph({ data: arrayOfData }); + +**/ + +(function($) { + var opts = new Array; + var level = new Array; + + $.fn.jqBarGraph = $.fn.jqbargraph = function(options){ + + init = function(el){ + + opts[el.id] = $.extend({}, $.fn.jqBarGraph.defaults, options); + $(el).css({ 'width': opts[el.id].width, 'height': opts[el.id].height, 'position':'relative', 'text-align':'center' }); + doGraph(el); + + }; + + // sum of array elements + sum = function(ar){ + total = 0; + for(val in ar){ + total += ar[val]; + } + return total.toFixed(2); + }; + + // count max value of array + max = function(ar){ + maxvalue = 0; + for(var val in ar){ + value = ar[val][0]; + if(value instanceof Array) value = sum(value); + if (parseFloat(value) > parseFloat(maxvalue)) maxvalue=value; + } + return maxvalue; + }; + + // max value of multi array + maxMulti = function(ar){ + maxvalue = 0; + maxvalue2 = 0; + + for(var val in ar){ + ar2 = ar[val][0]; + + for(var val2 in ar2){ + if(ar2[val2]>maxvalue2) maxvalue2 = ar2[val2]; + } + + if (maxvalue2>maxvalue) maxvalue=maxvalue2; + } + return maxvalue; + }; + + + doGraph = function(el){ + + arr = opts[el.id]; + data = arr.data; + + //check if array is bad or empty + if(data == undefined) { + $(el).html('There is not enought data for graph'); + return; + } + + //sorting ascending or descending + if(arr.sort == 'asc') data.sort(sortNumberAsc); + if(arr.sort == 'desc') data.sort(sortNumberDesc); + + legend = ''; + prefix = arr.prefix; + postfix = arr.postfix; + space = arr.barSpace; //space between bars + legendWidth = arr.legend ? arr.legendWidth : 0; //width of legend box + fieldWidth = ($(el).width()-legendWidth)/data.length; //width of bar + totalHeight = $(el).height(); //total height of graph box + var leg = new Array(); //legends array + + //max value in data, I use this to calculate height of bar + max = max(data); + colPosition = 0; // for printing colors on simple bar graph + + for(var val in data){ + + valueData = data[val][0]; + if (valueData instanceof Array) + value = sum(valueData); + else + value = valueData; + + lbl = data[val][1]; + color = data[val][2]; + unique = val+el.id; //unique identifier + + if (color == undefined && arr.colors == false) + color = arr.color; + + if (arr.colors && !color){ + colorsCounter = arr.colors.length; + if (colorsCounter == colPosition) colPosition = 0; + color = arr.colors[colPosition]; + colPosition++; + } + + if(arr.type == 'multi') color = 'none'; + + if (lbl == undefined) lbl = arr.lbl; + + out = "
"; + out += "
"+prefix+value+postfix+"
"; + + out += "
"; + + // if there is no legend or exist legends display lbl at the bottom + if(!arr.legend || arr.legends) + out += "
"+lbl+"
"; + out += "
"; + + $(el).append(out); + + //size of bar + totalHeightBar = totalHeight - $('.graphLabel'+el.id).height() - $('.graphValue'+el.id).height(); + fieldHeight = (totalHeightBar*value)/max; + $('#graphField'+unique).css({ + 'left': (fieldWidth)*val, + 'width': fieldWidth-space, + 'margin-left': space}); + + // multi array + if(valueData instanceof Array){ + + if(arr.type=="multi"){ + maxe = maxMulti(data); + totalHeightBar = fieldHeight = totalHeight - $('.graphLabel'+el.id).height(); + $('.graphValue'+el.id).remove(); + } else { + maxe = max; + } + + for (i in valueData){ + heig = totalHeightBar*valueData[i]/maxe; + wid = parseInt((fieldWidth-space)/valueData.length); + sv = ''; // show values + fs = 0; // font size + if (arr.showValues){ + sv = arr.prefix+valueData[i]+arr.postfix; + fs = 12; // font-size is 0 if showValues = false + } + o = "
"+sv+"
"; + $('#graphFieldBar'+unique).prepend(o); + } + } + + if(arr.type=='multi') + $('.subBars'+el.id).css({ 'width': wid, 'position': 'absolute', 'bottom': 0 }); + + //position of bars + if(arr.position == 'bottom') $('.graphField'+el.id).css('bottom',0); + + //creating legend array from lbl if there is no legends param + if(!arr.legends) + leg.push([ color, lbl, el.id, unique ]); + + // animated apearing + if(arr.animate){ + $('#graphFieldBar'+unique).css({ 'height' : 0 }); + $('#graphFieldBar'+unique).animate({'height': fieldHeight},arr.speed*1000); + } else { + $('#graphFieldBar'+unique).css({'height': fieldHeight}); + } + + } + + //creating legend array from legends param + for(var l in arr.legends){ + leg.push([ arr.colors[l], arr.legends[l], el.id, l ]); + } + + createLegend(leg); // create legend from array + + //position of legend + if(arr.legend){ + $(el).append("
"); + $('#legendHolder'+unique).css({ 'width': legendWidth, 'float': 'right', 'text-align' : 'left'}); + $('#legendHolder'+unique).append(legend); + $('.legendBar'+el.id).css({ 'float':'left', 'margin': 3, 'height': 12, 'width': 20, 'font-size': 0}); + } + + //position of title + if(arr.title){ + $(el).wrap("
"); + $('#graphHolder'+unique).prepend(arr.title).css({ 'width' : arr.width+'px', 'text-align' : 'center' }); + } + + }; + + + //creating legend from array + createLegend = function(legendArr){ + legend = ''; + for(var val in legendArr){ + legend += "
"; + legend += "
"; + legend += "
"+legendArr[val][1]+"
"; + legend += "
"; + } + }; + + + this.each ( + function() + { init(this); } + ) + +}; + + // default values + $.fn.jqBarGraph.defaults = { + barSpace: 10, + width: 400, + height: 300, + color: '#000000', + colors: false, + lbl: '', + sort: false, // 'asc' or 'desc' + position: 'bottom', // or 'top' doesn't work for multi type + prefix: '', + postfix: '', + animate: true, + speed: 1.5, + legendWidth: 100, + legend: false, + legends: false, + type: false, // or 'multi' + showValues: true, + showValuesColor: '#fff', + title: false + }; + + + //sorting functions + function sortNumberAsc(a,b){ + if (a[0]b[0]) return 1; + return 0; + } + + function sortNumberDesc(a,b){ + if (a[0]>b[0]) return -1; + if (a[0])[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("