Commit 7cb6bce6 by Őry Máté

Merge branch 'master' into releases

parents e84c01cf f5608fb2
...@@ -5,7 +5,7 @@ jsfiles += one/static/script/util.min.js ...@@ -5,7 +5,7 @@ jsfiles += one/static/script/util.min.js
jsfiles += one/static/script/store.min.js jsfiles += one/static/script/store.min.js
cssfiles += one/static/style/style.css cssfiles += one/static/style/style.css
default: migrate generatestatic collectstatic mo setbranch restart default: migrate generatestatic collectstatic mo restart
pulldef: pull default pulldef: pull default
pull: pull:
...@@ -23,10 +23,6 @@ generatestatic: $(jsfiles) $(cssfiles) ...@@ -23,10 +23,6 @@ generatestatic: $(jsfiles) $(cssfiles)
collectstatic: collectstatic:
./manage.py collectstatic --noinput ./manage.py collectstatic --noinput
setbranch:
sed -i cloud/local_settings.py -e '/RELEASE=/d' || true
echo "RELEASE='`git rev-parse --abbrev-ref HEAD`'" >>cloud/local_settings.py
mo: mo:
for i in */locale/*/*/*.po; do echo -ne "$$i:\t"; msgfmt --statistics $$i;done for i in */locale/*/*/*.po; do echo -ne "$$i:\t"; msgfmt --statistics $$i;done
for i in */; do cd $$i; ls locale &>/dev/null && ../manage.py compilemessages || true; cd ..; done for i in */; do cd $$i; ls locale &>/dev/null && ../manage.py compilemessages || true; cd ..; done
......
from cloud.settings import DEBUG, STAT_DEBUG, RELEASE
from django.core.cache import cache
import subprocess
import json import json
import subprocess
from django.conf import settings
from django.core.cache import cache
def process_debug(req): def process_debug(req):
return {'DEBUG': DEBUG} return {'DEBUG': settings.DEBUG}
def process_stat(req): def process_stat(req):
if STAT_DEBUG: if settings.STAT_DEBUG:
stat = { stat = {
'CPU': { 'CPU': {
'USED_CPU': 10, 'USED_CPU': 10,
...@@ -23,11 +24,11 @@ def process_stat(req): ...@@ -23,11 +24,11 @@ def process_stat(req):
else: else:
stat = cache.get('cloud_stat') stat = cache.get('cloud_stat')
return { return {
'STAT_DEBUG': STAT_DEBUG, 'STAT_DEBUG': settings.STAT_DEBUG,
'cloud_stat': stat, 'cloud_stat': stat,
} }
def process_release(req): def process_release(req):
return { return {
'release': RELEASE, 'release': settings.RELEASE,
} }
# Django settings for cloud project. # coding=utf8
# Django base settings for cloud project.
import os
import subprocess
DEBUG = True from django.core.exceptions import ImproperlyConfigured
TEMPLATE_DEBUG = DEBUG
STAT_DEBUG = True
def get_env_variable(var_name, default=None):
""" Get the environment variable or return exception/default """
try:
return os.environ[var_name]
except KeyError:
if default is None:
error_msg = "Set the %s environment variable" % var_name
raise ImproperlyConfigured(error_msg)
else:
return default
DEBUG = False
TEMPLATE_DEBUG = False
STAT_DEBUG = False
ADMINS = ( ADMINS = (
('IK', 'cloud@cloud.ik.bme.hu'), ('IK', 'cloud@cloud.ik.bme.hu'),
...@@ -13,16 +30,12 @@ MANAGERS = ADMINS ...@@ -13,16 +30,12 @@ MANAGERS = ADMINS
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'ENGINE': 'django.db.backends.mysql',
# 'mysql', 'sqlite3' or 'oracle'. 'NAME': get_env_variable('DJANGO_DB_NAME', 'webadmin'),
'NAME': 'webadmin', # Or path to database file if 'USER': get_env_variable('DJANGO_DB_USER', 'webadmin'),
# using sqlite3. 'PASSWORD': get_env_variable('DJANGO_DB_PASSWORD'),
'USER': 'webadmin', # Not used with sqlite3. 'HOST': get_env_variable('DJANGO_DB_HOST', ''),
'PASSWORD': 'asjklddfjklqjf', # Not used with sqlite3. 'PORT': get_env_variable('DJANGO_DB_PORT', ''),
'HOST': '', # Set to empty string for localhost.
# Not used with sqlite3.
'PORT': '', # Set to empty string for default.
# Not used with sqlite3.
} }
} }
...@@ -73,8 +86,8 @@ STATICFILES_DIRS = ( ...@@ -73,8 +86,8 @@ STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static". # Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows. # Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths. # Don't forget to use absolute paths, not relative paths.
'/opt/webadmin/cloud/one/static', '/opt/webadmin/cloud/one/static',
'/opt/webadmin/cloud/cloud/static', '/opt/webadmin/cloud/cloud/static',
) )
# List of finder classes that know how to find static files in # List of finder classes that know how to find static files in
...@@ -82,17 +95,17 @@ STATICFILES_DIRS = ( ...@@ -82,17 +95,17 @@ STATICFILES_DIRS = (
STATICFILES_FINDERS = ( STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder', # 'django.contrib.staticfiles.finders.DefaultStorageFinder',
) )
# Make this unique, and don't share it with anybody. # Make this unique, and don't share it with anybody.
SECRET_KEY = 'sx%4b1oa2)mn%##6+e1+25g@r8ht(cqk(nko^fr66w&26f22ba' SECRET_KEY = get_env_variable('DJANGO_SECRET_KEY')
# List of callables that know how to import templates from various sources. # List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = ( TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader', 'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader', 'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader', # 'django.template.loaders.eggs.Loader',
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
...@@ -125,8 +138,8 @@ TEMPLATE_CONTEXT_PROCESSORS = ( ...@@ -125,8 +138,8 @@ TEMPLATE_CONTEXT_PROCESSORS = (
) )
TEMPLATE_DIRS = ( TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Put strings here, like "/home/html/django_templates" or
# Always use forward slashes, even on Windows. # "C:/www/django/templates". Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths. # Don't forget to use absolute paths, not relative paths.
) )
...@@ -154,7 +167,7 @@ INSTALLED_APPS = ( ...@@ -154,7 +167,7 @@ INSTALLED_APPS = (
# the site admins on every HTTP 500 error when DEBUG=False. # the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for # See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration. # more details on how to customize your logging configuration.
from logging.handlers import SysLogHandler # from logging.handlers import SysLogHandler
LOGGING = { LOGGING = {
'version': 1, 'version': 1,
...@@ -170,8 +183,8 @@ LOGGING = { ...@@ -170,8 +183,8 @@ LOGGING = {
'filters': ['require_debug_false'], 'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler' 'class': 'django.utils.log.AdminEmailHandler'
}, },
'syslog':{ 'syslog': {
'level':'WARNING', 'level': 'WARNING',
'class': 'logging.handlers.SysLogHandler', 'class': 'logging.handlers.SysLogHandler',
'address': '/dev/log', 'address': '/dev/log',
}, },
...@@ -189,12 +202,18 @@ LOGGING = { ...@@ -189,12 +202,18 @@ LOGGING = {
}, },
} }
} }
LOGIN_URL="/login" LOGIN_URL = "/login"
AUTH_PROFILE_MODULE = 'school.Person' AUTH_PROFILE_MODULE = 'school.Person'
import djcelery import djcelery
djcelery.setup_loader() djcelery.setup_loader()
BROKER_URL = 'amqp://nyuszi:teszt@localhost:5672/django'
CELERY_CACHE_BACKEND = "default"
CELERY_RESULT_BACKEND = "amqp"
CELERY_TASK_RESULT_EXPIRES = 3600
BROKER_URL = get_env_variable(
'DJANGO_BROKER_URL', 'amqp://nyuszi:teszt@localhost:5672/django')
CELERY_ROUTES = { CELERY_ROUTES = {
'firewall.tasks.ReloadTask': {'queue': 'local'}, 'firewall.tasks.ReloadTask': {'queue': 'local'},
'firewall.tasks.reload_dns_task': {'queue': 'dns'}, 'firewall.tasks.reload_dns_task': {'queue': 'dns'},
...@@ -203,7 +222,14 @@ CELERY_ROUTES = { ...@@ -203,7 +222,14 @@ CELERY_ROUTES = {
'firewall.tasks.reload_blacklist_task': {'queue': 'firewall'}, 'firewall.tasks.reload_blacklist_task': {'queue': 'firewall'},
'firewall.tasks.Periodic': {'queue': 'local'}, 'firewall.tasks.Periodic': {'queue': 'local'},
'one.tasks.SendMailTask': {'queue': 'local'}, 'one.tasks.SendMailTask': {'queue': 'local'},
'one.tasks.UpdateInstanceStateTask': {'queue': 'local'} 'one.tasks.UpdateInstanceStateTask': {'queue': 'local'},
'one.tasks.UpdateDiskTask': {'queue': 'opennebula'},
'one.tasks.UpdateNetworkTask': {'queue': 'opennebula'},
'one.tasks.ChangeInstanceStateTask': {'queue': 'opennebula'},
'one.tasks.SaveAsTask': {'queue': 'opennebula'},
'one.tasks.CreateInstanceTask': {'queue': 'opennebula'},
'one.tasks.DeleteInstanceTask': {'queue': 'opennebula'},
} }
CACHES = { CACHES = {
...@@ -214,7 +240,7 @@ CACHES = { ...@@ -214,7 +240,7 @@ CACHES = {
} }
store_settings = { STORE_SETTINGS = {
"basic_auth": "True", "basic_auth": "True",
"verify_ssl": "False", "verify_ssl": "False",
"ssl_auth": "False", "ssl_auth": "False",
...@@ -226,7 +252,7 @@ store_settings = { ...@@ -226,7 +252,7 @@ store_settings = {
"store_public": "store.ik.bme.hu", "store_public": "store.ik.bme.hu",
} }
firewall_settings = { FIREWALL_SETTINGS = {
"default_vlangroup": "publikus", "default_vlangroup": "publikus",
"reload_sleep": "10", "reload_sleep": "10",
"dns_hostname": "dns1.ik.bme.hu", "dns_hostname": "dns1.ik.bme.hu",
...@@ -234,14 +260,12 @@ firewall_settings = { ...@@ -234,14 +260,12 @@ firewall_settings = {
"dns_ip": "152.66.243.60", "dns_ip": "152.66.243.60",
"dns_ttl": "300", "dns_ttl": "300",
} }
SITE_NAME = "IK Cloud"
EMAIL_HOST='152.66.243.92' # giccero ipv4 DEFAULT_FROM_EMAIL = "noreply@cloud.ik.bme.hu"
CLOUD_URL='https://cloud.ik.bme.hu/' DELETE_VM = False
RELEASE='master' EMAIL_HOST = '152.66.243.92' # giccero ipv4
CLOUD_URL = 'https://cloud.ik.bme.hu/'
try: RELEASE = subprocess.check_output(
from cloud.local_settings import * ['git', 'rev-parse', '--symbolic-full-name', '--abbrev-ref', 'HEAD'])
except:
pass
# vim: et sw=4 ai fenc=utf8 smarttab : # vim: et sw=4 ai fenc=utf8 smarttab :
# coding=utf8
# Django development settings for cloud project.
from .base import *
DEBUG = True
TEMPLATE_DEBUG = DEBUG
EMAIL_HOST = "localhost"
EMAIL_PORT = 1025
ADMINS = (
('Ory, Mate', 'orymate@localhost'),
)
MANAGERS = (
('Ory Mate', 'maat@localhost'),
)
INSTALLED_APPS += ("debug_toolbar", )
MIDDLEWARE_CLASSES += ("debug_toolbar.middleware.DebugToolbarMiddleware", )
# coding=utf8
# Django production settings for cloud project.
from .base import *
DEBUG = False
TEMPLATE_DEBUG = DEBUG
from django.contrib import auth from django.contrib import auth
from firewall import models from firewall import models
import os import os
from cloud.settings import firewall_settings as settings import django.conf
import subprocess import subprocess
import re import re
...@@ -10,6 +11,7 @@ from datetime import datetime, timedelta ...@@ -10,6 +11,7 @@ from datetime import datetime, timedelta
from django.db.models import Q from django.db.models import Q
settings = django.conf.settings.FIREWALL_SETTINGS
class Firewall: class Firewall:
IPV6=False IPV6=False
RULES = None RULES = None
......
...@@ -7,11 +7,12 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -7,11 +7,12 @@ from django.utils.translation import ugettext_lazy as _
from firewall.fields import * from firewall.fields import *
from south.modelsinspector import add_introspection_rules from south.modelsinspector import add_introspection_rules
from django.core.validators import MinValueValidator, MaxValueValidator from django.core.validators import MinValueValidator, MaxValueValidator
from cloud.settings import firewall_settings as settings import django.conf
from django.db.models.signals import post_save from django.db.models.signals import post_save
import re import re
import random import random
settings = django.conf.settings.FIREWALL_SETTINGS
class Rule(models.Model): class Rule(models.Model):
CHOICES_type = (('host', 'host'), ('firewall', 'firewall'), CHOICES_type = (('host', 'host'), ('firewall', 'firewall'),
('vlan', 'vlan')) ('vlan', 'vlan'))
......
...@@ -4,7 +4,9 @@ from django.core.cache import cache ...@@ -4,7 +4,9 @@ from django.core.cache import cache
import os import os
import time import time
from firewall.fw import * from firewall.fw import *
from cloud.settings import firewall_settings as settings import django.conf
settings = django.conf.settings.FIREWALL_SETTINGS
@celery.task @celery.task
def reload_dns_task(data): def reload_dns_task(data):
......
from django.shortcuts import render_to_response
from django.http import HttpResponse
from firewall.models import *
from firewall.fw import *
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from django.db import IntegrityError
from tasks import *
from celery.task.control import inspect
from django.utils.translation import ugettext_lazy as _
from django.template.loader import render_to_string
from cloud.settings import CLOUD_URL as url
from django.utils import translation
import re
import base64 import base64
import datetime
import json import json
import re
import sys import sys
import datetime from django.conf import settings
from django.db import IntegrityError
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template.loader import render_to_string
from django.utils import translation
from django.utils.timezone import utc from django.utils.timezone import utc
from django.utils.translation import ugettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from celery.task.control import inspect
from tasks import *
from firewall.fw import *
from firewall.models import *
from one.tasks import SendMailTask from one.tasks import SendMailTask
def reload_firewall(request): def reload_firewall(request):
...@@ -52,7 +53,11 @@ def firewall_api(request): ...@@ -52,7 +53,11 @@ def firewall_api(request):
user = obj.host.owner user = obj.host.owner
lang = user.person_set.all()[0].language lang = user.person_set.all()[0].language
translation.activate(lang) translation.activate(lang)
msg = render_to_string('mails/notification-ban-now.txt', { 'user': user, 'bl': obj, 'instance:': obj.host.instance_set.get(), 'url': url} ) msg = render_to_string('mails/notification-ban-now.txt',
{ 'user': user,
'bl': obj,
'instance:': obj.host.instance_set.get(),
'url': settings.CLOUD_URL} )
SendMailTask.delay(to=obj.host.owner.email, subject='[IK Cloud] %s' % obj.host.instance_set.get().name, msg=msg, sender=u'cloud@ik.bme.hu') SendMailTask.delay(to=obj.host.owner.email, subject='[IK Cloud] %s' % obj.host.instance_set.get().name, msg=msg, sender=u'cloud@ik.bme.hu')
except (Host.DoesNotExist, ValidationError, IntegrityError, AttributeError): except (Host.DoesNotExist, ValidationError, IntegrityError, AttributeError):
pass pass
......
#!/usr/bin/env python
import subprocess
from celery import Celery, task
import time, re
import socket
import sys
import tempfile, os, stat, re, base64, struct, logging
from celery.contrib import rdb
BROKER_URL = 'amqp://nyuszi:teszt@localhost:5672/django'
try:
from local_settings import *
except:
pass
celery = Celery('tasks', broker=BROKER_URL, backend=BROKER_URL)
celery.conf.update(
CELERY_TASK_RESULT_EXPIRES=3600,
)
def update_vm(one_id, template):
out = ""
with tempfile.NamedTemporaryFile(delete=False) as f:
os.chmod(f.name, stat.S_IRUSR|stat.S_IWUSR|stat.S_IRGRP|stat.S_IROTH)
tpl = u'''
<COMPUTE>
<ID>%(id)d</ID>
%(template)s
</COMPUTE>''' % {
"id": one_id,
"template": template
}
f.write(tpl)
f.close()
proc = subprocess.Popen(["/opt/occi.sh", "compute", "update",
f.name], stdout=subprocess.PIPE)
try:
(out, err) = proc.communicate()
except:
pass
os.unlink(f.name)
@task(name="one.tasks.CreateInstanceTask")
def t(name, instance_type, disk_id, network_id, ctx):
out = ''
f2 = tempfile.NamedTemporaryFile(delete=False)
f2.close()
with tempfile.NamedTemporaryFile(delete=False) as f:
os.chmod(f.name, stat.S_IRUSR|stat.S_IWUSR|stat.S_IRGRP|stat.S_IROTH)
tpl = u"""
<COMPUTE>
<NAME>%(name)s</NAME>
<INSTANCE_TYPE href="http://www.opennebula.org/instance_type/%(instance)s"/>
<DISK>
<STORAGE href="http://www.opennebula.org/storage/%(disk)d"/>
</DISK>
<NIC>
<NETWORK href="http://www.opennebula.org/network/%(net)d"/>
</NIC>
<CONTEXT>
%(context)s
</CONTEXT>
</COMPUTE>""" % {
"name": name,
"instance": instance_type,
"disk": disk_id,
"net": network_id,
"context": ctx,
}
f.write(tpl)
f.close()
proc = subprocess.Popen(["/opt/occi.sh compute creatE %s > %s" %
( f.name, f2.name )], shell=True)
try:
proc.communicate()
except:
pass
with open(f2.name, 'r') as f3:
out = f3.read()
os.unlink(f.name)
os.unlink(f2.name)
from xml.dom.minidom import parse, parseString
try:
x = parseString(out)
return {
'one_id': int(x.getElementsByTagName("ID")[0].childNodes[0].nodeValue),
'interfaces': [
{
'ip': x.getElementsByTagName("IP")[0].childNodes[0].nodeValue,
'mac': x.getElementsByTagName("MAC")[0].childNodes[0].nodeValue,
},
],
}
except:
pass
@task(name="one.tasks.ChangeInstanceStateTask")
def t(one_id, new_state):
update_vm(one_id, '<STATE>%s</STATE>' % (new_state, ))
@task(name="one.tasks.SaveAsTask")
def t(one_id, new_img):
update_vm(one_id, '<DISK id="0"><SAVE_AS name="%s"/></DISK>' % new_img)
@task(name="one.tasks.UpdateDiskTask")
def t():
f = tempfile.NamedTemporaryFile(delete=False)
f.close()
out=''
proc = subprocess.Popen(["/opt/occi.sh storage list > %s" % f.name],
shell=True)
try:
(out, err) = proc.communicate()
except:
pass
from xml.dom.minidom import parse, parseString
try:
with open(f.name, 'r') as f2:
out = f2.read()
x = parseString(out)
return [ {
'id': int(d.getAttributeNode('href').nodeValue.split('/')[-1]),
'name': d.getAttributeNode('name').nodeValue,
} for d in x.getElementsByTagName("STORAGE")
]
except:
pass
os.unlink(f)
@task(name="one.tasks.UpdateNetworkTask")
def t():
f = tempfile.NamedTemporaryFile(delete=False)
f.close()
out=''
proc = subprocess.Popen(["/opt/occi.sh network list > %s" % f.name],
shell=True)
try:
(out, err) = proc.communicate()
except:
pass
from xml.dom.minidom import parse, parseString
try:
with open(f.name, 'r') as f2:
out = f2.read()
x = parseString(out)
return [ {
'id': int(d.getAttributeNode('href').nodeValue.split('/')[-1]),
'name': d.getAttributeNode('name').nodeValue,
} for d in x.getElementsByTagName("NETWORK")
]
except:
pass
os.unlink(f)
@task(name="one.tasks.DeleteInstanceTask")
def t(one_id):
proc = subprocess.Popen(["/opt/occi.sh", "compute", "delete",
"%d" % one_id], stdout=subprocess.PIPE)
try:
(out, err) = proc.communicate()
except:
pass
def update_state(one_id):
"""Get and update VM state from OpenNebula."""
proc = subprocess.Popen(["/opt/occi.sh", "compute", "show",
"%d" % one_id], stdout=subprocess.PIPE)
(out, err) = proc.communicate()
state = 'UNKNOWN'
try:
if(len(sys.argv) == 3 and sys.argv[2] == 'UNKNOWN'):
raise Exception(':(')
from xml.dom.minidom import parse, parseString
x = parseString(out)
state = x.getElementsByTagName("STATE")[0].childNodes[0].nodeValue
except:
state = 'UNKNOWN'
print state
celery.send_task('one.tasks.UpdateInstanceStateTask', [one_id, state],
queue='local')
if __name__ == "__main__":
update_state(int(sys.argv[1]))
#!/usr/bin/env python
from celery import Celery, task
import subprocess
import time, re
import socket
import sys
BROKER_URL = 'amqp://nyuszi:teszt@localhost:5672/django'
try:
from local_settings import *
except:
pass
CELERY_CREATE_MISSING_QUEUES=True
celery = Celery('tasks', broker=BROKER_URL)
def main(argv):
celery.send_task('one.tasks.UpdateInstanceStateTask', [ int(sys.argv[1]),
], queue='local')
if __name__ == "__main__":
main(sys.argv)
...@@ -5,5 +5,8 @@ stop on runlevel [!2345] ...@@ -5,5 +5,8 @@ stop on runlevel [!2345]
respawn respawn
respawn limit 30 30 respawn limit 30 30
env DJANGO_SETTINGS_MODULE=cloud.settings.dev
env DJANGO_DB_PASSWORD=asjklddfjklqjf
env DJANGO_SECRET_KEY=asjklddfjklqjfasjklddfjklqjfasjklddfjklqjf
exec sudo -u cloud /opt/webadmin/cloud/manage.py runserver 0.0.0.0:8080 exec sudo -u cloud /opt/webadmin/cloud/manage.py runserver 0.0.0.0:8080
...@@ -43,7 +43,7 @@ cd /opt/webadmin/ ...@@ -43,7 +43,7 @@ cd /opt/webadmin/
mv cloud cloud.$(date +%s) || true mv cloud cloud.$(date +%s) || true
git clone 'ssh://git@giccero.cloud.ik.bme.hu/cloud' git clone 'git@git.cloud.ik.bme.hu:circle/cloud.git'
cd cloud cd cloud
source miscellaneous/devenv/nextinit.sh source miscellaneous/devenv/nextinit.sh
......
#!/bin/bash #!/bin/bash
sudo pip install django_extensions sudo pip install django_extensions
sudo pip install django-debug-toolbar
for i in cloudstore toplist django for i in cloudstore toplist django
do do
sudo stop $i || true sudo stop $i || true
done done
sudo apt-get install rabbitmq-server gettext memcached sudo tee /etc/sudoers.d/djangokeep <<A
Defaults env_keep += DJANGO_DB_PASSWORD
Defaults env_keep += DJANGO_SECRET_KEY
Defaults env_keep += DJANGO_SETTINGS_MODULE
A
sudo chmod 0440 /etc/sudoers.d/djangokeep
sudo apt-get install rabbitmq-server gettext memcached nodejs
sudo rabbitmqctl delete_user guest || true sudo rabbitmqctl delete_user guest || true
sudo rabbitmqctl add_user nyuszi teszt || true sudo rabbitmqctl add_user nyuszi teszt || true
sudo rabbitmqctl add_vhost django || true sudo rabbitmqctl add_vhost django || true
...@@ -14,6 +22,9 @@ sudo rabbitmqctl set_permissions -p django nyuszi '.*' '.*' '.*' || true ...@@ -14,6 +22,9 @@ sudo rabbitmqctl set_permissions -p django nyuszi '.*' '.*' '.*' || true
sudo pip install python-memcached sudo pip install python-memcached
sudo npm install -g less
sudo npm install -g uglify-js@1
sudo cp /opt/webadmin/cloud/miscellaneous/devenv/boot_url.py /opt/ sudo cp /opt/webadmin/cloud/miscellaneous/devenv/boot_url.py /opt/
#Set up store server #Set up store server
......
\documentclass[12pt,a4paper]{article}
\title{Harnessing Wasted Computing Power for Scientific Computing}
\author{S\'andor Guba, M\'at\'e \H{O}ry and Imre Szeber\'enyi\\
Budapest University of Technology and Economics, %\\
%Magyar Tud\'osok k\"or\'utja 2, H-1117 Budapest,
Hungary}
\date{\empty}
\begin{document}
\maketitle
Nowadays more and more general purpose workstations installed in a student
laboratory have built in multi-core CPU and graphics card providing significant
computing power. In most cases the utilization of these resources is low, and
limited to lecture hours. The concept of utility computing plays an important
role in nowadays technological development. As part of utility computing, cloud
computing offers greater flexibility and responsiveness to ICT users at lower
cost.
In  this paper, we introduce a cloud management system which enables the
simultaneous use of both dedicated resources and opportunistic environment. All
the free workstations (powered or not) are automatically added to a resource
pool, and can be used like ordinary cloud resources. Researchers can launch
various virtualized software appliances. Our solution leverages the advantages
of HTCondor and OpenNebula systems.
Modern graphics processing units (GPUs) with many-core architectures have
emerged as general-purpose parallel computing platforms that can dramatically
accelerate  scientific applications used for various simulations. Our business
model harnesses computing power of GPUs as well, using the needed amount of
unused machines. This makes the infrastructure flexible and power efficient.
Our pilot infrastructure consist of a high performance cluster and 28
workstations with dual-core CPUs and dedicated graphics cards. Altogether we
can use 10,752 CUDA cores through the network.
\end{document}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="arch.svg.2013_03_16_15_07_35.0.2.svg"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-22.959131"
inkscape:cy="751.8032"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1364"
inkscape:window-height="749"
inkscape:window-x="0"
inkscape:window-y="17"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true">
<sodipodi:guide
orientation="-0.70710678,0.70710678"
position="0.5,716.5"
id="guide3524" />
<sodipodi:guide
orientation="0.70710678,0.70710678"
position="227.5,673.5"
id="guide3526" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="1. réteg"
inkscape:groupmode="layer"
id="layer1">
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3575"
style="fill:none;stroke:#ffff00;stroke-width:0.49851683;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(0.64348983,-3.7565901,3.7565901,0.64348983,-329.36385,745.82088)" />
<path
transform="matrix(1.5701332,3.6885219,3.6885219,-1.5701332,-461.05784,-167.49813)"
sodipodi:type="arc"
style="fill:none;stroke:#ffff00;stroke-width:0.47395673;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3588"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="fill:none;stroke:#003366;stroke-width:0.67295331;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3562"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-0.62861196,2.7525075,-2.7525075,-0.62861196,424.93767,-110.28257)" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="opacity:0.1;fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.53900003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3503"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="118.39488"
sodipodi:ry="118.39488"
d="m 266.89488,86.862183 a 118.39488,118.39488 0 1 1 -236.789762,0 118.39488,118.39488 0 1 1 236.789762,0 z"
transform="matrix(0.29589859,1.1985833,1.1985833,-0.29589859,-55.552506,91.57496)" />
<path
transform="matrix(2.6384034,0,0,2.6384034,296.33723,-76.10009)"
sodipodi:type="arc"
style="fill:#98fc66;fill-opacity:1;stroke:#003366;stroke-width:0.72013247;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3309"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 128.25,51.788154 a 40.5,40.5 0 0 1 40.5,1e-6 L 148.5,86.862183 z"
sodipodi:start="4.1887902"
sodipodi:end="5.2359878" />
<text
xml:space="preserve"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
x="-500"
y="90.362183"
id="text3003"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3005"
x="-500"
y="90.362183" /></text>
<flowRoot
xml:space="preserve"
id="flowRoot3007"
style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:TitilliumTitle20;font-style:normal;font-weight:300;font-size:40px;line-height:125%;letter-spacing:0px;word-spacing:0px;-inkscape-font-specification:TitilliumTitle20 Light;font-stretch:normal;font-variant:normal"><flowRegion
id="flowRegion3009"><rect
id="rect3011"
width="215"
height="193"
x="-191"
y="123.36218" /></flowRegion><flowPara
id="flowPara3013" /></flowRoot> <text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumTitle20;-inkscape-font-specification:TitilliumTitle20 Light"
x="-260.08865"
y="123.72603"
id="text3025"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3027"
x="-260.08865"
y="123.72603"
style="font-size:20px">Python</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumTitle20;-inkscape-font-specification:TitilliumTitle20 Light"
x="-27.31016"
y="553.54175"
id="text3073"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3075"
x="-27.31016"
y="553.54175"
style="font-size:20px">OpenFlow</tspan></text>
<rect
style="fill:#aaccee;fill-opacity:1;stroke:none"
id="rect2985"
width="400"
height="300"
x="462.05585"
y="147.2655"
ry="10"
rx="10" />
<rect
ry="10"
rx="10"
y="224.22183"
x="524.75195"
height="23.535534"
width="103.92537"
id="rect3135"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
sodipodi:linespacing="125%"
id="text3029"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:transform-center-x="0.77156604"
inkscape:transform-center-y="-87.550871"
transform="translate(-305.61879,-73.937558)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
xlink:href="#path3105"
id="textPath3108"><tspan
id="tspan3031"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">Django</tspan></textPath></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3125"
width="118.28074"
height="23.53553"
x="473.9794"
y="285.96805"
rx="10"
ry="10" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3157"
width="95.653282"
height="23.535534"
x="-382.23566"
y="594.3302"
rx="10"
ry="10"
transform="matrix(0,-1,1,0,0,0)" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-377.53323"
y="613.20801"
id="text3045"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
id="tspan3047"
x="-377.53323"
y="613.20801"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">CondorHT</tspan></text>
<rect
ry="10"
rx="10"
y="312.56583"
x="522.96362"
height="23.535534"
width="68.783226"
id="rect3123"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
sodipodi:linespacing="125%"
id="text3049"
y="331.43359"
x="532.36395"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="331.43359"
x="532.36395"
id="tspan3051"
sodipodi:role="line">libvirt</tspan></text>
<rect
ry="10"
rx="10"
y="337.15509"
x="522.48718"
height="23.535534"
width="54.641087"
id="rect3159"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="529.78992"
y="355.92285"
id="text3053"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3055"
x="529.78992"
y="355.92285"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">KVM</tspan></text>
<rect
ry="10"
rx="10"
y="524.86932"
x="-421.75073"
height="23.535534"
width="55.348198"
id="rect3139"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
transform="matrix(0,-1,1,0,0,0)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3141"
width="53.933983"
height="23.535534"
x="-421.00943"
y="552.68011"
rx="10"
ry="10"
transform="matrix(0,-1,1,0,0,0)" />
<rect
ry="10"
rx="10"
y="554.40509"
x="-498.47458"
height="23.535534"
width="70.904533"
id="rect3143"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
transform="matrix(0,-1,1,0,0,0)" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-488.52621"
y="573.1629"
id="text3065"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
id="tspan3067"
x="-488.52621"
y="573.1629"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">CUDA</tspan></text>
<rect
ry="10"
rx="10"
y="491.69034"
x="-443.15839"
height="23.535534"
width="127.47309"
id="rect3127"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
transform="matrix(0,-1,1,0,0,0)" />
<text
sodipodi:linespacing="125%"
id="text3069"
y="-95.902969"
x="-432.26517"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="-95.902969"
x="-432.26517"
id="tspan3071"
sodipodi:role="line">Open vSwitch</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3145"
width="68.076118"
height="23.535534"
x="635.73944"
y="338.97281"
rx="10"
ry="10" />
<text
sodipodi:linespacing="125%"
id="text3077"
y="464.9064"
x="-39.318756"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="464.9064"
x="-39.318756"
id="tspan3079"
sodipodi:role="line">QCOW</tspan></text>
<rect
ry="10"
rx="10"
y="338.39584"
x="709.5022"
height="23.53554"
width="52.51984"
id="rect3151"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="34.75946"
y="465.61945"
id="text3081"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3083"
x="34.75946"
y="465.61945"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">LVM</tspan></text>
<rect
ry="10"
rx="10"
y="366.65564"
x="638.09924"
height="23.535534"
width="55.348198"
id="rect3147"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
sodipodi:linespacing="125%"
id="text3085"
y="493.91925"
x="-34.664795"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="493.91925"
x="-34.664795"
id="tspan3087"
sodipodi:role="line">NFS</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3129"
width="126.4314"
height="24.535534"
x="639.87427"
y="396.68478"
rx="10"
ry="10" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-22.625824"
y="524.1084"
id="text3089"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3091"
x="-22.625824"
y="524.1084"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">InfiniBand</tspan></text>
<rect
ry="10"
rx="10"
y="787.98724"
x="-251.5313"
height="23.535534"
width="82.925362"
id="rect2993"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
transform="matrix(0,-1,1,0,0,0)" />
<text
sodipodi:linespacing="125%"
id="text3093"
y="-168.04498"
x="-350.60846"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="-168.04498"
x="-350.60846"
sodipodi:role="line"
id="tspan3109">Netfilter</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3153"
width="82.925362"
height="23.535534"
x="-251.5313"
y="814.52277"
rx="10"
ry="10"
transform="matrix(0,-1,1,0,0,0)" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-345.77847"
y="-143.70947"
id="text3097"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3099"
x="-345.77847"
y="-143.70947"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">tinydns</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3121"
width="93.531967"
height="23.535534"
x="-251.5313"
y="761.45166"
rx="10"
ry="10"
transform="matrix(0,-1,1,0,0,0)" />
<text
sodipodi:linespacing="125%"
id="text3101"
y="-114.25905"
x="-201.36554"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="-114.25905"
x="-201.36554"
id="tspan3103"
sodipodi:role="line">Dnsmasq</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3149"
width="70.197296"
height="23.535534"
x="695.56238"
y="367.8338"
rx="10"
ry="10" />
<text
sodipodi:linespacing="125%"
id="text3105"
y="495.07742"
x="27.707764"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="495.07742"
x="27.707764"
id="tspan3107"
sodipodi:role="line">iSCSI</tspan></text>
<rect
ry="10"
rx="10"
y="256.96805"
x="506.9794"
height="23.53553"
width="81.280739"
id="rect3276"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="527.51776"
y="273.73581"
id="text3278"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3280"
x="527.51776"
y="273.73581"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">OCCI</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-138.59293"
y="128.88074"
id="text3112"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3114"
x="-138.59293"
y="128.88074" /></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-304"
y="239.36218"
id="text3142"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3144"
x="-304"
y="239.36218">networking</tspan></text>
<text
sodipodi:linespacing="125%"
id="text3146"
y="476.81802"
x="108"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
y="476.81802"
x="108"
id="tspan3148"
sodipodi:role="line">storage</tspan></text>
<text
transform="matrix(0.82322794,0.56771099,-0.56771099,0.82322794,91.68181,-166.26247)"
inkscape:transform-center-y="-72.190452"
inkscape:transform-center-x="-38.782436"
sodipodi:linespacing="125%"
id="text3162"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
id="textPath3164"
xlink:href="#path3292"
style="font-weight:bold">libvirt</textPath></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3179"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-38.782436"
inkscape:transform-center-y="-72.190452"
transform="matrix(0.82322794,0.56771099,-0.56771099,0.82322794,25.00414,-172.26426)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
style="font-weight:bold"
xlink:href="#path3292"
id="textPath3181">kvm</textPath></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3187"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-38.782436"
inkscape:transform-center-y="-72.190452"
transform="matrix(0.82322794,0.56771099,-0.56771099,0.82322794,223.12903,-13.635057)"><textPath
style="font-weight:bold"
xlink:href="#path3292"
id="textPath3189" /></text>
<text
sodipodi:linespacing="125%"
id="text3061"
y="30.891037"
x="107.64305"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="30.891037"
x="107.64305"
id="tspan3063"
sodipodi:role="line">VT-d</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3191"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-38.782436"
inkscape:transform-center-y="-72.190452"
transform="matrix(0.82322794,0.56771099,-0.56771099,0.82322794,199.68181,-226.26247)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
style="font-weight:bold"
xlink:href="#path3292"
id="textPath3193">HTCondor</textPath></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-12.837537"
y="88.802063"
id="text3195"
sodipodi:linespacing="125%"
transform="matrix(0.56708663,0.82365815,-0.82365815,0.56708663,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3197"
x="-12.837537"
y="88.802063"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">CUDA</tspan></text>
<path
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3238"
style="fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.76191127;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-0.73806068,2.3820051,2.3820051,0.73806068,-4.8041455,-173.97514)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3210"
style="opacity:0.1;fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.85499996;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-1.1871526,-1.8785474,1.8785474,-1.1871526,105.61742,625.94513)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(4.132293,0,0,4.132293,-521.1455,-115.0778)"
sodipodi:type="arc"
style="fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.45979312;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3150"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3132"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="M 189,86.862183 A 40.5,40.5 0 0 1 131.38396,123.56765 L 148.5,86.862183 z"
sodipodi:start="0"
sodipodi:end="2.0071286"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3430"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.517963"
sodipodi:ry="40.517963"
d="M 189.01796,86.862183 A 40.517963,40.517963 0 0 1 144.76155,127.20731 L 148.5,86.862183 z"
sodipodi:start="0"
sodipodi:end="1.6631942"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:end="1.4741804"
sodipodi:start="0"
d="M 189.01796,86.862183 A 40.517963,40.517963 0 0 1 152.40859,127.19118 L 148.5,86.862183 z"
sodipodi:ry="40.517963"
sodipodi:rx="40.517963"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3446"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3452"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.517963"
sodipodi:ry="40.517963"
d="M 189.01796,86.862183 A 40.517963,40.517963 0 0 1 152.83858,127.14719 L 148.5,86.862183 z"
sodipodi:start="0"
sodipodi:end="1.4635127"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3428"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 137.55176,125.85431 a 40.5,40.5 0 0 1 -6.3095,-2.35307 L 148.5,86.862183 z"
sodipodi:start="1.8445288"
sodipodi:end="2.0109926"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="M 128.25,121.93621 A 40.5,40.5 0 0 1 125.27015,53.686526 L 148.5,86.862183 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3134"
style="fill:#ffff99;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:start="2.0943951"
sodipodi:end="4.1015237"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:end="0.90791653"
sodipodi:start="0"
d="M 183.21429,86.862183 A 34.714287,34.714287 0 0 1 169.8628,114.22479 L 148.5,86.862183 z"
sodipodi:ry="34.714287"
sodipodi:rx="34.714287"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3426"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)" />
<path
sodipodi:type="arc"
style="opacity:0.1;fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.25121951;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3128"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-1.5185185,0,0,1.5185185,318,111.96035)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:type="arc"
style="fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.57088006;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3292"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-0.73337337,-0.96181362,0.96181362,-0.73337337,117.86071,450.39391)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
style="fill:none;stroke:none"
d="m 63.931925,164.86937 c 43.626515,-15.77772 91.783175,6.79821 107.560895,50.42473 15.77771,43.62652 -6.79821,91.78318 -50.42473,107.5609 C 77.44156,338.63271 29.284905,316.05678 13.507191,272.43026 -2.2705227,228.80374 20.305397,180.64708 63.931925,164.86937 z"
id="path3105"
inkscape:connector-curvature="0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="M 101.99324,116.32472 C 76.546217,116.36932 20.156751,150.4825 -0.78122293,192.72721 L 92.5,243.875 l 98.34375,40.09375 c 6.71151,-18.08233 19.80687,-28.15336 29.65625,-51.3125 L 242.4375,230.75 c -1.91539,-21.89294 -8.60546,-43.09273 -19.59375,-62.125 -27.92274,-48.3636 -68.74469,-52.39166 -120.85051,-52.30028 z"
id="path3136"
sodipodi:nodetypes="scccccss"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(2.6295998,0,0,2.6295998,-297.99557,15.449403)"
sodipodi:type="arc"
style="fill:#aaccee;fill-opacity:1;stroke:#003366;stroke-width:0.7225433;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3199"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:transform-center-x="-4.0352443"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(1.2839507,0,0,1.271605,-96.66667,135.4078)"
sodipodi:type="arc"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:1.48697376;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3298"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="M 189,86.862183 A 40.5,40.5 0 1 1 117.86592,60.370613"
sodipodi:start="0"
sodipodi:end="3.8546018"
sodipodi:open="true"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:end="1.4608094"
sodipodi:start="0.90588138"
d="m 173.49927,118.74858 a 40.517967,40.517967 0 0 1 -20.5518,8.38674 L 148.5,86.862183 z"
sodipodi:ry="40.517967"
sodipodi:rx="40.517967"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3495"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3444"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="34.714287"
sodipodi:ry="34.714287"
d="m 169.91844,114.18126 a 34.714287,34.714287 0 0 1 -17.60802,7.18545 L 148.5,86.862183 z"
sodipodi:start="0.90588138"
sodipodi:end="1.4608094"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
style="fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:1.9000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="M 91.25 157.875 C 34.226598 157.875 -12 201.63916 -12 255.625 C -12 260.0259 -11.688946 264.34688 -11.09375 268.59375 C 0.21430708 314.74849 42.485411 349.27586 93.21875 350.34375 C 93.354234 350.34285 93.489637 350.34515 93.625 350.34375 C 132.63112 349.93946 166.59371 328.57515 184.8125 296.96875 C 184.82897 296.93542 184.85857 296.90835 184.875 296.875 C 191.04736 284.34712 194.5 270.36269 194.5 255.625 C 194.5 201.63916 148.27341 157.875 91.25 157.875 z "
id="path3201"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3294"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:1.07622373;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-0.72762529,-1.6085123,1.6085123,-0.72762529,60.83346,545.92938)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
sodipodi:linespacing="125%"
id="text3041"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
transform="matrix(0.99970601,-0.02424632,0.02424632,0.99970601,-3.8173792,2.0756822)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3210"
id="textPath3212"><tspan
id="tspan3043"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
dx="10.5">OpenNebula</tspan></textPath></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3033"
sodipodi:linespacing="125%"
inkscape:transform-center-x="0.37728737"
inkscape:transform-center-y="-50.660877"
transform="matrix(0.99369837,0.11208727,-0.11208727,0.99369837,27.945665,-13.270438)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3292"
id="textPath3116"><tspan
style="font-weight:bold"
id="tspan3120">Celery</tspan></textPath></text>
<path
transform="matrix(1.2345679,0,0,1.2345679,-90.833336,136.62492)"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3118"
style="fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.53900003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
sodipodi:linespacing="100%"
id="text3037"
style="font-size:19px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3515"
startOffset="50%"
id="textPath3517"><tspan
dy="0 0 0 0 0 0 0"
id="tspan3296"
style="font-size:19px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;text-anchor:middle;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">RabbitMQ</tspan></textPath></text>
<text
inkscape:transform-center-x="-1.5296205"
sodipodi:linespacing="125%"
id="text3122"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"
inkscape:transform-center-y="19.979687"
transform="translate(300.9346,6.2071068)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
xlink:href="#path3128"
id="textPath3130"
style="font-size:18px"
dx="11">distributed task queue</textPath></text>
<path
id="path3215"
d="M 88.204663,95.907012 C 62.757635,95.951641 49.443105,114.65542 25.82367,128.2921 l 12.220143,18.68715 c 56.271714,-29.85238 102.087677,-6.88553 128.549737,3.60323 26.46205,10.48877 45.61859,25.44394 54.91534,80.89347 L 242.4375,230.75 C 240.52211,208.85706 233.83204,187.65727 222.84375,168.625 194.92101,120.2614 140.31049,95.815629 88.204663,95.907012 z"
style="fill:#ffffff;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="scczccss"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:connector-curvature="0"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="M 92.09375,93.34375 C 66.646722,93.388379 40.869435,99.894563 17.25,113.53125 l 10.302697,17.08579 c 18.998936,-10.99607 41.06319,-17.3125 64.59375,-17.3125 67.527063,0 123.280143,53.27043 128.978553,119.32046 l 21.3125,-1.875 c -1.91539,-21.89294 -8.60546,-43.09273 -19.59375,-62.125 -27.92274,-48.3636 -78.64418,-75.372633 -130.75,-75.28125 z"
id="path3174"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
sodipodi:nodetypes="sccsccss" />
<path
transform="matrix(3.7312659,0,0,3.7312659,-461.59299,-80.243719)"
style="fill:none;stroke:#003366;stroke-width:0.50921059;stroke-miterlimit:4;stroke-dashoffset:0"
d="m 151.69664,127.23583 c -22.29775,1.76546 -41.80483,-14.87926 -43.57029,-37.17701 -1.76545,-22.29775 14.87926,-41.804832 37.17701,-43.570286 6.75335,-0.534705 13.53294,0.633184 19.7181,3.396746 l -2.34994,5.258626"
id="path3547"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csscc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="text3217"
sodipodi:linespacing="125%"
transform="matrix(0.98887574,0.14874396,-0.14874396,0.98887574,36.842448,-35.9897)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
inkscape:transform-center-x="20.113291"
inkscape:transform-center-y="-118.16099"><textPath
id="textPath3219"
xlink:href="#path3210"
style="font-size:19px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#015a01;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">KVM</textPath></text>
<text
transform="matrix(0.17256398,0.98499831,-0.98499831,0.17256398,334.53716,102.09909)"
sodipodi:linespacing="125%"
id="text3223"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:transform-center-x="-102.18218"
inkscape:transform-center-y="-51.009457"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3210"
id="textPath3225"><tspan
id="tspan3227"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#015a01;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">libvirt</tspan></textPath></text>
<path
transform="matrix(-1.0841391,2.204492,2.204492,1.0841391,62.007667,-177.67557)"
sodipodi:type="arc"
style="opacity:0;fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:0.77341002000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3392"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
id="text3394"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3392"
id="textPath3398"><tspan
style="font-size:30px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold"
id="tspan3396"
dx="1.4142134">CIRCLE</tspan></textPath></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-329.23999"
y="169.45934"
id="text3432"
sodipodi:linespacing="125%"
transform="matrix(0.32266286,-0.94651396,0.94651396,0.32266286,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><tspan
sodipodi:role="line"
x="-329.23999"
y="169.45934"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L;fill:#980101"
id="tspan3436">SMB</tspan></text>
<text
transform="matrix(0.20261113,-0.97925928,0.97925928,0.20261113,0,0)"
sodipodi:linespacing="125%"
id="text3440"
y="149.3541"
x="-348.85327"
style="font-size:38.21019362999999913px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><tspan
id="tspan3442"
style="font-size:19.10509681999999998px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L;fill:#980101"
y="149.3541"
x="-348.85327"
sodipodi:role="line">SFTP</tspan></text>
<text
xml:space="preserve"
style="font-size:38.21019362999999913px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-370.16513"
y="107.08025"
id="text3448"
sodipodi:linespacing="125%"
transform="matrix(0.01924015,-0.99981489,0.99981489,0.01924015,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><tspan
sodipodi:role="line"
x="-370.16513"
y="107.08025"
style="font-size:19.10509681999999998px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L;fill:#980101"
id="tspan3450">WEB</tspan></text>
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:transform-center-y="-50.660877"
inkscape:transform-center-x="0.37728737"
sodipodi:linespacing="125%"
id="text3454"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"><textPath
xlink:href="#path3464"
id="textPath3470"><tspan
id="tspan3458"
style="font-weight:bold;fill:#980101"
dx="-4.24264">LVM</tspan></textPath></text>
<path
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998000000003;stroke-miterlimit:4;stroke-dashoffset:0"
d="m 125.58656,364.42906 c 28.77579,-8.16369 53.82029,-26.07346 70.84837,-50.66486"
id="path3464"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:transform-center-x="-70.632065"
inkscape:transform-center-y="98.769975"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3473"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-97.650821"
inkscape:transform-center-y="65.385"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
transform="matrix(0.84808922,-0.52985344,0.52985344,0.84808922,-115.15947,86.056735)"><textPath
id="textPath3475"
xlink:href="#path3464"><tspan
style="font-weight:bold;fill:#980101"
id="tspan3477"
dx="-1.7677672">QCOW</tspan></textPath></text>
<path
inkscape:transform-center-y="44.466657"
inkscape:transform-center-x="-108.56353"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3479"
d="m 184.44313,328.58263 c 20.07888,-22.1705 31.82929,-50.62949 33.24079,-80.50758"
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998000000003;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3487"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-1.5797689"
inkscape:transform-center-y="-50.705679"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3503"
id="textPath3506"><tspan
style="font-weight:bold;fill:#980101"
id="tspan3491"
dx="1.0606601">iSCSI</tspan></textPath></text>
<path
inkscape:transform-center-y="98.769975"
inkscape:transform-center-x="-70.632065"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3493"
d="m 127.00077,387.05648 c 28.77579,-8.16369 53.82029,-26.07346 70.84837,-50.66486"
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:transform-center-y="70.938638"
inkscape:transform-center-x="-115.63696"
sodipodi:linespacing="125%"
id="text3497"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"><textPath
xlink:href="#path3503"
id="textPath3510"><tspan
id="tspan3501"
style="font-weight:bold;fill:#980101"
dx="74.953384">NFS over IB</tspan></textPath></text>
<path
sodipodi:type="arc"
style="opacity:0;fill:#980101;fill-opacity:1;stroke:#ffffff;stroke-width:1.89999998000000003;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3515"
sodipodi:cx="92.5"
sodipodi:cy="243.86218"
sodipodi:rx="29"
sodipodi:ry="29"
d="m 121.5,243.86218 a 29,29 0 1 1 -58,0 29,29 0 1 1 58,0 z"
transform="matrix(-0.01061887,0.99994362,-0.99994362,-0.01061887,337.33068,153.95694)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:type="arc"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#003366;stroke-width:1.89999998000000003;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3520"
sodipodi:cx="92.5"
sodipodi:cy="243.86218"
sodipodi:rx="10.000001"
sodipodi:ry="10.000001"
d="m 102.5,243.86218 a 10.000001,10.000001 0 1 1 -20.000001,0 10.000001,10.000001 0 1 1 20.000001,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="text3057"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3524"
id="textPath3536"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold;fill:#015a01;fill-opacity:1"
id="tspan3059"
dx="2 0 0 0 0 0 0 0 0 0 0 7.5">VT-x/AMD-V IOMMU+CUDA</tspan></textPath></text>
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="fill:none;stroke:none;stroke-width:0.58075160000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3524"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-1.5029938,-2.9059467,2.9059467,-1.5029938,63.277693,805.94859)" />
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:linespacing="125%"
id="text3550"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:transform-center-x="110.47503"
inkscape:transform-center-y="3.8880154"
transform="matrix(-0.49541966,-0.86865376,0.86865376,-0.49541966,-75.005485,444.52677)"><textPath
id="textPath3552"
xlink:href="#path3524"><tspan
id="tspan3554"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#015a01;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold">Netfilter dnsmasq Open</tspan></textPath></text>
<text
inkscape:transform-center-y="3.8880154"
inkscape:transform-center-x="110.47503"
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="text3556"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
transform="translate(1.5,-1)"><textPath
xlink:href="#path3562"
id="textPath3565"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#015a01;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold"
id="tspan3560"
dx="22.627419 0 0 0 0 0 0 0 0 0 0 1.4142135"> iptables tinydns vSwitch</tspan></textPath></text>
<path
transform="matrix(-0.71022656,3.1098739,-3.1098739,-0.71022656,468.09906,-156.26226)"
d="M 187.35849,98.27567 A 40.5,40.5 0 0 1 148.04236,127.3596"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3568"
style="fill:none;stroke:#003366;stroke-width:0.59562188;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
sodipodi:start="0.28568475"
sodipodi:end="1.5820964"
sodipodi:open="true" />
<path
transform="matrix(-0.71022656,3.1098739,-3.1098739,-0.71022656,468.09906,-156.26226)"
style="fill:none;stroke:#003366;stroke-width:0.59562188;stroke-miterlimit:4;stroke-dashoffset:0"
d="m 148.08079,120.43357 -0.094,13.72532"
id="path3570"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3573"
d="M -5.8550661,286.3402 -46.722319,302.04979"
style="fill:none;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
id="text3138"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3575"
id="textPath3577"><tspan
style="-inkscape-font-specification:TitilliumText25L;font-family:TitilliumText25L;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:16px;fill:#ffffff;fill-opacity:1"
id="tspan3140">virtualization</tspan></textPath></text>
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:linespacing="125%"
id="text3582"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:transform-center-x="156.27315"
inkscape:transform-center-y="11.085366"
transform="matrix(-0.47669194,-0.87907042,0.87907042,-0.47669194,-77.778024,441.42333)"><textPath
id="textPath3584"
xlink:href="#path3575"><tspan
id="tspan3586"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">networking</tspan></textPath></text>
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:linespacing="125%"
id="text3590"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"><textPath
xlink:href="#path3588"
id="textPath3597"><tspan
id="tspan3594"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">storage</tspan></textPath></text>
</g>
</svg>
% LLNCS DOCUMENT CLASS -- version 2.17 (12-Jul-2010)
% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science
%
%%
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%% Digits \0\1\2\3\4\5\6\7\8\9
%% Exclamation \! Double quote \" Hash (number) \#
%% Dollar \$ Percent \% Ampersand \&
%% Acute accent \' Left paren \( Right paren \)
%% Asterisk \* Plus \+ Comma \,
%% Minus \- Point \. Solidus \/
%% Colon \: Semicolon \; Less than \<
%% Equals \= Greater than \> Question mark \?
%% Commercial at \@ Left bracket \[ Backslash \\
%% Right bracket \] Circumflex \^ Underscore \_
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{llncs}[2010/07/12 v2.17
^^J LaTeX document class for Lecture Notes in Computer Science]
% Options
\let\if@envcntreset\iffalse
\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue}
\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y}
\DeclareOption{oribibl}{\let\oribibl=Y}
\let\if@custvec\iftrue
\DeclareOption{orivec}{\let\if@custvec\iffalse}
\let\if@envcntsame\iffalse
\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue}
\let\if@envcntsect\iffalse
\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue}
\let\if@runhead\iffalse
\DeclareOption{runningheads}{\let\if@runhead\iftrue}
\let\if@openright\iftrue
\let\if@openbib\iffalse
\DeclareOption{openbib}{\let\if@openbib\iftrue}
% languages
\let\switcht@@therlang\relax
\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}}
\def\ds@francais{\def\switcht@@therlang{\switcht@francais}}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass[twoside]{article}
\RequirePackage{multicol} % needed for the list of participants, index
\RequirePackage{aliascnt}
\setlength{\textwidth}{12.2cm}
\setlength{\textheight}{19.3cm}
\renewcommand\@pnumwidth{2em}
\renewcommand\@tocrmarg{3.5em}
%
\def\@dottedtocline#1#2#3#4#5{%
\ifnum #1>\c@tocdepth \else
\vskip \z@ \@plus.2\p@
{\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm
\parfillskip -\rightskip \pretolerance=10000
\parindent #2\relax\@afterindenttrue
\interlinepenalty\@M
\leavevmode
\@tempdima #3\relax
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
{#4}\nobreak
\leaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
mu$}\hfill
\nobreak
\hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
\par}%
\fi}
%
\def\switcht@albion{%
\def\abstractname{Abstract.}
\def\ackname{Acknowledgement.}
\def\andname{and}
\def\lastandname{\unskip, and}
\def\appendixname{Appendix}
\def\chaptername{Chapter}
\def\claimname{Claim}
\def\conjecturename{Conjecture}
\def\contentsname{Table of Contents}
\def\corollaryname{Corollary}
\def\definitionname{Definition}
\def\examplename{Example}
\def\exercisename{Exercise}
\def\figurename{Fig.}
\def\keywordname{{\bf Keywords:}}
\def\indexname{Index}
\def\lemmaname{Lemma}
\def\contriblistname{List of Contributors}
\def\listfigurename{List of Figures}
\def\listtablename{List of Tables}
\def\mailname{{\it Correspondence to\/}:}
\def\noteaddname{Note added in proof}
\def\notename{Note}
\def\partname{Part}
\def\problemname{Problem}
\def\proofname{Proof}
\def\propertyname{Property}
\def\propositionname{Proposition}
\def\questionname{Question}
\def\remarkname{Remark}
\def\seename{see}
\def\solutionname{Solution}
\def\subclassname{{\it Subject Classifications\/}:}
\def\tablename{Table}
\def\theoremname{Theorem}}
\switcht@albion
% Names of theorem like environments are already defined
% but must be translated if another language is chosen
%
% French section
\def\switcht@francais{%\typeout{On parle francais.}%
\def\abstractname{R\'esum\'e.}%
\def\ackname{Remerciements.}%
\def\andname{et}%
\def\lastandname{ et}%
\def\appendixname{Appendice}
\def\chaptername{Chapitre}%
\def\claimname{Pr\'etention}%
\def\conjecturename{Hypoth\`ese}%
\def\contentsname{Table des mati\`eres}%
\def\corollaryname{Corollaire}%
\def\definitionname{D\'efinition}%
\def\examplename{Exemple}%
\def\exercisename{Exercice}%
\def\figurename{Fig.}%
\def\keywordname{{\bf Mots-cl\'e:}}
\def\indexname{Index}
\def\lemmaname{Lemme}%
\def\contriblistname{Liste des contributeurs}
\def\listfigurename{Liste des figures}%
\def\listtablename{Liste des tables}%
\def\mailname{{\it Correspondence to\/}:}
\def\noteaddname{Note ajout\'ee \`a l'\'epreuve}%
\def\notename{Remarque}%
\def\partname{Partie}%
\def\problemname{Probl\`eme}%
\def\proofname{Preuve}%
\def\propertyname{Caract\'eristique}%
%\def\propositionname{Proposition}%
\def\questionname{Question}%
\def\remarkname{Remarque}%
\def\seename{voir}
\def\solutionname{Solution}%
\def\subclassname{{\it Subject Classifications\/}:}
\def\tablename{Tableau}%
\def\theoremname{Th\'eor\`eme}%
}
%
% German section
\def\switcht@deutsch{%\typeout{Man spricht deutsch.}%
\def\abstractname{Zusammenfassung.}%
\def\ackname{Danksagung.}%
\def\andname{und}%
\def\lastandname{ und}%
\def\appendixname{Anhang}%
\def\chaptername{Kapitel}%
\def\claimname{Behauptung}%
\def\conjecturename{Hypothese}%
\def\contentsname{Inhaltsverzeichnis}%
\def\corollaryname{Korollar}%
%\def\definitionname{Definition}%
\def\examplename{Beispiel}%
\def\exercisename{\"Ubung}%
\def\figurename{Abb.}%
\def\keywordname{{\bf Schl\"usselw\"orter:}}
\def\indexname{Index}
%\def\lemmaname{Lemma}%
\def\contriblistname{Mitarbeiter}
\def\listfigurename{Abbildungsverzeichnis}%
\def\listtablename{Tabellenverzeichnis}%
\def\mailname{{\it Correspondence to\/}:}
\def\noteaddname{Nachtrag}%
\def\notename{Anmerkung}%
\def\partname{Teil}%
%\def\problemname{Problem}%
\def\proofname{Beweis}%
\def\propertyname{Eigenschaft}%
%\def\propositionname{Proposition}%
\def\questionname{Frage}%
\def\remarkname{Anmerkung}%
\def\seename{siehe}
\def\solutionname{L\"osung}%
\def\subclassname{{\it Subject Classifications\/}:}
\def\tablename{Tabelle}%
%\def\theoremname{Theorem}%
}
% Ragged bottom for the actual page
\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil
\global\let\@textbottom\relax}}
\renewcommand\small{%
\@setfontsize\small\@ixpt{11}%
\abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
\abovedisplayshortskip \z@ \@plus2\p@
\belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
\def\@listi{\leftmargin\leftmargini
\parsep 0\p@ \@plus1\p@ \@minus\p@
\topsep 8\p@ \@plus2\p@ \@minus4\p@
\itemsep0\p@}%
\belowdisplayskip \abovedisplayskip
}
\frenchspacing
\widowpenalty=10000
\clubpenalty=10000
\setlength\oddsidemargin {63\p@}
\setlength\evensidemargin {63\p@}
\setlength\marginparwidth {90\p@}
\setlength\headsep {16\p@}
\setlength\footnotesep{7.7\p@}
\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@}
\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@}
\setcounter{secnumdepth}{2}
\newcounter {chapter}
\renewcommand\thechapter {\@arabic\c@chapter}
\newif\if@mainmatter \@mainmattertrue
\newcommand\frontmatter{\cleardoublepage
\@mainmatterfalse\pagenumbering{Roman}}
\newcommand\mainmatter{\cleardoublepage
\@mainmattertrue\pagenumbering{arabic}}
\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi
\@mainmatterfalse}
\renewcommand\part{\cleardoublepage
\thispagestyle{empty}%
\if@twocolumn
\onecolumn
\@tempswatrue
\else
\@tempswafalse
\fi
\null\vfil
\secdef\@part\@spart}
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >-2\relax
\refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
\markboth{}{}%
{\centering
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >-2\relax
\huge\bfseries \partname~\thepart
\par
\vskip 20\p@
\fi
\Huge \bfseries #2\par}%
\@endpart}
\def\@spart#1{%
{\centering
\interlinepenalty \@M
\normalfont
\Huge \bfseries #1\par}%
\@endpart}
\def\@endpart{\vfil\newpage
\if@twoside
\null
\thispagestyle{empty}%
\newpage
\fi
\if@tempswa
\twocolumn
\fi}
\newcommand\chapter{\clearpage
\thispagestyle{empty}%
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter}
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\thechapter}#1}%
\else
\addcontentsline{toc}{chapter}{#1}%
\fi
\else
\addcontentsline{toc}{chapter}{#1}%
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\if@twocolumn
\@topnewpage[\@makechapterhead{#2}]%
\else
\@makechapterhead{#2}%
\@afterheading
\fi}
\def\@makechapterhead#1{%
% \vspace*{50\p@}%
{\centering
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\large\bfseries \@chapapp{} \thechapter
\par\nobreak
\vskip 20\p@
\fi
\fi
\interlinepenalty\@M
\Large \bfseries #1\par\nobreak
\vskip 40\p@
}}
\def\@schapter#1{\if@twocolumn
\@topnewpage[\@makeschapterhead{#1}]%
\else
\@makeschapterhead{#1}%
\@afterheading
\fi}
\def\@makeschapterhead#1{%
% \vspace*{50\p@}%
{\centering
\normalfont
\interlinepenalty\@M
\Large \bfseries #1\par\nobreak
\vskip 40\p@
}}
\renewcommand\section{\@startsection{section}{1}{\z@}%
{-18\p@ \@plus -4\p@ \@minus -4\p@}%
{12\p@ \@plus 4\p@ \@minus 4\p@}%
{\normalfont\large\bfseries\boldmath
\rightskip=\z@ \@plus 8em\pretolerance=10000 }}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
{-18\p@ \@plus -4\p@ \@minus -4\p@}%
{8\p@ \@plus 4\p@ \@minus 4\p@}%
{\normalfont\normalsize\bfseries\boldmath
\rightskip=\z@ \@plus 8em\pretolerance=10000 }}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
{-18\p@ \@plus -4\p@ \@minus -4\p@}%
{-0.5em \@plus -0.22em \@minus -0.1em}%
{\normalfont\normalsize\bfseries\boldmath}}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
{-12\p@ \@plus -4\p@ \@minus -4\p@}%
{-0.5em \@plus -0.22em \@minus -0.1em}%
{\normalfont\normalsize\itshape}}
\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use
\string\subparagraph\space with this class}\vskip0.5cm
You should not use \verb|\subparagraph| with this class.\vskip0.5cm}
\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00}
\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01}
\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02}
\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03}
\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04}
\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05}
\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06}
\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07}
\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08}
\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09}
\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A}
\let\footnotesize\small
\if@custvec
\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}}
{\mbox{\boldmath$\textstyle#1$}}
{\mbox{\boldmath$\scriptstyle#1$}}
{\mbox{\boldmath$\scriptscriptstyle#1$}}}
\fi
\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
\penalty50\hskip1em\null\nobreak\hfil\squareforqed
\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
\halign{\hfil
$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
\cr\to\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
\cr\to\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
\gets\cr\to\cr}}}}}
\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
\noalign{\vskip1.2pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
\noalign{\vskip1pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
<\cr
\noalign{\vskip0.9pt}=\cr}}}}}
\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
\noalign{\vskip1.2pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
\noalign{\vskip1pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
>\cr
\noalign{\vskip0.9pt}=\cr}}}}}
\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
\halign{\hfil
$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
>\cr\noalign{\vskip-1pt}<\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
>\cr\noalign{\vskip-0.8pt}<\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
\def\bbbr{{\rm I\!R}} %reelle Zahlen
\def\bbbm{{\rm I\!M}}
\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
\def\bbbf{{\rm I\!F}}
\def\bbbh{{\rm I\!H}}
\def\bbbk{{\rm I\!K}}
\def\bbbp{{\rm I\!P}}
\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
Q$}\hbox{\raise
0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
\def\bbbs{{\mathchoice
{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}
{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}
{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}}
{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}}
\let\ts\,
\setlength\leftmargini {17\p@}
\setlength\leftmargin {\leftmargini}
\setlength\leftmarginii {\leftmargini}
\setlength\leftmarginiii {\leftmargini}
\setlength\leftmarginiv {\leftmargini}
\setlength \labelsep {.5em}
\setlength \labelwidth{\leftmargini}
\addtolength\labelwidth{-\labelsep}
\def\@listI{\leftmargin\leftmargini
\parsep 0\p@ \@plus1\p@ \@minus\p@
\topsep 8\p@ \@plus2\p@ \@minus4\p@
\itemsep0\p@}
\let\@listi\@listI
\@listi
\def\@listii {\leftmargin\leftmarginii
\labelwidth\leftmarginii
\advance\labelwidth-\labelsep
\topsep 0\p@ \@plus2\p@ \@minus\p@}
\def\@listiii{\leftmargin\leftmarginiii
\labelwidth\leftmarginiii
\advance\labelwidth-\labelsep
\topsep 0\p@ \@plus\p@\@minus\p@
\parsep \z@
\partopsep \p@ \@plus\z@ \@minus\p@}
\renewcommand\labelitemi{\normalfont\bfseries --}
\renewcommand\labelitemii{$\m@th\bullet$}
\setlength\arraycolsep{1.4\p@}
\setlength\tabcolsep{1.4\p@}
\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}%
{{\contentsname}}}
\def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}}
\def\lastand{\ifnum\value{auco}=2\relax
\unskip{} \andname\
\else
\unskip \lastandname\
\fi}%
\def\and{\stepcounter{@auth}\relax
\ifnum\value{@auth}=\value{auco}%
\lastand
\else
\unskip,
\fi}%
\@starttoc{toc}\if@restonecol\twocolumn\fi}
\def\l@part#1#2{\addpenalty{\@secpenalty}%
\addvspace{2em plus\p@}% % space above part line
\begingroup
\parindent \z@
\rightskip \z@ plus 5em
\hrule\vskip5pt
\large % same size as for a contribution heading
\bfseries\boldmath % set line in boldface
\leavevmode % TeX command to enter horizontal mode.
#1\par
\vskip5pt
\hrule
\vskip1pt
\nobreak % Never break after part entry
\endgroup}
\def\@dotsep{2}
\let\phantomsection=\relax
\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else
{}\fi}
\def\addnumcontentsmark#1#2#3{%
\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline
{\thechapter}#3}{\thepage}\hyperhrefextend}}%
\def\addcontentsmark#1#2#3{%
\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}%
\def\addcontentsmarkwop#1#2#3{%
\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}%
\def\@adcmk[#1]{\ifcase #1 \or
\def\@gtempa{\addnumcontentsmark}%
\or \def\@gtempa{\addcontentsmark}%
\or \def\@gtempa{\addcontentsmarkwop}%
\fi\@gtempa{toc}{chapter}%
}
\def\addtocmark{%
\phantomsection
\@ifnextchar[{\@adcmk}{\@adcmk[3]}%
}
\def\l@chapter#1#2{\addpenalty{-\@highpenalty}
\vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
\parindent \z@ \rightskip \@tocrmarg
\advance\rightskip by 0pt plus 2cm
\parfillskip -\rightskip \pretolerance=10000
\leavevmode \advance\leftskip\@tempdima \hskip -\leftskip
{\large\bfseries\boldmath#1}\ifx0#2\hfil\null
\else
\nobreak
\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
\@dotsep mu$}\hfill
\nobreak\hbox to\@pnumwidth{\hss #2}%
\fi\par
\penalty\@highpenalty \endgroup}
\def\l@title#1#2{\addpenalty{-\@highpenalty}
\addvspace{8pt plus 1pt}
\@tempdima \z@
\begingroup
\parindent \z@ \rightskip \@tocrmarg
\advance\rightskip by 0pt plus 2cm
\parfillskip -\rightskip \pretolerance=10000
\leavevmode \advance\leftskip\@tempdima \hskip -\leftskip
#1\nobreak
\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
\@dotsep mu$}\hfill
\nobreak\hbox to\@pnumwidth{\hss #2}\par
\penalty\@highpenalty \endgroup}
\def\l@author#1#2{\addpenalty{\@highpenalty}
\@tempdima=15\p@ %\z@
\begingroup
\parindent \z@ \rightskip \@tocrmarg
\advance\rightskip by 0pt plus 2cm
\pretolerance=10000
\leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip
\textit{#1}\par
\penalty\@highpenalty \endgroup}
\setcounter{tocdepth}{0}
\newdimen\tocchpnum
\newdimen\tocsecnum
\newdimen\tocsectotal
\newdimen\tocsubsecnum
\newdimen\tocsubsectotal
\newdimen\tocsubsubsecnum
\newdimen\tocsubsubsectotal
\newdimen\tocparanum
\newdimen\tocparatotal
\newdimen\tocsubparanum
\tocchpnum=\z@ % no chapter numbers
\tocsecnum=15\p@ % section 88. plus 2.222pt
\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt
\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt
\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt
\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt
\def\calctocindent{%
\tocsectotal=\tocchpnum
\advance\tocsectotal by\tocsecnum
\tocsubsectotal=\tocsectotal
\advance\tocsubsectotal by\tocsubsecnum
\tocsubsubsectotal=\tocsubsectotal
\advance\tocsubsubsectotal by\tocsubsubsecnum
\tocparatotal=\tocsubsubsectotal
\advance\tocparatotal by\tocparanum}
\calctocindent
\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}}
\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}}
\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}}
\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}}
\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}}
\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
\fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}}
\@starttoc{lof}\if@restonecol\twocolumn\fi}
\def\l@figure{\@dottedtocline{1}{0em}{1.5em}}
\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
\fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}}
\@starttoc{lot}\if@restonecol\twocolumn\fi}
\let\l@table\l@figure
\renewcommand\listoffigures{%
\section*{\listfigurename
\@mkboth{\listfigurename}{\listfigurename}}%
\@starttoc{lof}%
}
\renewcommand\listoftables{%
\section*{\listtablename
\@mkboth{\listtablename}{\listtablename}}%
\@starttoc{lot}%
}
\ifx\oribibl\undefined
\ifx\citeauthoryear\undefined
\renewenvironment{thebibliography}[1]
{\section*{\refname}
\def\@biblabel##1{##1.}
\small
\list{\@biblabel{\@arabic\c@enumiv}}%
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\if@openbib
\advance\leftmargin\bibindent
\itemindent -\bibindent
\listparindent \itemindent
\parsep \z@
\fi
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
\if@openbib
\renewcommand\newblock{\par}%
\else
\renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%
\fi
\sloppy\clubpenalty4000\widowpenalty4000%
\sfcode`\.=\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\endlist}
\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw
{\let\protect\noexpand\immediate
\write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
\newcount\@tempcntc
\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
\@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do
{\@ifundefined
{b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries
?}\@warning
{Citation `\@citeb' on page \thepage \space undefined}}%
{\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}%
\ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne
\@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}%
\else
\advance\@tempcntb\@ne
\ifnum\@tempcntb=\@tempcntc
\else\advance\@tempcntb\m@ne\@citeo
\@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}}
\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else
\@citea\def\@citea{,\,\hskip\z@skip}%
\ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else
{\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else
\def\@citea{--}\fi
\advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi}
\else
\renewenvironment{thebibliography}[1]
{\section*{\refname}
\small
\list{}%
{\settowidth\labelwidth{}%
\leftmargin\parindent
\itemindent=-\parindent
\labelsep=\z@
\if@openbib
\advance\leftmargin\bibindent
\itemindent -\bibindent
\listparindent \itemindent
\parsep \z@
\fi
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{}}%
\if@openbib
\renewcommand\newblock{\par}%
\else
\renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%
\fi
\sloppy\clubpenalty4000\widowpenalty4000%
\sfcode`\.=\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\endlist}
\def\@cite#1{#1}%
\def\@lbibitem[#1]#2{\item[]\if@filesw
{\def\protect##1{\string ##1\space}\immediate
\write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
\fi
\else
\@cons\@openbib@code{\noexpand\small}
\fi
\def\idxquad{\hskip 10\p@}% space that divides entry from number
\def\@idxitem{\par\hangindent 10\p@}
\def\subitem{\par\setbox0=\hbox{--\enspace}% second order
\noindent\hangindent\wd0\box0}% index entry
\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third
\noindent\hangindent\wd0\box0}% order index entry
\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
\renewenvironment{theindex}
{\@mkboth{\indexname}{\indexname}%
\thispagestyle{empty}\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\let\item\par
\def\,{\relax\ifmmode\mskip\thinmuskip
\else\hskip0.2em\ignorespaces\fi}%
\normalfont\small
\begin{multicols}{2}[\@makeschapterhead{\indexname}]%
}
{\end{multicols}}
\renewcommand\footnoterule{%
\kern-3\p@
\hrule\@width 2truecm
\kern2.6\p@}
\newdimen\fnindent
\fnindent1em
\long\def\@makefntext#1{%
\parindent \fnindent%
\leftskip \fnindent%
\noindent
\llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1}
\long\def\@makecaption#1#2{%
\small
\vskip\abovecaptionskip
\sbox\@tempboxa{{\bfseries #1.} #2}%
\ifdim \wd\@tempboxa >\hsize
{\bfseries #1.} #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\def\fps@figure{htbp}
\def\fnum@figure{\figurename\thinspace\thefigure}
\def \@floatboxreset {%
\reset@font
\small
\@setnobreak
\@setminipage
}
\def\fps@table{htbp}
\def\fnum@table{\tablename~\thetable}
\renewenvironment{table}
{\setlength\abovecaptionskip{0\p@}%
\setlength\belowcaptionskip{10\p@}%
\@float{table}}
{\end@float}
\renewenvironment{table*}
{\setlength\abovecaptionskip{0\p@}%
\setlength\belowcaptionskip{10\p@}%
\@dblfloat{table}}
{\end@dblfloat}
\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
ext@#1\endcsname}{#1}{\protect\numberline{\csname
the#1\endcsname}{\ignorespaces #2}}\begingroup
\@parboxrestore
\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
\endgroup}
% LaTeX does not provide a command to enter the authors institute
% addresses. The \institute command is defined here.
\newcounter{@inst}
\newcounter{@auth}
\newcounter{auco}
\newdimen\instindent
\newbox\authrun
\newtoks\authorrunning
\newtoks\tocauthor
\newbox\titrun
\newtoks\titlerunning
\newtoks\toctitle
\def\clearheadinfo{\gdef\@author{No Author Given}%
\gdef\@title{No Title Given}%
\gdef\@subtitle{}%
\gdef\@institute{No Institute Given}%
\gdef\@thanks{}%
\global\titlerunning={}\global\authorrunning={}%
\global\toctitle={}\global\tocauthor={}}
\def\institute#1{\gdef\@institute{#1}}
\def\institutename{\par
\begingroup
\parskip=\z@
\parindent=\z@
\setcounter{@inst}{1}%
\def\and{\par\stepcounter{@inst}%
\noindent$^{\the@inst}$\enspace\ignorespaces}%
\setbox0=\vbox{\def\thanks##1{}\@institute}%
\ifnum\c@@inst=1\relax
\gdef\fnnstart{0}%
\else
\xdef\fnnstart{\c@@inst}%
\setcounter{@inst}{1}%
\noindent$^{\the@inst}$\enspace
\fi
\ignorespaces
\@institute\par
\endgroup}
\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or
{\star\star\star}\or \dagger\or \ddagger\or
\mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
\or \ddagger\ddagger \else\@ctrerr\fi}}
\def\inst#1{\unskip$^{#1}$}
\def\fnmsep{\unskip$^,$}
\def\email#1{{\tt#1}}
\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}%
\@ifpackageloaded{babel}{%
\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}%
\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}%
\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}%
}{\switcht@@therlang}%
\providecommand{\keywords}[1]{\par\addvspace\baselineskip
\noindent\keywordname\enspace\ignorespaces#1}%
}
\def\homedir{\~{ }}
\def\subtitle#1{\gdef\@subtitle{#1}}
\clearheadinfo
%
%%% to avoid hyperref warnings
\providecommand*{\toclevel@author}{999}
%%% to make title-entry parent of section-entries
\providecommand*{\toclevel@title}{0}
%
\renewcommand\maketitle{\newpage
\phantomsection
\refstepcounter{chapter}%
\stepcounter{section}%
\setcounter{section}{0}%
\setcounter{subsection}{0}%
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{equation}{0}
\setcounter{footnote}{0}%
\begingroup
\parindent=\z@
\renewcommand\thefootnote{\@fnsymbol\c@footnote}%
\if@twocolumn
\ifnum \col@number=\@ne
\@maketitle
\else
\twocolumn[\@maketitle]%
\fi
\else
\newpage
\global\@topnum\z@ % Prevents figures from going at top of page.
\@maketitle
\fi
\thispagestyle{empty}\@thanks
%
\def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}%
\def\thanks##1{\unskip{}}\def\fnmsep{\unskip}%
\instindent=\hsize
\advance\instindent by-\headlineindent
\if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else
\addcontentsline{toc}{title}{\the\toctitle}\fi
\if@runhead
\if!\the\titlerunning!\else
\edef\@title{\the\titlerunning}%
\fi
\global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}%
\ifdim\wd\titrun>\instindent
\typeout{Title too long for running head. Please supply}%
\typeout{a shorter form with \string\titlerunning\space prior to
\string\maketitle}%
\global\setbox\titrun=\hbox{\small\rm
Title Suppressed Due to Excessive Length}%
\fi
\xdef\@title{\copy\titrun}%
\fi
%
\if!\the\tocauthor!\relax
{\def\and{\noexpand\protect\noexpand\and}%
\protected@xdef\toc@uthor{\@author}}%
\else
\def\\{\noexpand\protect\noexpand\newline}%
\protected@xdef\scratch{\the\tocauthor}%
\protected@xdef\toc@uthor{\scratch}%
\fi
\addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}%
\addcontentsline{toc}{author}{\toc@uthor}%
\if@runhead
\if!\the\authorrunning!
\value{@inst}=\value{@auth}%
\setcounter{@auth}{1}%
\else
\edef\@author{\the\authorrunning}%
\fi
\global\setbox\authrun=\hbox{\small\unboldmath\@author\unskip}%
\ifdim\wd\authrun>\instindent
\typeout{Names of authors too long for running head. Please supply}%
\typeout{a shorter form with \string\authorrunning\space prior to
\string\maketitle}%
\global\setbox\authrun=\hbox{\small\rm
Authors Suppressed Due to Excessive Length}%
\fi
\xdef\@author{\copy\authrun}%
\markboth{\@author}{\@title}%
\fi
\endgroup
\setcounter{footnote}{\fnnstart}%
\clearheadinfo}
%
\def\@maketitle{\newpage
\markboth{}{}%
\def\lastand{\ifnum\value{@inst}=2\relax
\unskip{} \andname\
\else
\unskip \lastandname\
\fi}%
\def\and{\stepcounter{@auth}\relax
\ifnum\value{@auth}=\value{@inst}%
\lastand
\else
\unskip,
\fi}%
\begin{center}%
\let\newline\\
{\Large \bfseries\boldmath
\pretolerance=10000
\@title \par}\vskip .8cm
\if!\@subtitle!\else {\large \bfseries\boldmath
\vskip -.65cm
\pretolerance=10000
\@subtitle \par}\vskip .8cm\fi
\setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}%
\def\thanks##1{}\@author}%
\global\value{@inst}=\value{@auth}%
\global\value{auco}=\value{@auth}%
\setcounter{@auth}{1}%
{\lineskip .5em
\noindent\ignorespaces
\@author\vskip.35cm}
{\small\institutename}
\end{center}%
}
% definition of the "\spnewtheorem" command.
%
% Usage:
%
% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font}
% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font}
% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font}
%
% New is "cap_font" and "body_font". It stands for
% fontdefinition of the caption and the text itself.
%
% "\spnewtheorem*" gives a theorem without number.
%
% A defined spnewthoerem environment is used as described
% by Lamport.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\@thmcountersep{}
\def\@thmcounterend{.}
\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}}
% definition of \spnewtheorem with number
\def\@spnthm#1#2{%
\@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}}
\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}}
\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname
{\@definecounter{#1}\@addtoreset{#1}{#3}%
\expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
\csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}%
\expandafter\xdef\csname #1name\endcsname{#2}%
\global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%
\global\@namedef{end#1}{\@endtheorem}}}
\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
{\@definecounter{#1}%
\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
\expandafter\xdef\csname #1name\endcsname{#2}%
\global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}%
\global\@namedef{end#1}{\@endtheorem}}}
\def\@spothm#1[#2]#3#4#5{%
\@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}%
{\expandafter\@ifdefinable\csname #1\endcsname
{\newaliascnt{#1}{#2}%
\expandafter\xdef\csname #1name\endcsname{#3}%
\global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%
\global\@namedef{end#1}{\@endtheorem}}}}
\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@
\refstepcounter{#1}%
\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}}
\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}%
\ignorespaces}
\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname
the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
\def\@spbegintheorem#1#2#3#4{\trivlist
\item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4}
\def\@spopargbegintheorem#1#2#3#4#5{\trivlist
\item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5}
% definition of \spnewtheorem* without number
\def\@sthm#1#2{\@Ynthm{#1}{#2}}
\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
{\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}%
\expandafter\xdef\csname #1name\endcsname{#2}%
\global\@namedef{end#1}{\@endtheorem}}}
\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@
\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}}
\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces}
\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1}
{#4}{#2}{#3}\ignorespaces}
\def\@Begintheorem#1#2#3{#3\trivlist
\item[\hskip\labelsep{#2#1\@thmcounterend}]}
\def\@Opargbegintheorem#1#2#3#4{#4\trivlist
\item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }}
\if@envcntsect
\def\@thmcountersep{.}
\spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape}
\else
\spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape}
\if@envcntreset
\@addtoreset{theorem}{section}
\else
\@addtoreset{theorem}{chapter}
\fi
\fi
%definition of divers theorem environments
\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily}
\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily}
\if@envcntsame % alle Umgebungen wie Theorem.
\def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}}
\else % alle Umgebungen mit eigenem Zaehler
\if@envcntsect % mit section numeriert
\def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}}
\else % nicht mit section numeriert
\if@envcntreset
\def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4}
\@addtoreset{#1}{section}}
\else
\def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4}
\@addtoreset{#1}{chapter}}%
\fi
\fi
\fi
\spn@wtheorem{case}{Case}{\itshape}{\rmfamily}
\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily}
\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape}
\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape}
\spn@wtheorem{example}{Example}{\itshape}{\rmfamily}
\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily}
\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape}
\spn@wtheorem{note}{Note}{\itshape}{\rmfamily}
\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily}
\spn@wtheorem{property}{Property}{\itshape}{\rmfamily}
\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape}
\spn@wtheorem{question}{Question}{\itshape}{\rmfamily}
\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily}
\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily}
\def\@takefromreset#1#2{%
\def\@tempa{#1}%
\let\@tempd\@elt
\def\@elt##1{%
\def\@tempb{##1}%
\ifx\@tempa\@tempb\else
\@addtoreset{##1}{#2}%
\fi}%
\expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname
\expandafter\def\csname cl@#2\endcsname{}%
\@tempc
\let\@elt\@tempd}
\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist
\item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5}
\def\@Opargbegintheorem##1##2##3##4{##4\trivlist
\item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }}
}
\renewenvironment{abstract}{%
\list{}{\advance\topsep by0.35cm\relax\small
\leftmargin=1cm
\labelwidth=\z@
\listparindent=\z@
\itemindent\listparindent
\rightmargin\leftmargin}\item[\hskip\labelsep
\bfseries\abstractname]}
{\endlist}
\newdimen\headlineindent % dimension for space between
\headlineindent=1.166cm % number and text of headings.
\def\ps@headings{\let\@mkboth\@gobbletwo
\let\@oddfoot\@empty\let\@evenfoot\@empty
\def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}%
\leftmark\hfil}
\def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}%
\llap{\thepage}}
\def\chaptermark##1{}%
\def\sectionmark##1{}%
\def\subsectionmark##1{}}
\def\ps@titlepage{\let\@mkboth\@gobbletwo
\let\@oddfoot\@empty\let\@evenfoot\@empty
\def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}%
\hfil}
\def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}%
\llap{\thepage}}
\def\chaptermark##1{}%
\def\sectionmark##1{}%
\def\subsectionmark##1{}}
\if@runhead\ps@headings\else
\ps@empty\fi
\setlength\arraycolsep{1.4\p@}
\setlength\tabcolsep{1.4\p@}
\endinput
%end of file llncs.cls
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: cairo 1.10.2 (http://cairographics.org)
%%CreationDate: Sun Mar 24 10:50:26 2013
%%Pages: 1
%%BoundingBox: -167 0 256 305
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog
/cairo_eps_state save def
/dict_count countdictstack def
/op_count count 1 sub def
userdict begin
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
%!FontType1-1.1 f-0-0 1.0
11 dict begin
/FontName /f-0-0 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/FontBBox {0 -217 732 722 } readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 1 /uni004F put
dup 2 /uni0070 put
dup 3 /uni0065 put
dup 4 /uni006E put
dup 5 /uni0020 put
dup 6 /uni0076 put
dup 7 /uni0053 put
dup 8 /uni0077 put
dup 9 /uni0069 put
dup 10 /uni0074 put
dup 11 /uni0063 put
dup 12 /uni0068 put
dup 13 /uni0046 put
dup 14 /uni0072 put
dup 15 /uni0061 put
dup 16 /uni006C put
dup 17 /uni0066 put
dup 18 /uni0032 put
dup 19 /uni004E put
dup 20 /uni006F put
dup 21 /uni006B put
dup 22 /uni0073 put
dup 23 /uni0048 put
dup 24 /uni0064 put
readonly def
currentdict end
currentfile eexec
f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467
b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de
800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f
2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b
9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799
69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5
8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251caf37e69b8d0603
a7433caedec4b6cd5c2839290152acb74dd5effb7d57b8850958b3abdf0a4d39e16a6b07c2c1e8
3381600e1f450b8272b0341eeb3072bb916526a7cb9a82abadbfe1c8f6a2b6afc2b84a8807b1ec
be55674c4eb5ce1324eebb409d9dabf983d71890f87b46280def494d599f306285593d6f768825
516d58b0d49a558bd33e8b24d9be241990e9c144c9a3e1296e9d9bd12eefee68bcccf0a17ee096
c436f63bd52123610e4560a936ca992843e10f75614f4e1e7c56be71b5e61019eafb4911733e4c
15336b44c25b12d1203b1b01827836e41b036e77bdeae781592e15b8f444475a5db04d92071727
f8358495d966b9ad377d2c47fd7e38865b6a232d6645dbf4ae2afeafec93de7775a48590137600
946f400ef2e98905997574bd6b5fe9e978d07336dcc8125631c3077a2428beb3faed7e1f69cb0e
cd451b457d25db3f7464c91ddac3ae96263a99f242a74ccf177c75f7fcba02c3146ebe9c035d6c
a4f6d12d36999ef48f6f457eb2bb6bea3f7c136dd856ddae1f266404800225f94ab887145c1ed0
75c431a7f2afb7011ae7d14b7d065010f5285f709edd4756266c4a4c2d2021ed9831ab6a610494
66f0b71eb4d21d5fe0fc8e8be78c472bf63dade09a6893bf0c7043c25cf62a8bdcfe3474ba73a1
fec618e3a851e650eec0421d08d6d1877d475d4a86c4acc988682e2ca02a54d2f2ced6e6531e44
d4f21c3916c08b047148e29d4534683653986dc409aea6e5a14707b40d961e242102222ed4423e
da32801d9b53ffc07a5d201d20a13b3bed67fa06f94d65bbf73a003f145f814fcd6ad59de01d5e
ba550c9cb8ec4f065206147338ad76c823728cdaa15ef08ae5bcc366940ed136f05cd25ab367ea
625b2170a2c46db93c135e52833b6e87e75e5e3890d750d667d6f6c50cc14eecb3b027f1e13260
3064da993b9b536619903922b1a4d25e1764fdafa995e234eac44173eac82b0c9f3f7d9f52daa2
6ab437151991a7bc0575736182f436e51d9e2d29790366c834a8bb25d9b9ccd7dfc88b6134feca
de00289b1f7f27d9626a9436d40c7becbe1c6ebb15168d2211747771818fd33bd7c58724f475af
44360d9da68d71e044de4a4dbcd7d4784ce230b355797881b04050801d1946b4b5fb8564fccaaa
7ccbdd7de71a00a21c60b2a6e25547659b178870a5b69f805733763d3b30b95f41baa094076d6f
6cd70cf6dc484348f03297059f02a3c664f7b071d8134dc55dd2df24c017c5d1b896f8ea6ff7b6
c383e55e783ac761d72a4b16916e28a582579b1b36a2dcb49d9e302beb4e4f6450045963813c22
3bf4ef981dabc4bd35b3faa1fc1dc2e70d0a8a4b9191195d3f744876b929c6443e0e717e6d6c78
183094715c8fa012364d8d8a913c13762caa2b86e1677c63d4f4d62e06a241eb603259230c57d1
14aa231320b310e524368c1c7b950be85fee831e0d6956535c2a7c6441b5554547b615d13d1581
6f908ac3263128d401a89e2f4b80dc0a6b3945b11da17111c77618e691b8ca7de529e774349ed2
15a6f5011cc6b76cf7e35b8b94428cd60b38cd24ae388399c100b6429e998868a555e993727acb
39c8d510a2c14f9200b1df8d0f815675ea3d5ae7e307d071bb82eb723381a83d5832a5fa4e8917
fa3bb3afedf147f67d02609313345874cad1b0d20721e01641eec234059356a928ee22d2c585d5
a8dfed763c38d466d98c593d7f1ca8d7e4598397bf177a3978ab707f63ffaf974e7d185c065da8
67da19058eb194dc04feffef536b49b72b2c5c8ec1b56567339b6a543f87fa28c6f6dca0f08ec8
4a194a7517df0437225e8ea1fc5c726b04ab799ce749d5234f8bc700d8f5ee8c3c52264db504be
e28e5e370ba07600f0b48c16eeba51f12e15bfeb9a39109b0e2510545060c7d71f4c8983ade846
7481d16e8af6e1a7935bfcb519f3bb5848eece4648f1a55765b2817cd8b145206921b84cfb6624
24e8917e1f908eb4fb65c7da82872bb30d954d3bbec71c3bba66360b6242e425d26a7c661c7383
a96ba61dd1b3e85e637d93d055d1a3f87c1f2536c8d3de59e1edfb0a916ad6a392533065306560
f80bc88e49758f65d61af48efc244a16b57e7c8c12eb03c4e8b3cd06a74d88f8226b1369975f62
76618bf1ba9988dddf14c3431b485099d87c401b35bc5d12f307feb0cf426466519e6fb3e46d0b
12a1bda1126794b5eaeb79203ef9448a31a6609a2260c8c4e86ad9b508d4ab7e1e2be697bf33d0
8dd750a6bc91713e4a353121fe4f5bb6285f3dcc6a616951c1fed307cef1026470dddfdb36d0c5
c937c320f823fc456d6134142bf1675c63f675431fadd0b3cfee000cc968993ea52291ad5033d0
24ba063e611c3a5211e36c07e1951066c66e1d402189b32e552daf34c9ad87b161dbd3123bc270
a4f4681f49c91e722c091defcbfc7be71b53b26b6fee625ff7a39780b7432e4d869a19ec1b7427
9da64b323874914c4ab47b665b21184dd40eb3ceb9254fc47e726ffaaef9c5aea57dbb50a618c5
68872443aceefbb67b5d2fea44825d5094f977e0c5f2ccee6af63f4d1abee2538982c437c79bda
dd7602d2bdafa2d3a00c328fdb63b499fd1c32b85e210a37b22710938b33114de6dfc5559a3730
7ad6b71803d3730055b141e11e4a30b94adb006e613071ea00dec97c21cb0d914eec828918c143
2474bf84fe05c2e82b2b2db61d0c84ccd3bf221858864a50c501d281beda4a4587bb86a8653027
1e7bf49b40ad69d8660035f84c7c9f50230fcc5e8b2e2ff21241f38a9eedd6c1e0fe15844dc8e2
078e0969aef02cfc9943e53080903b12d3a8f9cf46986c4e62d1c8ce83d93b1a013171bd446d33
ad458c7669fa82b8508e3874bf81f9e507712b560c6f4c04f97e58d1d157ca6cf67e7ddbba13a9
b52c837e5a59d4c007e5e340b0d7919e0bfcb62e7b1640e6db2fef38e3bf2a53e91caf69ce5dc0
58810fa2cde129486c7001437bef99dceb9456752f13405f09bf48302c8fa40db8c9890cb038a3
ef7c29d54247e617f5930346984861bb8f462e706047e8590431833d60457f839a11927aa0a26c
e4754186e095c03fa260a347682e02b408ae140fc62389397410db7dda34bdb8b9551781ce222f
f93950489ce4b8973a5afe9ad2e8c9984073297d4a8d734dcf612b27d014fb19a1e4385e95fc59
66f31aad14b347fd48ba99e8207ffdabc084bc6cec2cb3a68f6ea82742bbb9f7d809530a26f498
e750cf423cbf4961bef4662bda9854375ac902cba9626db4eb362fe3b0574d5e64e7ba7e1ff553
c992cd3e3f169086355bb62c59ed675ca54893b06f8846a7ca57d4392c9eddadcad5c6e192abaa
a700d4e7385c56d2f9de3c4489ac11af7a03f010082d042b725378e59e2a7998dee93a12e21764
7ed96008a6b52e90c16604376976de7b187edceed1261f540a0be3eba806921c0b0c4b353265cc
c3ffafac813f4f8020ab4697c705c68ee1a52f65a2fc4e317470ec340000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%!FontType1-1.1 f-1-0 1.0
11 dict begin
/FontName /f-1-0 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/FontBBox {0 -235 863 727 } readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 1 /uni0056 put
dup 2 /uni004D put
dup 3 /uni0031 put
dup 4 /uni0032 put
dup 5 /uni0057 put
dup 6 /uni006F put
dup 7 /uni0072 put
dup 8 /uni006B put
dup 9 /uni0065 put
dup 10 /uni0020 put
dup 11 /uni0070 put
dup 12 /uni0069 put
dup 13 /uni0076 put
dup 14 /uni0061 put
dup 15 /uni0074 put
dup 16 /uni006D put
dup 17 /uni002D put
dup 18 /uni006E put
dup 19 /uni0075 put
dup 20 /uni006C put
dup 21 /uni0062 put
dup 22 /uni0063 put
dup 23 /uni0073 put
dup 24 /uni0066 put
dup 25 /uni0068 put
dup 26 /uni0077 put
dup 27 /uni0067 put
readonly def
currentdict end
currentfile eexec
f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467
b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de
800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f
2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b
9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799
69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5
8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251caf38b5733b65e1
ae5ed9ec42ebee256077e561ea069a72fa6ddc3792643c08a3ebdf22fefac7396401f4ef69af60
fb427726673f2a913195b4168b6da17f5c62ad9ca9234569ed4789c4938da69be46e27567df5fb
fed82edf53ce8193c8f6c52a133ff6fc1bf814ee6ff32a0a39480b1a62695ac0f349902e08b28b
30b87515ec5a046d818fba902951bdc40ce6a5dd3a66b1b7dfff5f2afd55dca5531adbcae9137d
46e3ecd4d21bc53ecc83162147486d75ed89a936a308a05a2a9104677217501b181c133376e346
0daaf5a18e4d257148779d9b6636036726b3cb8e7ba849c547b8a5cf52d9f41e192be1c279d659
6c4e350630107d9dd4ff8d8f6f4e0d844bf4229d9276b1cb66dfffc1018cce0b0fcb2fc1d0e5d3
9ca22bed275fb1e3612ac5b63e40d0d63e422bdf6ee71aaef268e1b9f2ba82c687c9766a824df4
0b2d55a13e8d867d4743c6d3877c7452636f59d55b8dc574af9d26550cf2bbdef881807a82a818
8c098e3107157ac844e6a914934db2e9659c56e8e7299024239e087ed70e3b18ea2c07fa30f063
f003357f5291a206ffe749c62d946ce8364d38ce1cb4a9538e0e955123db1a00cbe96b6fcc7011
6c8f489b02f5764d6b87891bb10430e01e152241d5ff1b2ef62efdf6d1db4266f6c3710d6fcc83
a0380bfa8374325cc0eded3e066deb024c6942485387e9168cd6a436493217ff42201c4b9fc17c
222e0944880315e05bac4f5bb918ccd6e4a340a65f82ad3377bb55f1482f1b0612a5f981d41107
cc12406a3325efa64f11512df93d3a72b2f823361fa296dee4bbd4dfc36507e1e6f60f5a9e2096
fec1a0da3be5b1f536c535168c3f2d3091cd03e726b1ea1d49c5082df09932b83331201a2e4452
d374b98820fbed50ee1dd63ccbb3418db11694598b332c5bce04ef6bc6d9c0f31f4c0dfbcbbb3f
66df05e3e5459b8933c5c4875e4b832ad010fcbb7950d45ef26a1d45a44c5087f1de96709339a4
1d9307d6fa8aa8ff83beecf39b9bfcec01eebcc9c8b24403da881a4b57f4a7f2252dd4fdaa9c8c
65ac4da459eb208bfdef142df722a33eceb88f7a7e15cad54bc8dc1bbdad102b6cdffa6fb7ea24
2bc8d86d2ee9b2b695a412f3536976fe0849a3e2bedd5507679759c14667b55278b8c601de1c21
69ee99125bbaefb70783c4543959e5324fed2629e26d96b4d44f029f4e9cd0ba43899b6d240430
4cd0f6d93e4d20d692bc2438b25096ec1171c1929c1741b62002d67c175a06818143817b062947
303ff2ec3fa02dad4981198fe6477286eb7914b7bfa386e5a243729537c1301d1b3294227a6def
73c60d90a374f5cd0a86b2889f83bff714e5aff94082faa4192063e36c60dfaf760b66c5ca0102
d2cabf56324d4a470d9855ab60fccf50838635c0af516a01d23dad80cb1eea34bdeb2f742f2fae
a4dcd7c631cc9dd905babc551c835ac7f5f9062b9cedc015445893b590dbdbd587db693ed53859
ce734fd4eef128482250d1fa86c7f5efcaf375aae07d36a2ee755a6d575be1f876e911fd31c5d6
987752e6faa8ad725cfcc84a0b6e1a9a481956770d8770971b3ff43f3000e26789555ebe49b2a7
afc30705c848cf11801cc4674c797c0aba72b0e22d08e8d93fbdb5be0b6f6e44636dabb517178c
9dfe59ce3c75e5d1e1abb56af86bc8ecd963f385681946c8c95b33ad5cc41550f15fa43a5be3a5
45fbeb4865f702c76fbf5206bd67feb1df779ecd90b000b2bbb0da204772371fdf11466f40abd9
6801a56418d2441a1a74c64e8c900abe4dea56a17a7a22e7ef632f4c73beedf3bb5281a4823586
5a4c26fa4478750315bf01428cdd7f83428c6658883e4dc25d22bf248430caa0b8efff57f71a69
23f8370ec9a7abdde13f17746b26733414221eb964e7a7ae1e73911155a4e79319a5e61e1f4739
6f4dd4246bff9133c38df45635eca056234b02f219df12278a420ebcad359ca35ec166c81ddc7d
bc0f1130409748c2241f14566c3165b430df2e686be46a783bd5e0935b9a098ac5da8bae7a80bb
8df6f0451e1557ddcbd0f3820d89e7855bcf393f57adc576f3cbe7e6c9e912b729dc47c10bfc77
fa9744c608d44c7715263dc76179282a1fcd6c705e360c0c71ad674566e61fd33ce797efafe23d
14177b64e054b313c4d01994bdf1c17dc661579a37fbf409a67769b510be7a12d24c84feee9b06
bfab2f71b46df65b83394fac039f336e15e8ee3c004081e22a127c9e31311962f32d40ae44bef2
f9ed8879ba92445c554a6e653377fb4d167a8dc798ea941dd8b3d46de19c8fa3cec568c18ddb76
27fa3be0a5a86b52f10ba88387a50d1885aa24d8020203ef294ac48e1664544fc27063c8eed829
638de0772b0918b7e6473390f0bef6649639af0523235b44c56fc612950413814114d5d942a5fc
537283cfa90832eb0661a4295c3062e220d8b218a1bf05652b8ccb66edae0e7c60ac1169c68611
7fc908e4ee0520ca8f3f16597c13b05dbb0ca7e50b05e3c63465f3304f0c0cdd9bd7e2cca23158
fec58171c620d94399ca61c0c10b23113f6a3b94c41966d6890030a64174151bda235b3e2fb439
6f7f368a138466847a130e9248992cea57226c068877f942d66fa80d02c103caeda78202b09795
a17af5a01e5da79a724731b2268b144500fa38608b4ed3838198d10d63f2c7ef3b21fe316ba2e2
4685d391512fa0b3fb18dc0ddb751d3053f7f363e150b2ae0b64d389f3c8a61b8825f121ae4f04
2f8b7ad2d45d9399dbeac6a459c3abc8d36546f4f91d6d9480e90b894b5c2ada32148e4e4b425c
96fbe9f655600b3edbc42f2c5aae0c909f4888b5c700993d0e9bb89b4a1e7ea30693848787b00e
0da2d7c6d084a75b3d61875bd158d0374a388e5858368c949bbb1a2dae9ca4da96f844d9a26209
4c1a524960a3a5e96dde86a4d91e3915de07fa3c31d87a7119b7c07aebc0784964972d941ec585
20b5f6ee7eba81aedfda62d2e348e50f6f10d1359a8df51de5268aeb6f06344bdcc0c9594fe9e9
c6f866a911e09fb0a7e7928a57d12b69b9abc8cb87a1d5de27765eb0696aafce6b58655af7175f
f9c6f10e2f376836c8c58a279e14a8f7b04196b67521376104ffe6cb13b93555a3f2a322dce5d8
e5d533388693374347c4acaf56159b724b67eb85e57c7787b69fa12358e9191c4b0db0e6107afc
47fe12eb3fac3a4a6ef73946774d8a30e65ca0ee45ac91cfaa002bf48131a637bae4e8143083ea
de945a8a231406e689a9056814c286d2a816033ff0e659b1f257576a7346b694cfa2e8e4f248cd
b9717c549f062140a660e76d624835287124609b9ddf9021b7976ee5285c64ee9558f2451b60cd
4ac52642be48a4af2c6e3ff13fc5434d0c64e22b874c1188da57894d8123fccbebef6a6aa83f8a
6563204f063d3e21293b54ebc8b2d1d4987619dbe08dd2ee3caca415d185ad0408fb6f07cc5745
9dab0011b42f33d6c2bccf30ce5283e8c2da43c732aa7f67efeb14871da8b934db317d98f96425
50cd12b5b61b904b0acfd03ba7b42870af25ac7f563843678626ac394e734e12678ca05130e081
2c23e085af0e46fbd682f72edee7cb4304151df52c76faa6573af526fccfecbbc1e345ade26ac3
b7e6c318cda32c431e6dc30791e65f6caf70b9e0730a4b0fb588cfa7b5722a06e346bf7b0070ca
fa0dd3194aa675e9a4e51949877e8f7fb576b7804178de23459060d34269530bfa0bd894cf68fe
661161aed7608b6b4a67d2741ff658616c9d8a2b10b2e34897bd11bcd1b8ad26e4c16fe8623bca
fbef473d69707ac27a0f05da69233bd2d37a3fe3a3e1afc106804a76952304e031360235e5c133
7ee4db6291eee67fcea7e0534258cc53045bfc87c177608b5b86ec87f104ab8ca98ff54b5dc936
b999b7fae912f9d17e3014b5883071cf9a1c36397a2a33080e564ad9a083e08f9782663bb113d0
4a12bbd8c8cc8ae3dd34514a65b296b2ebe0347d5532c14ac1da76fab3391d8b1dd07e616c9a05
efaec72b160000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%!FontType1-1.1 f-2-0 1.0
11 dict begin
/FontName /f-2-0 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/FontBBox {0 0 783 718 } readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 1 /uni006E put
dup 2 /uni006B put
dup 3 /uni006D put
readonly def
currentdict end
currentfile eexec
f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467
b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de
800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f
2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b
9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799
69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5
8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251ca87c5560dc92bb
34e8205b91e6fd735b4ec0f4176689808e820e598074961f6b7d313b858a002fad9cd5b7eb26be
5816d7219c0a42e3d3867b4c0c143f7d89f5a7906d9f4de81c5c3b7a6e410425cccb618988c16c
54024f707a299a545b01d0357f818f466ed9f23ab512d073f83b3caffaff61fae5190354883642
e31b7ce97eb1d208f306ad0817d1aaee5d2d915173573c7963ce9391dee269a3e703626a0fc9ba
d18f42f72c70a0bf330fe9205bb40c969c693088b66e62cbd329954b4e8eded48f9b9f4813d158
8848c14649da3cf26e32148941cb73dbdcc10ede96fd10653edae63a211c08ae22ad3d1f0d3d5c
0dd01b294bab7ff4b86e34833b24556b1518d1fc4db017476b3cf125f3aba75aee298444c91fb0
d4cdd7156fde2011e672643aa6d86b36edfcbf3754aef57a11b016167aa1ec48bc5b2ef4971874
a6ff374b94babae6fc8c55ab80ded38e8babcacd81f2f404843d76e9fbb6e26748c3c6ae0ab965
0604b75124647b0f2c5ddff371a4b25f203e05cf61dcc24e4321820b1a250eb437d7bcdc5d3413
62e72154fde11b5917144f45b17f461c93de37b26f2feedb15791f1871b71de0bd4f5b96e1db95
b3ae6c88c71050c37971976b09111a3a92e22ed89bdc7de7413ef718bf5fd140d1bb882c68de5b
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: -167 0 256 305
%%EndPageSetup
q -167 0 423 305 rectclip q
0 217.706 257 -218 re W n
0.666667 0.8 0.933333 rg
9.602 216.104 m 247.199 216.104 l 251.633 216.104 255.199 212.538
255.199 208.104 c 255.199 34.905 l 255.199 30.475 251.633 26.905
247.199 26.905 c 9.602 26.905 l 5.168 26.905 1.602 30.475 1.602 34.905
c 1.602 208.104 l 1.602 212.538 5.168 216.104 9.602 216.104 c h
9.602 216.104 m f
0.992157 0.792157 0.00392157 rg
3.2 w
0 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
199.957 119.219 m 199.957 96.879 l 165.754 96.879 l 165.754 86.277 l S Q
0.00392157 0.2 0.592157 rg
4.8 w
q 1 0 0 -1 0 217.705566 cm
104.02 79.277 m 104.02 59.676 l 56.316 59.676 l 56.316 47.277 l S Q
0.2 0.6 0 rg
3.2 w
q 1 0 0 -1 0 217.705566 cm
146.535 81.277 m 146.535 61.676 l 189.961 61.676 l 189.961 33.277 l S Q
0.992157 0.792157 0.00392157 rg
q 1 0 0 -1 0 217.705566 cm
199.957 51.879 m 199.957 68.277 l 156.703 68.277 l 156.703 78.879 l S Q
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 93.477416 260.392966 ]
makepattern setpattern
4.8 w
1 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
94.402 79.277 m 94.402 67.676 l 46.98 67.676 l 46.98 47.277 l S Q
Q q
0 217.706 257 -218 re W n
0.00392157 0.2 0.592157 rg
127.531 211.569 m 123.68 201.092 l 124.375 201.592 124.66 201.917
125.457 202.12 c 125.457 137.217 l 129.605 137.217 l 129.605 202.143 l
130.395 201.944 130.723 201.596 131.406 201.092 c h
127.531 211.569 m f
0.992157 0.792157 0.00392157 rg
3.2 w
0 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
53.355 116.105 m 53.355 96.879 l 90.355 96.879 l 90.355 86.277 l S Q
0 0.2 0.4 rg
163.309 104.612 m 236.559 104.612 l 240.992 104.612 244.559 101.042
244.559 96.612 c 244.559 46.807 l 244.559 42.374 240.992 38.807 236.559
38.807 c 163.309 38.807 l 158.875 38.807 155.309 42.374 155.309 46.807
c 155.309 96.612 l 155.309 101.042 158.875 104.612 163.309 104.612 c h
163.309 104.612 m f
18.109 104.612 m 91.359 104.612 l 95.793 104.612 99.359 101.042 99.359
96.612 c 99.359 46.807 l 99.359 42.374 95.793 38.807 91.359 38.807 c
18.109 38.807 l 13.676 38.807 10.109 42.374 10.109 46.807 c 10.109
96.612 l 10.109 101.042 13.676 104.612 18.109 104.612 c h
18.109 104.612 m f
0.2 0.6 0 rg
q 1 0 0 -1 0 217.705566 cm
87.766 153.277 m 87.766 133.676 l S Q
0.933333 0.780392 0.243137 rg
q 1 0 0 -1 0 217.705566 cm
232.566 153.277 m 232.566 133.676 l S Q
0.2 0.6 0 rg
q 1 0 0 -1 0 217.705566 cm
188.148 153.277 m 188.148 133.676 l S Q
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 93.477416 263.592966 ]
makepattern setpattern
3.2 w
1 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
167.332 144.879 m 167.332 132.477 l S Q
Q q
0 217.706 257 -218 re W n
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 93.477416 260.392966 ]
makepattern setpattern
3.2 w
1 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
142.012 85.676 m 142.012 105.277 l 171.332 105.277 l 171.332 133.676 l S Q
Q q
0 217.706 257 -218 re W n
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 93.477416 260.392966 ]
makepattern setpattern
3.2 w
1 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
110.629 85.676 m 110.629 105.277 l 85.734 105.277 l 85.734 133.676 l S Q
Q q
0 217.706 257 -218 re W n
0.933333 0.780392 0.243137 rg
3.2 w
0 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
43.348 153.277 m 43.348 133.676 l S Q
0.2 0.6 0 rg
q 1 0 0 -1 0 217.705566 cm
22.148 153.277 m 22.148 133.676 l S Q
1 g
21.379 74.338 m 22.918 74.338 l 26.922 74.338 30.148 70.772 30.148
66.338 c 30.148 50.338 l 30.148 45.909 26.922 42.338 22.918 42.338 c
21.379 42.338 l 17.371 42.338 14.148 45.909 14.148 50.338 c 14.148
66.338 l 14.148 70.772 17.371 74.338 21.379 74.338 c h
21.379 74.338 m f
0 0.2 0.4 rg
0.8 w
0 j
q 1 0 0 -1 0 217.705566 cm
21.379 143.367 m 22.918 143.367 l 26.922 143.367 30.148 146.934 30.148
151.367 c 30.148 167.367 l 30.148 171.797 26.922 175.367 22.918 175.367
c 21.379 175.367 l 17.371 175.367 14.148 171.797 14.148 167.367 c
14.148 151.367 l 14.148 146.934 17.371 143.367 21.379 143.367 c h
21.379 143.367 m S Q
1 g
42.578 74.338 m 44.117 74.338 l 48.121 74.338 51.348 70.772 51.348
66.338 c 51.348 50.338 l 51.348 45.909 48.121 42.338 44.117 42.338 c
42.578 42.338 l 38.57 42.338 35.348 45.909 35.348 50.338 c 35.348
66.338 l 35.348 70.772 38.57 74.338 42.578 74.338 c h
42.578 74.338 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
42.578 143.367 m 44.117 143.367 l 48.121 143.367 51.348 146.934 51.348
151.367 c 51.348 167.367 l 51.348 171.797 48.121 175.367 44.117 175.367
c 42.578 175.367 l 38.57 175.367 35.348 171.797 35.348 167.367 c 35.348
151.367 l 35.348 146.934 38.57 143.367 42.578 143.367 c h
42.578 143.367 m S Q
1 g
86.996 74.338 m 88.535 74.338 l 92.543 74.338 95.766 70.772 95.766
66.338 c 95.766 50.338 l 95.766 45.909 92.543 42.338 88.535 42.338 c
86.996 42.338 l 82.992 42.338 79.766 45.909 79.766 50.338 c 79.766
66.338 l 79.766 70.772 82.992 74.338 86.996 74.338 c h
86.996 74.338 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
86.996 143.367 m 88.535 143.367 l 92.543 143.367 95.766 146.934 95.766
151.367 c 95.766 167.367 l 95.766 171.797 92.543 175.367 88.535 175.367
c 86.996 175.367 l 82.992 175.367 79.766 171.797 79.766 167.367 c
79.766 151.367 l 79.766 146.934 82.992 143.367 86.996 143.367 c h
86.996 143.367 m S Q
1 1 0.6 rg
21.379 91.877 m 88.535 91.877 l 92.543 91.877 95.766 89.03 95.766
85.491 c 95.766 85.209 l 95.766 81.674 92.543 78.827 88.535 78.827 c
21.379 78.827 l 17.371 78.827 14.148 81.674 14.148 85.209 c 14.148
85.491 l 14.148 89.03 17.371 91.877 21.379 91.877 c h
21.379 91.877 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
21.379 125.828 m 88.535 125.828 l 92.543 125.828 95.766 128.676 95.766
132.215 c 95.766 132.496 l 95.766 136.031 92.543 138.879 88.535 138.879
c 21.379 138.879 l 17.371 138.879 14.148 136.031 14.148 132.496 c
14.148 132.215 l 14.148 128.676 17.371 125.828 21.379 125.828 c h
21.379 125.828 m S Q
0 g
BT
11.2 0 0 11.2 21.548527 82.190721 Tm
/f-0-0 1 Tf
[<01>1<02>-1<03>-1<04>-1<05>1<06>-1<07>1<0809>1<0a0b0c>]TJ
ET
BT
0 11.2 -11.2 0 26.044474 48.151267 Tm
/f-1-0 1 Tf
<010203>Tj
ET
BT
0 11.2 -11.2 0 47.244474 47.412058 Tm
/f-1-0 1 Tf
<010204>Tj
ET
BT
0 11.2 -11.2 0 91.663969 46.308885 Tm
/f-1-0 1 Tf
<0102>Tj
ET
BT
0 11.2 -11.2 0 91.663969 62.47451 Tm
/f-2-0 1 Tf
<01>Tj
ET
0 0.2 0.4 rg
18.59 196.053 m 102.59 196.053 l 107.023 196.053 110.59 192.487 110.59
188.053 c 110.59 173.471 l 110.59 169.038 107.023 165.471 102.59
165.471 c 18.59 165.471 l 14.16 165.471 10.59 169.038 10.59 173.471 c
10.59 188.053 l 10.59 192.487 14.16 196.053 18.59 196.053 c h
18.59 196.053 m f
q 1 0 0 -1 0 217.705566 cm
18.59 21.652 m 102.59 21.652 l 107.023 21.652 110.59 25.219 110.59
29.652 c 110.59 44.234 l 110.59 48.668 107.023 52.234 102.59 52.234 c
18.59 52.234 l 14.16 52.234 10.59 48.668 10.59 44.234 c 10.59 29.652 l
10.59 25.219 14.16 21.652 18.59 21.652 c h
18.59 21.652 m S Q
1 g
BT
12.8 0 0 12.8 38.540299 176.276316 Tm
/f-0-0 1 Tf
<0d090e03080f1010>Tj
ET
74.062 61.639 m 75.613 61.639 76.863 60.167 76.863 58.338 c 76.863
56.51 75.613 55.042 74.062 55.042 c 72.512 55.042 71.262 56.51 71.262
58.338 c 71.262 60.167 72.512 61.639 74.062 61.639 c h
74.062 61.639 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
74.062 156.066 m 75.613 156.066 76.863 157.539 76.863 159.367 c 76.863
161.195 75.613 162.664 74.062 162.664 c 72.512 162.664 71.262 161.195
71.262 159.367 c 71.262 157.539 72.512 156.066 74.062 156.066 c h
74.062 156.066 m S Q
1 g
65.555 61.639 m 67.109 61.639 68.355 60.167 68.355 58.338 c 68.355
56.51 67.109 55.042 65.555 55.042 c 64.004 55.042 62.758 56.51 62.758
58.338 c 62.758 60.167 64.004 61.639 65.555 61.639 c h
65.555 61.639 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
65.555 156.066 m 67.109 156.066 68.355 157.539 68.355 159.367 c 68.355
161.195 67.109 162.664 65.555 162.664 c 64.004 162.664 62.758 161.195
62.758 159.367 c 62.758 157.539 64.004 156.066 65.555 156.066 c h
65.555 156.066 m S Q
1 g
57.051 61.639 m 58.602 61.639 59.852 60.167 59.852 58.338 c 59.852
56.51 58.602 55.042 57.051 55.042 c 55.5 55.042 54.25 56.51 54.25
58.338 c 54.25 60.167 55.5 61.639 57.051 61.639 c h
57.051 61.639 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
57.051 156.066 m 58.602 156.066 59.852 157.539 59.852 159.367 c 59.852
161.195 58.602 162.664 57.051 162.664 c 55.5 162.664 54.25 161.195
54.25 159.367 c 54.25 157.539 55.5 156.066 57.051 156.066 c h
57.051 156.066 m S Q
1 g
166.176 74.338 m 167.715 74.338 l 171.723 74.338 174.945 70.772 174.945
66.338 c 174.945 50.338 l 174.945 45.909 171.723 42.338 167.715 42.338
c 166.176 42.338 l 162.172 42.338 158.945 45.909 158.945 50.338 c
158.945 66.338 l 158.945 70.772 162.172 74.338 166.176 74.338 c h
166.176 74.338 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
166.176 143.367 m 167.715 143.367 l 171.723 143.367 174.945 146.934
174.945 151.367 c 174.945 167.367 l 174.945 171.797 171.723 175.367
167.715 175.367 c 166.176 175.367 l 162.172 175.367 158.945 171.797
158.945 167.367 c 158.945 151.367 l 158.945 146.934 162.172 143.367
166.176 143.367 c h
166.176 143.367 m S Q
1 g
219.262 61.639 m 220.812 61.639 222.062 60.167 222.062 58.338 c 222.062
56.51 220.812 55.042 219.262 55.042 c 217.711 55.042 216.461 56.51
216.461 58.338 c 216.461 60.167 217.711 61.639 219.262 61.639 c h
219.262 61.639 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
219.262 156.066 m 220.812 156.066 222.062 157.539 222.062 159.367 c
222.062 161.195 220.812 162.664 219.262 162.664 c 217.711 162.664
216.461 161.195 216.461 159.367 c 216.461 157.539 217.711 156.066
219.262 156.066 c h
219.262 156.066 m S Q
1 g
187.379 74.338 m 188.918 74.338 l 192.922 74.338 196.148 70.772 196.148
66.338 c 196.148 50.338 l 196.148 45.909 192.922 42.338 188.918 42.338
c 187.379 42.338 l 183.371 42.338 180.148 45.909 180.148 50.338 c
180.148 66.338 l 180.148 70.772 183.371 74.338 187.379 74.338 c h
187.379 74.338 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
187.379 143.367 m 188.918 143.367 l 192.922 143.367 196.148 146.934
196.148 151.367 c 196.148 167.367 l 196.148 171.797 192.922 175.367
188.918 175.367 c 187.379 175.367 l 183.371 175.367 180.148 171.797
180.148 167.367 c 180.148 151.367 l 180.148 146.934 183.371 143.367
187.379 143.367 c h
187.379 143.367 m S Q
1 g
210.758 61.639 m 212.309 61.639 213.559 60.167 213.559 58.338 c 213.559
56.51 212.309 55.042 210.758 55.042 c 209.207 55.042 207.957 56.51
207.957 58.338 c 207.957 60.167 209.207 61.639 210.758 61.639 c h
210.758 61.639 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
210.758 156.066 m 212.309 156.066 213.559 157.539 213.559 159.367 c
213.559 161.195 212.309 162.664 210.758 162.664 c 209.207 162.664
207.957 161.195 207.957 159.367 c 207.957 157.539 209.207 156.066
210.758 156.066 c h
210.758 156.066 m S Q
1 g
231.797 74.338 m 233.336 74.338 l 237.34 74.338 240.566 70.772 240.566
66.338 c 240.566 50.338 l 240.566 45.909 237.34 42.338 233.336 42.338 c
231.797 42.338 l 227.793 42.338 224.566 45.909 224.566 50.338 c 224.566
66.338 l 224.566 70.772 227.793 74.338 231.797 74.338 c h
231.797 74.338 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
231.797 143.367 m 233.336 143.367 l 237.34 143.367 240.566 146.934
240.566 151.367 c 240.566 167.367 l 240.566 171.797 237.34 175.367
233.336 175.367 c 231.797 175.367 l 227.793 175.367 224.566 171.797
224.566 167.367 c 224.566 151.367 l 224.566 146.934 227.793 143.367
231.797 143.367 c h
231.797 143.367 m S Q
1 g
202.25 61.639 m 203.805 61.639 205.051 60.167 205.051 58.338 c 205.051
56.51 203.805 55.042 202.25 55.042 c 200.699 55.042 199.453 56.51
199.453 58.338 c 199.453 60.167 200.699 61.639 202.25 61.639 c h
202.25 61.639 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
202.25 156.066 m 203.805 156.066 205.051 157.539 205.051 159.367 c
205.051 161.195 203.805 162.664 202.25 162.664 c 200.699 162.664
199.453 161.195 199.453 159.367 c 199.453 157.539 200.699 156.066
202.25 156.066 c h
202.25 156.066 m S Q
1 1 0.6 rg
166.176 91.877 m 233.336 91.877 l 237.34 91.877 240.566 89.03 240.566
85.491 c 240.566 85.209 l 240.566 81.674 237.34 78.827 233.336 78.827 c
166.176 78.827 l 162.172 78.827 158.945 81.674 158.945 85.209 c 158.945
85.491 l 158.945 89.03 162.172 91.877 166.176 91.877 c h
166.176 91.877 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
166.176 125.828 m 233.336 125.828 l 237.34 125.828 240.566 128.676
240.566 132.215 c 240.566 132.496 l 240.566 136.031 237.34 138.879
233.336 138.879 c 166.176 138.879 l 162.172 138.879 158.945 136.031
158.945 132.496 c 158.945 132.215 l 158.945 128.676 162.172 125.828
166.176 125.828 c h
166.176 125.828 m S Q
1 g
BT
12.8 0 0 12.8 174.42349 93.828221 Tm
/f-1-0 1 Tf
[<050607>1<08>1<09>-1<070a>]TJ
ET
BT
12.8 0 0 12.8 217.64849 93.828221 Tm
/f-2-0 1 Tf
<02>Tj
ET
0 g
BT
11.2 0 0 11.2 166.348514 82.190721 Tm
/f-0-0 1 Tf
[<01>1<02>-1<03>-1<04>-1<05>1<06>-1<07>1<0809>1<0a0b0c>]TJ
ET
0 0.2 0.4 rg
BT
0 11.2 -11.2 0 170.017753 49.408836 Tm
/f-0-0 1 Tf
<110812>Tj
ET
0 g
BT
0 11.2 -11.2 0 236.463993 44.634471 Tm
/f-1-0 1 Tf
<0102>Tj
ET
BT
0 11.2 -11.2 0 236.463993 60.800096 Tm
/f-2-0 1 Tf
<03>Tj
ET
0 0.2 0.4 rg
111.848 70.409 m 113.398 70.409 114.648 68.936 114.648 67.108 c 114.648
65.28 113.398 63.807 111.848 63.807 c 110.297 63.807 109.047 65.28
109.047 67.108 c 109.047 68.936 110.297 70.409 111.848 70.409 c h
111.848 70.409 m f
127.133 70.409 m 128.684 70.409 129.934 68.936 129.934 67.108 c 129.934
65.28 128.684 63.807 127.133 63.807 c 125.582 63.807 124.332 65.28
124.332 67.108 c 124.332 68.936 125.582 70.409 127.133 70.409 c h
127.133 70.409 m f
142.422 70.409 m 143.973 70.409 145.219 68.936 145.219 67.108 c 145.219
65.28 143.973 63.807 142.422 63.807 c 140.871 63.807 139.621 65.28
139.621 67.108 c 139.621 68.936 140.871 70.409 142.422 70.409 c h
142.422 70.409 m f
1 g
BT
12.8 0 0 12.8 30.66348 93.828221 Tm
/f-1-0 1 Tf
[<050607>1<08>1<09>-1<070a>1<03>]TJ
ET
0 g
BT
0 11.2 -11.2 0 192.044486 47.412058 Tm
/f-1-0 1 Tf
<010204>Tj
ET
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 93.477416 260.392966 ]
makepattern setpattern
172.68 136.092 m 171.844 136.053 171.117 135.256 171.156 134.417 c
171.195 133.581 171.992 132.854 172.832 132.893 c 243.129 132.893 l
243.977 132.881 244.754 133.647 244.754 134.495 c 244.754 135.338
243.977 136.104 243.129 136.092 c 172.832 136.092 l 172.781 136.096
172.73 136.096 172.68 136.092 c h
249.535 134.526 m 239.059 138.374 l 239.559 137.678 239.883 136.901
240.086 136.104 c 157.668 136.417 157.742 132.909 240.109 132.909 c
239.91 132.12 239.562 131.334 239.059 130.651 c h
249.535 134.526 m f
Q q
0 217.706 257 -218 re W n
1 1 0.6 rg
88.379 141.03 m 166.285 141.03 l 170.293 141.03 173.516 138.182 173.516
134.647 c 173.516 134.366 l 173.516 130.827 170.293 127.979 166.285
127.979 c 88.379 127.979 l 84.375 127.979 81.148 130.827 81.148 134.366
c 81.148 134.647 l 81.148 138.182 84.375 141.03 88.379 141.03 c h
88.379 141.03 m f
0 0.2 0.4 rg
0.8 w
0 J
0 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
88.379 76.676 m 166.285 76.676 l 170.293 76.676 173.516 79.523 173.516
83.059 c 173.516 83.34 l 173.516 86.879 170.293 89.727 166.285 89.727 c
88.379 89.727 l 84.375 89.727 81.148 86.879 81.148 83.34 c 81.148
83.059 l 81.148 79.523 84.375 76.676 88.379 76.676 c h
88.379 76.676 m S Q
0 g
BT
11.2 0 0 11.2 89.266974 130.579929 Tm
/f-0-0 1 Tf
[<1303>-1<0a>-1<0814>1<0e>1<150516>1<0809>1<0a0b0c>]TJ
ET
0 0.2 0.4 rg
151.391 196.053 m 235.391 196.053 l 239.824 196.053 243.391 192.487
243.391 188.053 c 243.391 173.471 l 243.391 169.038 239.824 165.471
235.391 165.471 c 151.391 165.471 l 146.961 165.471 143.391 169.038
143.391 173.471 c 143.391 188.053 l 143.391 192.487 146.961 196.053
151.391 196.053 c h
151.391 196.053 m f
q 1 0 0 -1 0 217.705566 cm
151.391 21.652 m 235.391 21.652 l 239.824 21.652 243.391 25.219 243.391
29.652 c 243.391 44.234 l 243.391 48.668 239.824 52.234 235.391 52.234
c 151.391 52.234 l 146.961 52.234 143.391 48.668 143.391 44.234 c
143.391 29.652 l 143.391 25.219 146.961 21.652 151.391 21.652 c h
151.391 21.652 m S Q
1 g
BT
12.8 0 0 12.8 163.433988 176.353123 Tm
/f-0-0 1 Tf
[<1703>-1<0f>1<18>-1<05>1<04>-1<14>1<18>-1<03>]TJ
ET
0.2 0.6 0 rg
BT
8 0 0 8 203.652254 14.833708 Tm
/f-1-0 1 Tf
[<0b>-1<070c0d0e0f09>-1<0a>1<0d>-1<10>1<111209>-1<0f>]TJ
ET
0.596078 0.988235 0.4 rg
199.852 16.745 m 184.051 16.745 l f
0.933333 0.780392 0.243137 rg
4.8 w
1 j
q 1 0 0 -1 0 217.705566 cm
199.852 200.961 m 184.051 200.961 l S Q
0.00392157 0.133333 0.392157 rg
BT
8 0 0 8 111.342377 3.376001 Tm
/f-1-0 1 Tf
[<0c12>-1<0f09>-1<07>1<12>-1<09>-1<0f0a>1<130b>-1<140c>-1<1208>]TJ
ET
0.00392157 0.2 0.592157 rg
4.8 w
q 1 0 0 -1 0 217.705566 cm
107.496 212.344 m 91.695 212.344 l S Q
0.00392157 0.352941 0.00392157 rg
BT
8 0 0 8 111.294379 15.497829 Tm
/f-1-0 1 Tf
[<0b>-1<1315140c16>-1<0a>1<0d>-1<10>1<11>1<12>-1<09>-1<0f>]TJ
ET
0.2 0.6 0 rg
107.496 17.483 m 91.695 17.483 l f
4.8 w
q 1 0 0 -1 0 217.705566 cm
107.496 200.223 m 91.695 200.223 l S Q
0.596078 0.00392157 0.00392157 rg
BT
6.4 0 0 6.4 221.453568 145.33115 Tm
/f-1-0 1 Tf
[<07>1<09>-1<170f0a>1<06180a>1<0f1909>]TJ
ET
BT
6.4 0 0 6.4 227.241068 138.93115 Tm
/f-1-0 1 Tf
[<1209>-1<0f>-1<1a0607>1<08>]TJ
ET
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 -166.6779 183.662582 ]
makepattern setpattern
4.8 w
0 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
19.801 200.223 m 4 200.223 l S Q
Q q
0 217.706 257 -218 re W n
0.596078 0.00392157 0.00392157 rg
BT
8 0 0 8 23.60001 15.497837 Tm
/f-1-0 1 Tf
[<10>1<13140f0c>-1<0b>-1<1409>-1<0a>1<0d>-1<140e>1<12>-1<17>]TJ
ET
0.992157 0.792157 0.00392157 rg
4.8 w
0 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
19.801 211.949 m 4 211.949 l S Q
0.984314 0.545098 0 rg
BT
8 0 0 8 23.60001 3.896001 Tm
/f-1-0 1 Tf
[<10>1<0e120e1b>1<09>-1<100912>-1<0f>]TJ
ET
Q Q
showpage
%%Trailer
count op_count sub {pop} repeat
countdictstack dict_count sub {end} repeat
cairo_eps_state restore
%%EOF
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="321"
height="272.13196"
id="svg7426"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="netarch.svg">
<defs
id="defs7428">
<pattern
patternTransform="translate(289.13949,427.25293)"
id="pattern7424"
xlink:href="#pattern7199"
inkscape:collect="always" />
<pattern
patternTransform="translate(289.13949,427.25293)"
id="pattern7422"
xlink:href="#pattern7199"
inkscape:collect="always" />
<pattern
patternTransform="translate(289.13949,427.25293)"
id="pattern7420"
xlink:href="#pattern7199"
inkscape:collect="always" />
<pattern
patternTransform="translate(289.13949,427.25293)"
id="pattern7418"
xlink:href="#pattern7199"
inkscape:collect="always" />
<pattern
patternTransform="translate(289.13949,427.25293)"
id="pattern7416"
xlink:href="#pattern7199"
inkscape:collect="always" />
<pattern
patternUnits="userSpaceOnUse"
width="51.503632"
height="51.502907"
patternTransform="translate(135.90262,558.90625)"
id="pattern7199">
<g
id="g7195"
transform="translate(-135.90262,-558.90625)">
<rect
style="fill:#980101;fill-opacity:1;stroke:none"
id="rect7101"
width="51.502602"
height="51.502602"
x="135.90262"
y="558.90656" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 135.90625,558.90625 0,8.4375 8.4375,-8.4375 -8.4375,0 z m 17.15625,0 -17.15625,17.125 0,8.5 25.625,-25.625 -8.46875,0 z m 17.15625,0 -34.3125,34.3125 0,8.5 42.8125,-42.8125 -8.5,0 z m 17.1875,0 -51.5,51.5 8.5,0 43,-43 0,-8.5 z m 0,17.1875 -34.3125,34.3125 8.5,0 25.8125,-25.8125 0,-8.5 z m 0,17.1875 -17.125,17.125 8.46875,0 8.65625,-8.65625 0,-8.46875 z"
id="rect7169"
inkscape:connector-curvature="0" />
</g>
</pattern>
<pattern
patternUnits="userSpaceOnUse"
width="51.503632"
height="51.502907"
patternTransform="translate(135.90262,558.90625)"
id="pattern7285">
<g
id="g7287"
transform="translate(-135.90262,-558.90625)">
<rect
style="fill:#980101;fill-opacity:1;stroke:none"
id="rect7289"
width="51.502602"
height="51.502602"
x="135.90262"
y="558.90656" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 135.90625,558.90625 0,8.4375 8.4375,-8.4375 -8.4375,0 z m 17.15625,0 -17.15625,17.125 0,8.5 25.625,-25.625 -8.46875,0 z m 17.15625,0 -34.3125,34.3125 0,8.5 42.8125,-42.8125 -8.5,0 z m 17.1875,0 -51.5,51.5 8.5,0 43,-43 0,-8.5 z m 0,17.1875 -34.3125,34.3125 8.5,0 25.8125,-25.8125 0,-8.5 z m 0,17.1875 -17.125,17.125 8.46875,0 8.65625,-8.65625 0,-8.46875 z"
id="path7291"
inkscape:connector-curvature="0" />
</g>
</pattern>
<pattern
patternUnits="userSpaceOnUse"
width="51.503632"
height="51.502907"
patternTransform="translate(135.90262,558.90625)"
id="pattern7293">
<g
id="g7295"
transform="translate(-135.90262,-558.90625)">
<rect
style="fill:#980101;fill-opacity:1;stroke:none"
id="rect7297"
width="51.502602"
height="51.502602"
x="135.90262"
y="558.90656" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 135.90625,558.90625 0,8.4375 8.4375,-8.4375 -8.4375,0 z m 17.15625,0 -17.15625,17.125 0,8.5 25.625,-25.625 -8.46875,0 z m 17.15625,0 -34.3125,34.3125 0,8.5 42.8125,-42.8125 -8.5,0 z m 17.1875,0 -51.5,51.5 8.5,0 43,-43 0,-8.5 z m 0,17.1875 -34.3125,34.3125 8.5,0 25.8125,-25.8125 0,-8.5 z m 0,17.1875 -17.125,17.125 8.46875,0 8.65625,-8.65625 0,-8.46875 z"
id="path7299"
inkscape:connector-curvature="0" />
</g>
</pattern>
<pattern
patternUnits="userSpaceOnUse"
width="51.503632"
height="51.502907"
patternTransform="translate(135.90262,558.90625)"
id="pattern7301">
<g
id="g7303"
transform="translate(-135.90262,-558.90625)">
<rect
style="fill:#980101;fill-opacity:1;stroke:none"
id="rect7305"
width="51.502602"
height="51.502602"
x="135.90262"
y="558.90656" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 135.90625,558.90625 0,8.4375 8.4375,-8.4375 -8.4375,0 z m 17.15625,0 -17.15625,17.125 0,8.5 25.625,-25.625 -8.46875,0 z m 17.15625,0 -34.3125,34.3125 0,8.5 42.8125,-42.8125 -8.5,0 z m 17.1875,0 -51.5,51.5 8.5,0 43,-43 0,-8.5 z m 0,17.1875 -34.3125,34.3125 8.5,0 25.8125,-25.8125 0,-8.5 z m 0,17.1875 -17.125,17.125 8.46875,0 8.65625,-8.65625 0,-8.46875 z"
id="path7307"
inkscape:connector-curvature="0" />
</g>
</pattern>
<pattern
inkscape:collect="always"
xlink:href="#pattern7199"
id="pattern7215"
patternTransform="translate(289.13949,423.25293)" />
<pattern
patternUnits="userSpaceOnUse"
width="51.503632"
height="51.502907"
patternTransform="translate(135.90262,558.90625)"
id="pattern7310">
<g
id="g7312"
transform="translate(-135.90262,-558.90625)">
<rect
style="fill:#980101;fill-opacity:1;stroke:none"
id="rect7314"
width="51.502602"
height="51.502602"
x="135.90262"
y="558.90656" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 135.90625,558.90625 0,8.4375 8.4375,-8.4375 -8.4375,0 z m 17.15625,0 -17.15625,17.125 0,8.5 25.625,-25.625 -8.46875,0 z m 17.15625,0 -34.3125,34.3125 0,8.5 42.8125,-42.8125 -8.5,0 z m 17.1875,0 -51.5,51.5 8.5,0 43,-43 0,-8.5 z m 0,17.1875 -34.3125,34.3125 8.5,0 25.8125,-25.8125 0,-8.5 z m 0,17.1875 -17.125,17.125 8.46875,0 8.65625,-8.65625 0,-8.46875 z"
id="path7316"
inkscape:connector-curvature="0" />
</g>
</pattern>
<pattern
patternUnits="userSpaceOnUse"
width="51.503632"
height="51.502907"
patternTransform="translate(135.90262,558.90625)"
id="pattern7318">
<g
id="g7320"
transform="translate(-135.90262,-558.90625)">
<rect
style="fill:#980101;fill-opacity:1;stroke:none"
id="rect7322"
width="51.502602"
height="51.502602"
x="135.90262"
y="558.90656" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 135.90625,558.90625 0,8.4375 8.4375,-8.4375 -8.4375,0 z m 17.15625,0 -17.15625,17.125 0,8.5 25.625,-25.625 -8.46875,0 z m 17.15625,0 -34.3125,34.3125 0,8.5 42.8125,-42.8125 -8.5,0 z m 17.1875,0 -51.5,51.5 8.5,0 43,-43 0,-8.5 z m 0,17.1875 -34.3125,34.3125 8.5,0 25.8125,-25.8125 0,-8.5 z m 0,17.1875 -17.125,17.125 8.46875,0 8.65625,-8.65625 0,-8.46875 z"
id="path7324"
inkscape:connector-curvature="0" />
</g>
</pattern>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="146.48789"
inkscape:cy="152.44658"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="2"
fit-margin-left="2"
fit-margin-right="2"
fit-margin-bottom="2"
inkscape:window-width="1364"
inkscape:window-height="749"
inkscape:window-x="0"
inkscape:window-y="17"
inkscape:window-maximized="0" />
<metadata
id="metadata7431">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="1. réteg"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-172.29272,-532.11218)">
<rect
rx="10"
ry="10"
y="534.11218"
x="174.29272"
height="236.5"
width="317"
id="rect3277"
style="fill:#aaccee;fill-opacity:1;stroke:none"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
style="fill:none;stroke:#fdca01;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 422.23687,681.13348 0,-27.92462 -42.75,0 0,-13.25"
id="path6921"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
style="fill:none;stroke:#013397;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 302.31845,631.20886 0,-24.5 -59.63172,0 0,-15.5"
id="path6965"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
id="path6933"
style="fill:none;stroke:#339900;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 355.464,633.70886 0,-24.5 54.27996,0 0,-35.5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
inkscape:connector-curvature="0"
id="path6931"
d="m 422.23687,596.95886 0,20.5 -54.06371,0 0,13.25"
style="fill:none;stroke:#fdca01;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="cccc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path6915"
d="m 290.29763,631.20886 0,-14.5 -59.27816,0 0,-25.5"
style="fill:none;stroke:url(#pattern7416);stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<g
transform="translate(153.23688,-131.65332)"
id="g6901"
style="fill:#013397"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160">
<path
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#013397;fill-opacity:1;stroke:none;stroke-width:3.99999976;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 178.46875,671.4375 -4.8125,13.09375 c 0.87048,-0.62476 1.22466,-1.03015 2.21875,-1.28125 l 0,79.125 0,2 5.1875,0 0,-2 0,-79.15625 c 0.98809,0.25008 1.39557,0.68376 2.25,1.3125 z"
id="path5703"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
</g>
<path
inkscape:connector-curvature="0"
id="path6923"
d="m 238.98688,677.24439 0,-24.03553 46.24999,0 0,-13.25"
style="fill:none;stroke:#fdca01;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="cccc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
ry="10"
rx="10"
y="673.47992"
x="366.42722"
height="82.257217"
width="111.56497"
id="rect3427"
style="fill:#003366;fill-opacity:1;stroke:none" />
<rect
style="fill:#003366;fill-opacity:1;stroke:none"
id="rect3279"
width="111.56497"
height="82.257217"
x="184.92722"
y="673.47992"
rx="10"
ry="10" />
<path
id="path6939"
style="fill:none;stroke:#339900;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 282.00069,723.70886 0,-24.5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
id="path6937"
style="fill:none;stroke:#eec73e;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 463.00069,723.70886 0,-24.5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
d="m 407.47631,723.70886 0,-24.5"
style="fill:none;stroke:#339900;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path6935"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path5699"
d="m 381.45969,713.20886 0,-15.5"
style="fill:none;stroke:url(#pattern7215);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
style="fill:none;stroke:url(#pattern7418);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 349.80715,639.20886 0,24.5 36.65254,0 0,35.5"
id="path5695"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path3391"
d="m 310.5767,639.20886 0,24.5 -31.11701,0 0,35.5"
style="fill:none;stroke:url(#pattern7420);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
d="m 226.47632,723.70886 0,-24.5"
style="fill:none;stroke:#eec73e;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path6941"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<path
id="path6943"
style="fill:none;stroke:#339900;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 199.97632,723.70886 0,-24.5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3145"
width="20"
height="40"
x="189.97632"
y="711.31952"
rx="9.0380001"
ry="10"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
ry="10"
rx="9.0380001"
y="711.31952"
x="216.47632"
height="40"
width="20"
id="rect3283"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3285"
width="20"
height="40"
x="272.0007"
y="711.31952"
rx="9.0380001"
ry="10"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
ry="7.9791846"
rx="9.0380001"
y="689.39923"
x="189.97632"
height="16.311922"
width="102.02439"
id="rect3287"
style="fill:#ffff99;fill-opacity:1;stroke:#003366"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="199.22838"
y="701.50574"
id="text3289"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
sodipodi:role="line"
id="tspan3291"
x="199.22838"
y="701.50574"
style="font-size:14px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold">Open vSwitch</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
x="-744.05505"
y="204.84831"
id="text3293"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
sodipodi:role="line"
id="tspan3295"
x="-744.05505"
y="204.84831"
style="font-size:14px">VM1</tspan></text>
<text
transform="matrix(0,-1,1,0,0,0)"
sodipodi:linespacing="125%"
id="text3297"
y="231.34831"
x="-744.97906"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
style="font-size:14px"
y="231.34831"
x="-744.97906"
id="tspan3299"
sodipodi:role="line">VM2</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
x="-746.35803"
y="286.87268"
id="text3301"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
sodipodi:role="line"
id="tspan3303"
x="-746.35803"
y="286.87268"
style="font-size:14px"><tspan
style="font-style:italic"
id="tspan3445"><tspan
style="font-style:normal"
id="tspan3451">VM</tspan>n</tspan></tspan></text>
<rect
style="fill:#003366;fill-opacity:1;stroke:#003366"
id="rect3331"
width="125"
height="38.23027"
x="185.53172"
y="559.1756"
rx="10"
ry="10"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<text
sodipodi:linespacing="125%"
id="text3337"
y="583.89874"
x="220.46809"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold"
y="583.89874"
x="220.46809"
id="tspan3339"
sodipodi:role="line">Firewall</tspan></text>
<rect
ry="5"
rx="5"
y="727.19452"
x="261.3696"
height="8.2499437"
width="7.0000029"
id="rect3341"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3343"
width="7.0000029"
height="8.2499437"
x="250.73851"
y="727.19452"
rx="5"
ry="5"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
ry="5"
rx="5"
y="727.19452"
x="240.10741"
height="8.2499437"
width="7.0000029"
id="rect3345"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
ry="10"
rx="9.0380001"
y="711.31952"
x="370.97632"
height="40"
width="20"
id="rect3349"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3429"
width="7.0000029"
height="8.2499437"
x="442.8696"
y="727.19452"
rx="5"
ry="5"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3351"
width="20"
height="40"
x="397.47632"
y="711.31952"
rx="9.0380001"
ry="10"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
ry="5"
rx="5"
y="727.19452"
x="432.23853"
height="8.2499437"
width="7.0000029"
id="rect3431"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
ry="10"
rx="9.0380001"
y="711.31952"
x="453.0007"
height="40"
width="20"
id="rect3353"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3433"
width="7.0000029"
height="8.2499437"
x="421.60742"
y="727.19452"
rx="5"
ry="5"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
style="fill:#ffff99;fill-opacity:1;stroke:#003366"
id="rect3355"
width="102.02439"
height="16.311922"
x="370.97632"
y="689.39923"
rx="9.0380001"
ry="7.9791846"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<text
y="686.95886"
x="390.32208"
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
sodipodi:linespacing="125%"
id="text3435"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"><tspan
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="tspan3437">Worker <tspan
style="font-style:italic"
id="tspan7038">k</tspan></tspan></text>
<text
sodipodi:linespacing="125%"
id="text3357"
y="701.50574"
x="380.22836"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
style="font-size:14px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold"
y="701.50574"
x="380.22836"
id="tspan3359"
sodipodi:role="line">Open vSwitch</tspan></text>
<text
transform="matrix(0,-1,1,0,0,0)"
sodipodi:linespacing="125%"
id="text3361"
y="384.81491"
x="-742.48309"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#003366;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
style="font-size:14px;font-weight:600;fill:#003366;fill-opacity:1;-inkscape-font-specification:TitilliumText25L Semi-Bold"
y="384.81491"
x="-742.48309"
id="tspan3363"
sodipodi:role="line">fw2</tspan></text>
<text
transform="matrix(0,-1,1,0,0,0)"
sodipodi:linespacing="125%"
id="text3369"
y="467.87271"
x="-748.45105"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
style="font-size:14px"
y="467.87271"
x="-748.45105"
id="tspan3371"
sodipodi:role="line"><tspan
style="font-style:italic"
id="tspan3447"><tspan
style="font-style:normal"
id="tspan3449">VM</tspan>m</tspan></tspan></text>
<rect
style="fill:#003366;fill-opacity:1;stroke:none"
id="rect3383"
width="7.0000029"
height="8.2499437"
x="308.60095"
y="716.23358"
rx="5"
ry="5"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
ry="5"
rx="5"
y="716.23358"
x="327.70972"
height="8.2499437"
width="7.0000029"
id="rect3385"
style="fill:#003366;fill-opacity:1;stroke:none"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<rect
style="fill:#003366;fill-opacity:1;stroke:none"
id="rect3387"
width="7.0000029"
height="8.2499437"
x="346.81848"
y="716.23358"
rx="5"
ry="5"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
id="text3393"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
x="210.62207"
y="686.95886"><tspan
id="tspan3397"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">Worker 1</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
x="-744.97906"
y="412.34833"
id="text3453"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
sodipodi:role="line"
id="tspan3455"
x="-744.97906"
y="412.34833"
style="font-size:14px">VM2</tspan></text>
<path
inkscape:connector-curvature="0"
id="path7043"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:url(#pattern7422);fill-opacity:1;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 388.14312,634.12793 a 2.0021961,2.0021961 0 1 0 0.1875,4 l 87.875,0 a 2.0002,2.0002 0 1 0 0,-4 l -87.875,0 a 2.0002,2.0002 0 0 0 -0.1875,0 z m 96.06785,1.9604 -13.09375,-4.8125 c 0.62476,0.87048 1.03015,1.84338 1.28125,2.83747 -103.01969,-0.38797 -102.9282,3.99426 0.0313,3.99426 -0.25008,0.98809 -0.68376,1.97009 -1.3125,2.82452 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<g
transform="translate(153.23688,-131.65332)"
id="g7245">
<rect
ry="7.9791846"
rx="9.0380001"
y="759.60956"
x="120.49311"
height="16.311922"
width="115.45942"
id="rect3307"
style="fill:#ffff99;fill-opacity:1;stroke:#003366" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="130.63956"
y="772.67255"
id="text3309"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3311"
x="130.63956"
y="772.67255"
style="font-size:14px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold">Network switch</tspan></text>
</g>
<rect
ry="10"
rx="10"
y="559.1756"
x="351.53171"
height="38.23027"
width="125"
id="rect6925"
style="fill:#003366;fill-opacity:1;stroke:#003366"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="376.58521"
y="583.80273"
id="text6927"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
sodipodi:role="line"
id="tspan6929"
x="376.58521"
y="583.80273"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold">Head node</tspan></text>
<g
id="g3112"
transform="translate(-100.12884,60.708106)">
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#339900;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="526.98688"
y="724.9939"
id="text6971"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6973"
x="526.98688"
y="724.9939"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#339900;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">private vm-net</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path6975"
d="m 522.23687,722.60386 -19.75,0"
style="fill:#98fc66;stroke:#eec73e;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g3137"
transform="translate(-19.911224,-8)">
<g
transform="translate(-195.66496,46.815274)"
id="g3122">
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#012264;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="527.04688"
y="761.20886"
id="text6911"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
sodipodi:role="line"
id="tspan6913"
x="527.04688"
y="761.20886"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#012264;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">internet uplink</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path6959"
d="m 522.23687,758.72886 -19.75,0"
style="fill:none;stroke:#013397;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
</g>
<g
transform="translate(-195.66496,85.850489)"
id="g3107">
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="526.98688"
y="707.02136"
id="text6985"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6987"
x="526.98688"
y="707.02136"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#015a01;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">public vm-net</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path6989"
d="m 522.23687,704.54136 -19.75,0"
style="fill:#339900;stroke:#339900;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
</g>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:100%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="484.95343"
y="622.5802"
id="text7055"
sodipodi:linespacing="100%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
id="tspan7059"
sodipodi:role="line"
x="484.95343"
y="622.5802"
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:100%;text-anchor:end;fill:#980101;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">rest of the</tspan><tspan
id="tspan7063"
sodipodi:role="line"
x="484.95343"
y="630.5802"
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:100%;text-anchor:end;fill:#980101;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">network</tspan></text>
<g
id="g3127"
transform="translate(3.1053246,-8)">
<g
transform="translate(-328.29947,103.91298)"
id="g3102">
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path6977"
d="m 522.23687,686.47886 -19.75,0"
style="fill:none;stroke:url(#pattern7424);stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160" />
<text
sodipodi:linespacing="125%"
id="text6991"
y="688.95886"
x="526.98688"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/netarch.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160"><tspan
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#980101;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
y="688.95886"
x="526.98688"
id="tspan6993"
sodipodi:role="line">multiple vlans</tspan></text>
</g>
<g
transform="translate(-328.29947,64.38024)"
id="g3117">
<path
style="fill:none;stroke:#fdca01;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 522.23687,740.66636 -19.75,0"
id="path6957"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#fb8b00;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="526.98688"
y="742.9939"
id="text7077"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7079"
x="526.98688"
y="742.9939"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#fb8b00;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">management</tspan></text>
</g>
</g>
</g>
</svg>
@inproceedings{younge2011analysis,
title={Analysis of virtualization technologies for high performance computing environments},
author={Younge, Andrew J and Henschel, Robert and Brown, James T and von Laszewski, Gregor and Qiu, Judy and Fox, Geoffrey C},
booktitle={Cloud Computing (CLOUD), 2011 IEEE International Conference on},
pages={9--16},
year={2011},
organization={IEEE}
}
@article{creasy1981origin,
title={The origin of the VM/370 time-sharing system},
author={Creasy, Robert J.},
journal={IBM Journal of Research and Development},
volume={25},
number={5},
pages={483--490},
year={1981},
publisher={IBM}
}
@article{duatonew,
title={A New Approach to rCUDA},
author={Duato, Jos{\'e} and Pena, Antonio J and Silla, Federico and Fern{\'a}ndez, Juan C and Mayo, Rafael and Quintana-Ort{\i}, Enrique S}
}
@book{holovaty2009definitive,
title={The Definitive Guide to Django: Web Development Done Right},
author={Holovaty, Adrian and Kaplan-Moss, Jacob},
year={2009},
publisher={Apress}
}
@techreport{pinzari2003introduction,
title={Introduction to NX technology},
author={Pinzari, Gian Filippo},
year={2003},
institution={NoMachine Technical Report 309}
}
@article{victoria2009creating,
title={Creating and Controlling KVM Guests using libvirt},
author={Victoria, B},
journal={University of Victoria},
year={2009}
}
@inproceedings{bolte2010non,
title={Non-intrusive virtualization management using libvirt},
author={Bolte, Matthias and Sievers, Michael and Birkenheuer, Georg and Nieh{\"o}rster, Oliver and Brinkmann, Andr{\'e}},
booktitle={Proceedings of the Conference on Design, Automation and Test in Europe},
pages={574--579},
year={2010},
organization={European Design and Automation Association}
}
@article{pfaff2009extending,
title={Extending networking into the virtualization layer},
author={Pfaff, Ben and Pettit, Justin and Koponen, Teemu and Amidon, Keith and Casado, Martin and Shenker, Scott},
journal={Proc. HotNets (October 2009)},
year={2009}
}
@article{hoskins2006sshfs,
title={Sshfs: super easy file access over ssh},
author={Hoskins, Matthew E},
journal={Linux Journal},
volume={2006},
number={146},
pages={4},
year={2006},
publisher={Belltown Media}
}
@article{szeredi2010fuse,
title={FUSE: Filesystem in userspace},
author={M. Szeredi},
journal={Accessed on},
year={2010}
}
@inproceedings{yang2012implementation,
title={On implementation of GPU virtualization using PCI pass-through},
author={Yang, Chao-Tung and Wang, Hsien-Yi and Ou, Wei-Shen and Liu, Yu-Tso and Hsu, Ching-Hsien},
booktitle={Cloud Computing Technology and Science (CloudCom), 2012 IEEE 4th International Conference on},
pages={711--716},
year={2012},
organization={IEEE}
}
@inproceedings{duato2011enabling,
title={Enabling CUDA acceleration within virtual machines using rCUDA},
author={Duato, Jos{\'e} and Pena, Antonio J and Silla, Federico and Fern{\'a}ndez, Juan C and Mayo, Rafael and Quintana-Orti, ES},
booktitle={High Performance Computing (HiPC), 2011 18th International Conference on},
pages={1--10},
year={2011},
organization={IEEE}
}
@inproceedings{callaghan2002nfs,
title={Nfs over rdma},
author={Callaghan, Brent and Lingutla-Raj, Theresa and Chiu, Alex and Staubach, Peter and Asad, Omer},
booktitle={Proceedings of ACM SIGCOMM Summer 2003 NICELI Workshop},
year={2002}
}
@article{vinoski2006advanced,
title={Advanced message queuing protocol},
author={Vinoski, Steve},
journal={Internet Computing, IEEE},
volume={10},
number={6},
pages={87--89},
year={2006},
publisher={IEEE}
}
% This is LLNCS.DEM the demonstration file of
% the LaTeX macro package from Springer-Verlag
% for Lecture Notes in Computer Science,
% version 2.4 for LaTeX2e as of 16. April 2010
%
\documentclass{llncs}
%
\usepackage{graphicx}
%\usepackage{makeidx} % allows for indexgeneration
%
\begin{document}
%
\mainmatter % start of the contributions
%
\title{Harnessing Wasted Computing Power for
Scientific Computing}
%
%
\author{S\'andor Guba \and M\'at\'e \H{O}ry \and Imre Szeber\'enyi}
%
\authorrunning{Ivar Ekeland et al.} % abbreviated author list (for running head)
%
%%%% list of authors for the TOC (use if author list has to be modified)
%\tocauthor{Ivar Ekeland, Roger Temam, Jeffrey Dean, David Grove,
%Craig Chambers, Kim B. Bruce, and Elisa Bertino}
%
\institute{Budapest University of Technology and Economics, Hungary,\\
\email{\{guba.sandor,orymate,szebi\}@iit.bme.hu}
}
\maketitle % typeset the title of the contribution
\begin{abstract}
Nowadays more and more general purpose workstations installed in a student laboratory have a built in multi-core CPU and graphics card providing significant computing power. In most cases the utilization of these resources is low, and limited to lecture hours. The concept of utility computing plays an important role in technological development.
In this paper, we introduce a cloud management system which enables the simultaneous use of both dedicated resources and opportunistic environment. All the free workstations are to a resource pool, and can be used like ordinary cloud resources. Our solution leverages the advantages of HTCondor and OpenNebula systems.
Modern graphics processing units (GPUs) with many-core architectures have emerged as general-purpose parallel computing platforms that can dramatically accelerate scientific applications used for various simulations. Our business model harnesses the computing power of GPUs as well, using the needed amount of unused machines.
Our pilot infrastructure consists of a high performance cluster of 7 compute nodes with a sum of 76 physical cores and 304 GiB memory,
and 28 workstations with dual-core CPUs and dedicated graphics cards. Altogether we can use 10,752 CUDA cores through the network.
\keywords{Cloud, GPGPU, Grid, HTC, Utility computing}
\end{abstract}
%
\section{Introduction}
In universities there is a huge demand for high performance computing, but the smaller research groups can not afford buying a supercomputer or a large compute cluster. However significant unused computing capacity has been concentrated in the student laboratories. Most of our student labs have quite new PCs with modern multi-core CPUs and high performance graphics cards. The total computing performance of the laboratory resources could be significant. The open questions are: a) how can we collect and use these resources; b) what is the time limit of the usage; c) what happens if one or more jobs are not finishing at the given time slot; d) what management software and management rules are needed to support the various software environments which must be flexible and on demand.
In this paper we are investigating these problems and we introduce a solution based on a new approach. We show that the cloud technology, based on hardware accelerated virtualization, can be the right answer to these questions. First of all the management of the cloud based systems are easier and they are more flexible. According to the literature\cite{younge2011analysis} and our experiences the modern virtualization has minimal overhead compared with the native systems and has more advantages than disadvantages.
Our basic idea is to run only a minimal host operating system on the bare metal and virtualize everything else. In this manner we can easily solve the questions raised up. We do not need a time consuming cloning process for the configuration management. We can save the ongoing scientific computing process at any time, and we can restore and continue it even on another host machine. One can say, yes, these goals are solved already by various cloud management systems in corporate environment. So what is the novum on this?
The main difference between the corporate cloud infrastructure running 24/7 and our laboratory environment is that the corporate infrastructure is used only for serving the virtual machines. However, functions of our student laboratory are twofold: 1) During the scheduled lab exercises, the workstations act as a cloud host which serves only the virtual machines owned by the student sitting in front of the workstation or act as a simple cloud client. 2) While the lab is not used for teaching, the workstations are acting as a normal cloud host running computing intensive jobs like a normal HTCondor executing machine.
Our solution, CIRCLE (Cloud Infrastructure for Research and Computer Labs in Education) is not only harnessing the idle CPU cycles for scientific computing, but it provides
an easy and flexible web-portal for the usage and the management as well. The user can easily manage their virtual machines and access the files stored on the online storage. Nevertheless the lecturers can easily customise a new virtual machine image and share this image with the students. In this way all the students have the same and clean learning environment which enables to concentrate on the real task.
In the following sections we present the applied technologies and components used in our pilot system.
\section{Virtualization}
Most IaaS (infrastructure as a service) cloud systems are based on virtual machines. Although the technique has been available since the end of 1960's\cite{creasy1981origin}, widespread adoption of x86 based systems in the server segment made it almost entirely disappear. Later some vendors started implementing different software based solutions for virtualizing operating systems or even emulating CPUs. The renaissance of virtualization began with manufacturers extending the x86 instruction set to support low-overhead virtualization. This extension is known as Intel VT-x or AMD-V.
Current popular techniques are operating system virtualization and full hardware accelerated virtualization. The former typically takes shape in chroot environments and in namespacing of some kernel resources. This does not even allow running different kernels, nor different kinds of operating systems. The latest technique is full hardware accelerated virtualization, which is based on the CPU support for isolating the concurrently running instances. This approach is normally extended with paravirtualized device drivers, which eliminate the need for emulating real world storage and network controllers.
Hardware accelerated virtualization requires CPU support, but this is only missing currently on the low-end product line of the main x86 CPU manufacturers: some models of Intel Atom, Celeron, and Pentium. This hardware acceleration provides a near-native performance in HPC applications.\cite{younge2011analysis}
Currently there are more competing full virtualization solutions, the most notable free ones are KVM and XEN. At the time of our decision, the installation of a XEN hypervisor required modifications to the Linux kernel, and this was unacceptable for us. This is no longer the case, but we are satisfied with KVM.
Additionally, we use all KVM functions through the libvirt library, which provides an abstract interface for managing virtual machines.\cite{victoria2009creating} This has the benefit of theoretically flawless migration to other hypervisors like XEN, ESXi, or Hyper-V.\cite{bolte2010non}
Physically accessible computers are normally used with directly attached devices like display and keyboard. These devices are also emulated by KVM, and you can access virtual machines' consoles via the VNC protocol. This is useful for installing the operating system or troubleshooting, but Windows and Linux both provide better alternatives for remote access.
We use remote desktop protocol for accessing Windows hosts, and secure shell (SSH) for text-based Linux machines. Remote graphical login to X11 servers has always been available, but this is not reliable even on local network connections because it is stateless. We use instead NoMachine NX\cite{pinzari2003introduction}.
\section{Networking}
Most virtual machines in a cloud must have a network connection. On the physical layer, our KVM hypervisor gives us a virtual network interface controller, which is an emulated or paravirtualized NIC on the side of the guest operating system, and a virtual NIC on the host side.
Virtual machines are connected to virtual networks provided by manageable virtual switches (Figure~\ref{fig:figure1}). The Open vSwitch.\cite{pfaff2009extending}, what we are using, is a high performance multi-layer virtual switch with VLAN, QoS and OpenFlow support, merged into the mainline Linux kernel.
Virtual networks do not necessarily differ from physical ones in the upper layers. The most important different condition is the frequency of changes. Our system in traditional physical networks' point of view is like if someone changed the cabling hundred times in the middle of the day. The developed CIRCLE networking module consists of an iptables gateway, a tinydns name server and an ISC DHCP server. All of these are configured through remote procedure calls, and managed by a relational database backed object model.
Our solution groups the VMs to two main groups. The public vm-net is for machines which provide public services to more people, the private vm-net is for those which are used only by one or two persons. Public vm-net machines have public IPv4 and IPv6 addresses, and are protected with a simple ipset-based input filter. On the private vm-net, machines have private IPv4 and public IPv6 addresses. The primary remote connection is reached by automatically configured IPv4 port forward, or directly on the IPv6 address. As connecting to the standard port is a more comfortable solution, users who load our web portal from an IPv6 connection, get a hostname with public AAAA and private A records. If the user has no IPv6 connection, we display a common hostname with a single A record, and a custom port number. As IPv6 is widely available in the central infrastructure of our university, IPv6-capable clients are in majority. Users can open more ports, which means enabling incoming connections, and setting up IPv4 port forwarding in the background.
\begin{figure}[ht]
\begin{minipage}[b]{0.5\linewidth}
\centering
\includegraphics[width=\textwidth]{netarch}
\caption{The structure of the network}
\label{fig:figure1}
\end{minipage}
\hspace{0.5cm}
\begin{minipage}[b]{0.4\linewidth}
\centering
\includegraphics[width=\textwidth]{swarch}
\caption{Technologies used for CIRCLE}
\label{fig:figure2}
\end{minipage}
\end{figure}
\section{Storage}
Virtual machines' hard drives are provided to the hypervisors as read-write NFS shares managed by OpenNebula. Our cluster has a legacy InfiniBand SDR network, which is despite its age much faster than the gigabit Ethernet network. InfiniBand has its own data-link protocol, and Linux has mainline support for remote direct memory access (RDMA) over it , which provides near-local access times and no CPU load.\cite{callaghan2002nfs} Unfortunately this kernel module causes random cluster-wide kernel panics, which is unacceptable in a production system. We decided to use NFS4 over IP over InfiniBand, which also provided near-local timing. One problem remained: intensive random writes made the local file access on the NFS server slow (both with RDMA and IP over IB). Switching to the deadline scheduler solved this.
Disk images are stored in qcow2 (QEMU copy on write) format, which allows images with large free space to be stored in a smaller file, and also supports copy-on-write differential images. The latter feature is used for virtual machines, which eliminates the need of copying the whole base image file before launching a new instance. Saving a template consists of merging the base and differential images to a single one.
Since our usual virtual machines have temporary disks there is common need for a permanent online storage that can be easily accessed. It allows the user to use the same resources on different virtual computers or even at home, and it helps sharing data between virtual machines and local computers on a simple interface.
Our solution---CIRCLE File Server---is a multi-protocol file server, which runs on a virtual machine. Every user gets an amount of disk space, which is automatically mounted on our prepared appliances.
Windows VMs access the storage over SMB/CIFS. The authentication is handled by CIRCLE with automatically generated passwords. For security reasons we do not allow SMB access outside vm-net.
Linux guests mount the remote files with SSHFS\cite{hoskins2006sshfs}, a userspace SSH/SFTP virtual file system. For virtual machines the manager automatically generates key-pairs. SFTP service is also accessible over the internet. Users can set public keys on the web portal and immediately access their folder.
It is also possible to manage files on the cloud portal with an AJAX based web interface. Its backend consists of a Celery worker and an Nginx httpd.
\section{Putting it together}
The main goal was to give a self-service interface to our researchers, lecturers, and students.
Cloud management frameworks like OpenNebula and OpenStack promise this, but after learning and deploying OpenNebula, we found even its Self-Service portal's abstraction level too low.
Our solution is a new cloud management system, called CIRCLE, built up from various open source software components(figure~\ref{fig:figure2}). It provides an attractive web interface where users can do themselves all the common tasks including launching and managing/controlling virtual machines, creating templates based on other ones, and sharing templates with groups of users.
This cloud management system is based on Django\cite{holovaty2009definitive}. This popular Python framework gives us among other things a flexible object-relational mapping system. Although the Django framework is originally designed for web applications, the business logic is not at all web specific. That's why it is easy to provide command line or remote procedure call interfaces to the model.
As the primary interface is web, which is in some aspect a soft real-time system, the model can not use synchronous calls to external resources, nor execute system commands. This is the reason why all remote procedure calls are done asynchronously through a standard task queue. Our choice is the Celery distributed task queue. This is the most popular among such systems, which are integrated with Django. Celery is configured to use an implementation of AMQP\cite{vinoski2006advanced} protocol---called RabbitMQ---as its message broker.
Celery workers set up the netfilter firewall, the domain name and DHCP services, the IP blacklist, execute file server operations, and also communicate with OpenNebula. This distributed solution makes it possible to dynamically alter the subsystems.
In the opposite direction, some subsystems notify others of their state transitions through Celery. Based on this information further Celery tasks are submitted, and the models are updated.
CIRCLE manages the full state space of the resources. Some of it is also stored by the underlying OpenNebula, but most of this redundant information is bound to its initial value as OpenNebula does not handle changes in meta information. This behavior arises of design decisions, and is not expected to be improved. The thin slice of OpenNebula used by our system is continuously shrinking, and we intend dropping OpenNebula in favor of direct bindings to libvirt and the also considerably customized storage and network hooks.
\section{Execution on workstations}
The cloud system at our institute takes a big role in education and in general R{\&}D infrastructure, but there is a significant demand for high-throughput scientific computing. This kind of requirement usually appears in form of many long-running, independent jobs. On most parts of the world there is no fund to build dedicated HPC clusters with enough resources for these jobs.
The highest load on the cloud takes place in the office hours and the evenings, in more than half of the time we have many free resources, so it is possible to run these jobs on low priority virtual machines in the cloud. If interactive load is increasing, we can even suspend these machines, and resume them later.
Running scientific batch jobs on student laboratory computers also has a long history. Our idea is to run some of these jobs on virtual machines in the computer laboratories overnight and on weekends. We can suspend in the morning all virtual machines to a memory image, and resume on the same or some other hypervisor next evening. This solution makes it possible to run individual jobs virtually continuously through months or a year, without any specific efforts. This result is important because of our observation that the runtime of similar jobs have a high standard deviation, and it also protects against losing the partial result of months long computations in case of hardware or power failure. HTCondor has a similar result with its checkpoint support, but it needs to modify the software, which is often impossible or sometimes the users are not able to do this modification by themselves.
To be able to resume suspended machines, we have to copy back the differential image and the memory dump. Our choice for this is rsync.
The lab network is exposed to unauthorized access, so we have to limit access to confidential material. As a physically accessible general purpose workstation does not currently have a way to reliably authenticate itself to a server, nor to protect the stored data, we can not employ any solution against these attacks other than security through obscurity and not using these systems for any confidential executions.
Another important aspect is energy efficiency. We have successfully used HTCondor to automatically turn on and off the compute nodes of a HPC cluster. This is also working with Wake on LAN and SSH on the workstations.
\section{GPUs in the cloud}
The most significant HPC performance in our student laboratories is provided by the mid-level GPUs in all the workstations used for teaching computer graphics. There is a technology we applied successfully to use GPGPUs from the dedicated clusters' virtual machines: PCI passthrough.\cite{yang2012implementation} However, this technology requires both CPU and motherboard support of IOMMU, which is a high-end feature nowadays. The implementations are called Intel VT-d and AMD-Vi technologies, and they appear in the server- and high-end workstation segments.
As none of our laboratory computers support IOMMU, we have to find a different solution. The first one is using rCUDA, which is a small framework making it possible to run the host and device side of a CUDA program on different hosts, communicating over TCP/IP or InfiniBand network.\cite{duato2011enabling} With this, we can launch user-prepared virtual machines on each host, and run the device code via local (virtio-based) network on the hypervisor. rCUDA is also capable to serve more clients with a single device. This is useful if the host code uses the GPU only part time.
The other option is using directly the host machine to execute GPGPU jobs. This is a simpler approach, but necessarily involves a more complicated scheduler. Our choice for this type of problems is HTCondor, which can manage this scenario without much customization. The disadvantage is that the user can not customize the host-side operating system.
\section{Conclusions and future plans}
Our cloud system is built up in a modular manner. We have implemented all the main modules which enabled us to set up a production system. The system is now used as an integral part of our teaching activity, and also hosts several server functions for our department to use. At the time of writing this paper, there are 70 running and 54 suspended machines, using 109GiB of memory and producing not more than 3{\%} cummulated host cpu load on the cluster. In the first two months' production run, more than 1500 virtual machines have been launched by 125 users.
The students found the system useful and lecturers use it with pleasure because they can really set up a new lab exercise in minutes. The feedback from the users is absolutely positive, which encourages us to proceed and extend our system with the GPGPU module. We are working on making it fully functional, and releasing the whole system in an easily deployable and highly modular open source package. We are planning to finish the current development phase until the end of August.
\emph{We thank to the other members of the developer team: D\'aniel Bach, Bence D\'anyi, and \'Ad\'am Dud\'as. }
\bibliographystyle{splncs}
\bibliography{proceedings}
\end{document}
% BibTeX bibliography style `splncs'
% An attempt to match the bibliography style required for use with
% numbered references in Springer Verlag's "Lecture Notes in Computer
% Science" series. (See Springer's documentation for llncs.sty for
% more details of the suggested reference format.) Note that this
% file will not work for author-year style citations.
% Use \documentclass{llncs} and \bibliographystyle{splncs}, and cite
% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.
% Copyright (C) 1999 Jason Noble.
% Last updated: Friday 07 March 2006, 08:04:42 Frank Holzwarth, Springer
%
% Based on the BibTeX standard bibliography style `unsrt'
ENTRY
{ address
author
booktitle
chapter
edition
editor
howpublished
institution
journal
key
month
note
number
organization
pages
publisher
school
series
title
type
volume
year
}
{}
{ label }
INTEGERS { output.state before.all mid.sentence after.sentence
after.block after.authors between.elements}
FUNCTION {init.state.consts}
{ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
#4 'after.authors :=
#5 'between.elements :=
}
STRINGS { s t }
FUNCTION {output.nonnull}
{ 's :=
output.state mid.sentence =
{ " " * write$ }
{ output.state after.block =
{ add.period$ write$
newline$
"\newblock " write$
}
{
output.state after.authors =
{ ": " * write$
newline$
"\newblock " write$
}
{ output.state between.elements =
{ ", " * write$ }
{ output.state before.all =
'write$
{ add.period$ " " * write$ }
if$
}
if$
}
if$
}
if$
mid.sentence 'output.state :=
}
if$
s
}
FUNCTION {output}
{ duplicate$ empty$
'pop$
'output.nonnull
if$
}
FUNCTION {output.check}
{ 't :=
duplicate$ empty$
{ pop$ "empty " t * " in " * cite$ * warning$ }
'output.nonnull
if$
}
FUNCTION {output.bibitem}
{ newline$
"\bibitem{" write$
cite$ write$
"}" write$
newline$
""
before.all 'output.state :=
}
FUNCTION {fin.entry}
{ write$
newline$
}
FUNCTION {new.block}
{ output.state before.all =
'skip$
{ after.block 'output.state := }
if$
}
FUNCTION {stupid.colon}
{ after.authors 'output.state := }
FUNCTION {insert.comma}
{ output.state before.all =
'skip$
{ between.elements 'output.state := }
if$
}
FUNCTION {new.sentence}
{ output.state after.block =
'skip$
{ output.state before.all =
'skip$
{ after.sentence 'output.state := }
if$
}
if$
}
FUNCTION {not}
{ { #0 }
{ #1 }
if$
}
FUNCTION {and}
{ 'skip$
{ pop$ #0 }
if$
}
FUNCTION {or}
{ { pop$ #1 }
'skip$
if$
}
FUNCTION {new.block.checka}
{ empty$
'skip$
'new.block
if$
}
FUNCTION {new.block.checkb}
{ empty$
swap$ empty$
and
'skip$
'new.block
if$
}
FUNCTION {new.sentence.checka}
{ empty$
'skip$
'new.sentence
if$
}
FUNCTION {new.sentence.checkb}
{ empty$
swap$ empty$
and
'skip$
'new.sentence
if$
}
FUNCTION {field.or.null}
{ duplicate$ empty$
{ pop$ "" }
'skip$
if$
}
FUNCTION {emphasize}
{ duplicate$ empty$
{ pop$ "" }
{ "" swap$ * "" * }
if$
}
FUNCTION {bold}
{ duplicate$ empty$
{ pop$ "" }
{ "\textbf{" swap$ * "}" * }
if$
}
FUNCTION {parens}
{ duplicate$ empty$
{ pop$ "" }
{ "(" swap$ * ")" * }
if$
}
INTEGERS { nameptr namesleft numnames }
FUNCTION {format.springer.names}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr "{vv~}{ll}{, jj}{, f{.}.}" format.name$ 't :=
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #1 >
{ ", " * }
'skip$
if$
t "others" =
{ " et~al." * }
{ "" * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #2 >
{ "," * }
'skip$
if$
t "others" =
{ " et~al." * }
{ " \& " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
FUNCTION {format.authors}
{ author empty$
{ "" }
{ author format.springer.names }
if$
}
FUNCTION {format.editors}
{ editor empty$
{ "" }
{ editor format.springer.names
editor num.names$ #1 >
{ ", eds." * }
{ ", ed." * }
if$
}
if$
}
FUNCTION {format.title}
{ title empty$
{ "" }
{ title "t" change.case$ }
if$
}
FUNCTION {n.dashify}
{ 't :=
""
{ t empty$ not }
{ t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
{ "--" *
t #2 global.max$ substring$ 't :=
}
{ { t #1 #1 substring$ "-" = }
{ "-" *
t #2 global.max$ substring$ 't :=
}
while$
}
if$
}
{ t #1 #1 substring$ *
t #2 global.max$ substring$ 't :=
}
if$
}
while$
}
FUNCTION {format.date}
{ year empty$
{ month empty$
{ "" }
{ "there's a month but no year in " cite$ * warning$
month
}
if$
}
{ month empty$
'year
{ month " " * year * }
if$
}
if$
}
FUNCTION {format.btitle}
{ title emphasize
}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
{ "~" }
{ " " }
if$
swap$ * *
}
FUNCTION {either.or.check}
{ empty$
'pop$
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
if$
}
FUNCTION {format.bvolume}
{ volume empty$
{ "" }
{ "Volume" volume tie.or.space.connect
series empty$
'skip$
{ " of " * series emphasize * }
if$
add.period$
"volume and number" number either.or.check
}
if$
}
FUNCTION {format.number.series}
{ volume empty$
{ number empty$
{ series field.or.null }
{ output.state mid.sentence =
{ "number" }
{ "Number" }
if$
number tie.or.space.connect
series empty$
{ "there's a number but no series in " cite$ * warning$ }
{ " in " * series * }
if$
}
if$
}
{ "" }
if$
}
FUNCTION {format.edition}
{ edition empty$
{ "" }
{ output.state mid.sentence =
{ edition "l" change.case$ " edn." * }
{ edition "t" change.case$ " edn." * }
if$
}
if$
}
INTEGERS { multiresult }
FUNCTION {multi.page.check}
{ 't :=
#0 'multiresult :=
{ multiresult not
t empty$ not
and
}
{ t #1 #1 substring$
duplicate$ "-" =
swap$ duplicate$ "," =
swap$ "+" =
or or
{ #1 'multiresult := }
{ t #2 global.max$ substring$ 't := }
if$
}
while$
multiresult
}
FUNCTION {format.pages}
{ pages empty$
{ "" }
{ pages multi.page.check
{ "" pages n.dashify tie.or.space.connect }
{ "" pages tie.or.space.connect }
if$
}
if$
}
FUNCTION {format.vol}
{ volume bold
}
FUNCTION {format.vol.num}
{ volume bold
number empty$
{ }
{ number "(" swap$ * * ")" * }
if$
}
FUNCTION {pre.format.pages}
{ pages empty$
'skip$
{ duplicate$ empty$
{ pop$ format.pages }
{ " " * pages n.dashify * }
if$
}
if$
}
FUNCTION {format.chapter.pages}
{ chapter empty$
'format.pages
{ type empty$
{ "chapter" }
{ type "l" change.case$ }
if$
chapter tie.or.space.connect
pages empty$
'skip$
{ " " * format.pages * }
if$
}
if$
}
FUNCTION {format.in.ed.booktitle}
{ booktitle empty$
{ "" }
{ editor empty$
{ "In: " booktitle emphasize * }
{ "In " format.editors * ": " * booktitle emphasize * }
if$
}
if$
}
FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
month empty$ year empty$ note empty$
and and and and and
{ "all relevant fields are empty in " cite$ * warning$ }
'skip$
if$
}
FUNCTION {format.thesis.type}
{ type empty$
'skip$
{ pop$
type "t" change.case$
}
if$
}
FUNCTION {format.tr.number}
{ type empty$
{ "Technical Report" }
'type
if$
number empty$
{ "t" change.case$ }
{ number tie.or.space.connect }
if$
}
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
{ "need key or journal for " cite$ * " to crossref " * crossref *
warning$
""
}
{ "In {\em " journal * "\/}" * }
if$
}
{ "In " key * }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
editor num.names$ duplicate$
#2 >
{ pop$ " et~al." * }
{ #2 <
'skip$
{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{ " et~al." * }
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
if$
}
if$
}
if$
}
FUNCTION {format.book.crossref}
{ volume empty$
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
"In "
}
{ "Volume" volume tie.or.space.connect
" of " *
}
if$
" \cite{" * crossref * "}" *
}
FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
editor field.or.null author field.or.null =
or
{ key empty$
{ booktitle empty$
{ "need editor, key, or booktitle for " cite$ * " to crossref " *
crossref * warning$
""
}
{ "" }
if$
}
{ "" }
if$
}
{ "" }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {and.the.note}
{ note output
note empty$
'skip$
{ add.period$ }
if$
}
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
stupid.colon
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize "journal" output.check
format.vol.num output
format.date parens output
format.pages output
}
{ format.article.crossref output.nonnull
format.pages output
}
if$
and.the.note
fin.entry
}
FUNCTION {book}
{ output.bibitem
author empty$
{ format.editors "author and editor" output.check }
{ format.authors output.nonnull
crossref missing$
{ "author and editor" editor either.or.check }
'skip$
if$
}
if$
stupid.colon
format.btitle "title" output.check
new.sentence
crossref missing$
{ format.edition output
format.bvolume output
new.block
format.number.series output
new.sentence
publisher "publisher" output.check
address empty$
'skip$
{ insert.comma }
if$
address output
format.date parens output
}
{ format.book.crossref output.nonnull
}
if$
and.the.note
fin.entry
}
FUNCTION {booklet}
{ output.bibitem
format.authors output
stupid.colon
format.title "title" output.check
howpublished address new.block.checkb
howpublished output
address empty$
'skip$
{ insert.comma }
if$
address output
format.date parens output
and.the.note
fin.entry
}
FUNCTION {inbook}
{ output.bibitem
author empty$
{ format.editors "author and editor" output.check }
{ format.authors output.nonnull
crossref missing$
{ "author and editor" editor either.or.check }
'skip$
if$
}
if$
stupid.colon
crossref missing$
{ chapter output
new.block
format.number.series output
new.sentence
"In:" output
format.btitle "title" output.check
new.sentence
format.edition output
format.bvolume output
publisher "publisher" output.check
address empty$
'skip$
{ insert.comma }
if$
address output
format.date parens output
}
{ chapter output
new.block
format.incoll.inproc.crossref output.nonnull
}
if$
format.pages output
and.the.note
fin.entry
}
FUNCTION {incollection}
{ output.bibitem
format.authors "author" output.check
stupid.colon
format.title "title" output.check
new.block
crossref missing$
{ format.in.ed.booktitle "booktitle" output.check
new.sentence
format.bvolume output
format.number.series output
new.block
format.edition output
publisher "publisher" output.check
address empty$
'skip$
{ insert.comma }
if$
address output
format.date parens output
format.pages output
}
{ format.incoll.inproc.crossref output.nonnull
format.chapter.pages output
}
if$
and.the.note
fin.entry
}
FUNCTION {inproceedings}
{ output.bibitem
format.authors "author" output.check
stupid.colon
format.title "title" output.check
new.block
crossref missing$
{ format.in.ed.booktitle "booktitle" output.check
new.sentence
format.bvolume output
format.number.series output
address empty$
{ organization publisher new.sentence.checkb
organization empty$
'skip$
{ insert.comma }
if$
organization output
publisher empty$
'skip$
{ insert.comma }
if$
publisher output
format.date parens output
}
{ insert.comma
address output.nonnull
organization empty$
'skip$
{ insert.comma }
if$
organization output
publisher empty$
'skip$
{ insert.comma }
if$
publisher output
format.date parens output
}
if$
}
{ format.incoll.inproc.crossref output.nonnull
}
if$
format.pages output
and.the.note
fin.entry
}
FUNCTION {conference} { inproceedings }
FUNCTION {manual}
{ output.bibitem
author empty$
{ organization empty$
'skip$
{ organization output.nonnull
address output
}
if$
}
{ format.authors output.nonnull }
if$
stupid.colon
format.btitle "title" output.check
author empty$
{ organization empty$
{ address new.block.checka
address output
}
'skip$
if$
}
{ organization address new.block.checkb
organization output
address empty$
'skip$
{ insert.comma }
if$
address output
}
if$
new.sentence
format.edition output
format.date parens output
and.the.note
fin.entry
}
FUNCTION {mastersthesis}
{ output.bibitem
format.authors "author" output.check
stupid.colon
format.title "title" output.check
new.block
"Master's thesis" format.thesis.type output.nonnull
school empty$
'skip$
{ insert.comma }
if$
school "school" output.check
address empty$
'skip$
{ insert.comma }
if$
address output
format.date parens output
and.the.note
fin.entry
}
FUNCTION {misc}
{ output.bibitem
format.authors "author" output.check
stupid.colon
format.title "title" output.check
howpublished new.block.checka
howpublished output
format.date parens output
and.the.note
fin.entry
empty.misc.check
}
FUNCTION {phdthesis}
{ output.bibitem
format.authors "author" output.check
stupid.colon
format.btitle "title" output.check
new.block
"PhD thesis" format.thesis.type output.nonnull
school empty$
'skip$
{ insert.comma }
if$
school "school" output.check
address empty$
'skip$
{ insert.comma }
if$
address output
format.date parens output
and.the.note
fin.entry
}
FUNCTION {proceedings}
{ output.bibitem
editor empty$
{ organization empty$
{ "" }
{ organization output
stupid.colon }
if$
}
{ format.editors output.nonnull
stupid.colon
}
if$
format.btitle "title" output.check
new.block
crossref missing$
{ format.in.ed.booktitle "booktitle" output.check
new.sentence
format.bvolume output
format.number.series output
address empty$
{ organization publisher new.sentence.checkb
organization empty$
'skip$
{ insert.comma }
if$
organization output
publisher empty$
'skip$
{ insert.comma }
if$
publisher output
format.date parens output
}
{ insert.comma
address output.nonnull
organization empty$
'skip$
{ insert.comma }
if$
organization output
publisher empty$
'skip$
{ insert.comma }
if$
publisher output
format.date parens output
}
if$
}
{ format.incoll.inproc.crossref output.nonnull
}
if$
and.the.note
fin.entry
}
FUNCTION {techreport}
{ output.bibitem
format.authors "author" output.check
stupid.colon
format.title "title" output.check
new.block
format.tr.number output.nonnull
institution empty$
'skip$
{ insert.comma }
if$
institution "institution" output.check
address empty$
'skip$
{ insert.comma }
if$
address output
format.date parens output
and.the.note
fin.entry
}
FUNCTION {unpublished}
{ output.bibitem
format.authors "author" output.check
stupid.colon
format.title "title" output.check
new.block
note "note" output.check
format.date parens output
fin.entry
}
FUNCTION {default.type} { misc }
MACRO {jan} {"January"}
MACRO {feb} {"February"}
MACRO {mar} {"March"}
MACRO {apr} {"April"}
MACRO {may} {"May"}
MACRO {jun} {"June"}
MACRO {jul} {"July"}
MACRO {aug} {"August"}
MACRO {sep} {"September"}
MACRO {oct} {"October"}
MACRO {nov} {"November"}
MACRO {dec} {"December"}
MACRO {acmcs} {"ACM Computing Surveys"}
MACRO {acta} {"Acta Informatica"}
MACRO {cacm} {"Communications of the ACM"}
MACRO {ibmjrd} {"IBM Journal of Research and Development"}
MACRO {ibmsj} {"IBM Systems Journal"}
MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
MACRO {ieeetc} {"IEEE Transactions on Computers"}
MACRO {ieeetcad}
{"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
MACRO {ipl} {"Information Processing Letters"}
MACRO {jacm} {"Journal of the ACM"}
MACRO {jcss} {"Journal of Computer and System Sciences"}
MACRO {scp} {"Science of Computer Programming"}
MACRO {sicomp} {"SIAM Journal on Computing"}
MACRO {tocs} {"ACM Transactions on Computer Systems"}
MACRO {tods} {"ACM Transactions on Database Systems"}
MACRO {tog} {"ACM Transactions on Graphics"}
MACRO {toms} {"ACM Transactions on Mathematical Software"}
MACRO {toois} {"ACM Transactions on Office Information Systems"}
MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
MACRO {tcs} {"Theoretical Computer Science"}
READ
STRINGS { longest.label }
INTEGERS { number.label longest.label.width }
FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
#1 'number.label :=
#0 'longest.label.width :=
}
FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
number.label #1 + 'number.label :=
label width$ longest.label.width >
{ label 'longest.label :=
label width$ 'longest.label.width :=
}
'skip$
if$
}
EXECUTE {initialize.longest.label}
ITERATE {longest.label.pass}
FUNCTION {begin.bib}
{ preamble$ empty$
'skip$
{ preamble$ write$ newline$ }
if$
"\begin{thebibliography}{" longest.label * "}" * write$ newline$
}
EXECUTE {begin.bib}
EXECUTE {init.state.consts}
ITERATE {call.type$}
FUNCTION {end.bib}
{ newline$
"\end{thebibliography}" write$ newline$
}
EXECUTE {end.bib}
% clmomu01.ind
%-----------------------------------------------------------------------
% CLMoMu01 1.0: LaTeX style files for books
% Sample index file for User's guide
% (c) Springer-Verlag HD
%-----------------------------------------------------------------------
\begin{theindex}
\item Absorption\idxquad 327
\item Absorption of radiation \idxquad 289--292,\, 299,\,300
\item Actinides \idxquad 244
\item Aharonov-Bohm effect\idxquad 142--146
\item Angular momentum\idxquad 101--112
\subitem algebraic treatment\idxquad 391--396
\item Angular momentum addition\idxquad 185--193
\item Angular momentum commutation relations\idxquad 101
\item Angular momentum quantization\idxquad 9--10,\,104--106
\item Angular momentum states\idxquad 107,\,321,\,391--396
\item Antiquark\idxquad 83
\item $\alpha$-rays\idxquad 101--103
\item Atomic theory\idxquad 8--10,\,219--249,\,327
\item Average value\newline ({\it see also\/} Expectation value)
15--16,\,25,\,34,\,37,\,357
\indexspace
\item Baker-Hausdorff formula\idxquad 23
\item Balmer formula\idxquad 8
\item Balmer series\idxquad 125
\item Baryon\idxquad 220,\,224
\item Basis\idxquad 98
\item Basis system\idxquad 164,\,376
\item Bell inequality\idxquad 379--381,\,382
\item Bessel functions\idxquad 201,\,313,\,337
\subitem spherical\idxquad 304--306,\, 309,\, 313--314,\,322
\item Bound state\idxquad 73--74,\,78--79,\,116--118,\,202,\, 267,\,
273,\,306,\,348,\,351
\item Boundary conditions\idxquad 59,\, 70
\item Bra\idxquad 159
\item Breit-Wigner formula\idxquad 80,\,84,\,332
\item Brillouin-Wigner perturbation theory\idxquad 203
\indexspace
\item Cathode rays\idxquad 8
\item Causality\idxquad 357--359
\item Center-of-mass frame\idxquad 232,\,274,\,338
\item Central potential\idxquad 113--135,\,303--314
\item Centrifugal potential\idxquad 115--116,\,323
\item Characteristic function\idxquad 33
\item Clebsch-Gordan coefficients\idxquad 191--193
\item Cold emission\idxquad 88
\item Combination principle, Ritz's\idxquad 124
\item Commutation relations\idxquad 27,\,44,\,353,\,391
\item Commutator\idxquad 21--22,\,27,\,44,\,344
\item Compatibility of measurements\idxquad 99
\item Complete orthonormal set\idxquad 31,\,40,\,160,\,360
\item Complete orthonormal system, {\it see}\newline
Complete orthonormal set
\item Complete set of observables, {\it see\/} Complete
set of operators
\indexspace
\item Eigenfunction\idxquad 34,\,46,\,344--346
\subitem radial\idxquad 321
\subsubitem calculation\idxquad 322--324
\item EPR argument\idxquad 377--378
\item Exchange term\idxquad 228,\,231,\,237,\,241,\,268,\,272
\indexspace
\item $f$-sum rule\idxquad 302
\item Fermi energy\idxquad 223
\indexspace
\item H$^+_2$ molecule\idxquad 26
\item Half-life\idxquad 65
\item Holzwarth energies\idxquad 68
\end{theindex}
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="340.52362"
height="340.65274"
id="svg7943"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Új dokumentum 21">
<defs
id="defs7945">
<path
inkscape:transform-center-y="-3.7041667"
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:transform-center-x="1.902837"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3225"
style="fill:none;stroke:#980101;stroke-width:0.70014137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-1.240021,-2.4138594,2.4138594,-1.240021,985.30896,703.49865)" />
<path
transform="matrix(1.9231545,-1.91464,1.91464,1.9231545,556.01653,358.19871)"
sodipodi:type="arc"
style="fill:none;stroke:#980101;stroke-width:0.70014137;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3216"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:transform-center-x="-2.9511681"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
inkscape:transform-center-y="-2.9381179" />
<path
transform="matrix(1.5701332,3.6885219,3.6885219,-1.5701332,-461.05784,-167.49813)"
sodipodi:type="arc"
style="fill:none;stroke:#ffff00;stroke-width:0.47395673;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3588"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3575"
style="fill:none;stroke:#ffff00;stroke-width:0.49851683;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(0.64348983,-3.7565901,3.7565901,0.64348983,-329.36385,745.82088)" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path7826"
style="fill:none;stroke:#ffff00;stroke-width:0.49851683;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(0.64348983,-3.7565901,3.7565901,0.64348983,-329.36385,745.82088)" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="fill:none;stroke:#003366;stroke-width:0.67295331;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3562"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-0.62861196,2.7525075,-2.7525075,-0.62861196,424.93767,-110.28257)" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="fill:none;stroke:none"
id="path3524"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-1.5029938,-2.9059467,2.9059467,-1.5029938,63.277693,805.94859)" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="fill:none;stroke:none"
id="path7830"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-1.5029938,-2.9059467,2.9059467,-1.5029938,63.277693,805.94859)" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="opacity:0.1;fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.53900003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3503"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="118.39488"
sodipodi:ry="118.39488"
d="m 266.89488,86.862183 a 118.39488,118.39488 0 1 1 -236.789762,0 118.39488,118.39488 0 1 1 236.789762,0 z"
transform="matrix(0.29589859,1.1985833,1.1985833,-0.29589859,-55.552506,91.57496)" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="opacity:0.1;fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.53900003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path7833"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="118.39488"
sodipodi:ry="118.39488"
d="m 266.89488,86.862183 a 118.39488,118.39488 0 1 1 -236.789762,0 118.39488,118.39488 0 1 1 236.789762,0 z"
transform="matrix(0.29589859,1.1985833,1.1985833,-0.29589859,-55.552506,91.57496)" />
<path
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
d="m 125.58656,364.42906 c 28.77579,-8.16369 53.82029,-26.07346 70.84837,-50.66486"
id="path3464"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:transform-center-x="-70.632065"
inkscape:transform-center-y="98.769975"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
d="m 125.58656,364.42906 c 28.77579,-8.16369 53.82029,-26.07346 70.84837,-50.66486"
id="path7836"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:transform-center-x="-70.632065"
inkscape:transform-center-y="98.769975"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(-1.0841391,2.204492,2.204492,1.0841391,62.007667,-177.67557)"
sodipodi:type="arc"
style="opacity:0;fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:0.77341002;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3392"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:type="arc"
style="opacity:0;fill:#980101;fill-opacity:1;stroke:#ffffff;stroke-width:1.89999998;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3515"
sodipodi:cx="92.5"
sodipodi:cy="243.86218"
sodipodi:rx="29"
sodipodi:ry="29"
d="m 121.5,243.86218 a 29,29 0 1 1 -58,0 29,29 0 1 1 58,0 z"
transform="matrix(-0.01061887,0.99994362,-0.99994362,-0.01061887,337.33068,153.95694)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:type="arc"
style="fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.57088006;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3292"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-0.73337337,-0.96181362,0.96181362,-0.73337337,117.86071,450.39391)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3210"
style="opacity:0.1;fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.85499996;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-1.1871526,-1.8785474,1.8785474,-1.1871526,105.61742,625.94513)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.49497475"
inkscape:cx="176.6598"
inkscape:cy="195.26705"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="2"
fit-margin-left="2"
fit-margin-right="2"
fit-margin-bottom="2"
inkscape:window-width="678"
inkscape:window-height="749"
inkscape:window-x="1280"
inkscape:window-y="17"
inkscape:window-maximized="0" />
<metadata
id="metadata7948">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="1. réteg"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-304.0239,-353.45277)">
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path7842"
style="fill:none;stroke:#ffff00;stroke-width:0.49851683;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(0.64348983,-3.7565901,3.7565901,0.64348983,52.421854,1025.7494)" />
<path
transform="matrix(1.5701332,3.6885219,3.6885219,-1.5701332,-79.272136,112.43043)"
sodipodi:type="arc"
style="fill:none;stroke:#ffff00;stroke-width:0.47395673;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path7844"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="fill:none;stroke:#003366;stroke-width:0.67295331;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path7846"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
transform="matrix(-0.62861196,2.7525075,-2.7525075,-0.62861196,806.72337,169.64599)" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="opacity:0.1;fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.53900003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path7848"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="118.39488"
sodipodi:ry="118.39488"
d="m 266.89488,86.862183 c 0,65.387687 -53.00719,118.394877 -118.39488,118.394877 -65.387688,0 -118.394882,-53.00719 -118.394882,-118.394877 0,-65.387688 53.007194,-118.394883 118.394882,-118.394883 65.38769,0 118.39488,53.007195 118.39488,118.394883 z"
transform="matrix(0.29589859,1.1985833,1.1985833,-0.29589859,326.23319,371.50352)" />
<path
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3238"
style="fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.76191127;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-0.73806068,2.3820051,2.3820051,0.73806068,376.98155,105.95342)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path7851"
style="opacity:0.1;fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.85499996;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-1.1871526,-1.8785474,1.8785474,-1.1871526,487.40312,905.87369)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(4.132293,0,0,4.132293,-139.3598,164.85076)"
sodipodi:type="arc"
style="fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.45979312;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3150"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(3.6946248,0,0,3.6946248,-74.366076,202.86756)"
sodipodi:type="arc"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:0.51426053;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3272"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 128.25,51.788154 c 19.37085,-11.183766 44.14026,-4.546823 55.32403,14.824028 2.95698,5.121641 4.75642,10.828734 5.27186,16.720191 L 148.5,86.862183 z"
inkscape:transform-center-x="-5.6695666"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
sodipodi:start="4.1887902"
sodipodi:end="6.1959188" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-77.547636,201.00658)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3132"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -5.91396,0 -11.75617,-1.29518 -17.11604,-3.79453 L 148.5,86.862183 z"
sodipodi:start="0"
sodipodi:end="2.0071286"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-77.547636,201.00658)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3430"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.517963"
sodipodi:ry="40.517963"
d="m 189.01796,86.862183 c 0,22.377457 -18.14051,40.517967 -40.51796,40.517967 -1.24815,0 -2.49563,-0.0577 -3.73845,-0.17284 L 148.5,86.862183 z"
sodipodi:start="0"
sodipodi:end="1.6631942"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:end="1.4741804"
sodipodi:start="0"
d="m 189.01796,86.862183 c 0,20.863527 -15.84314,38.316387 -36.60937,40.328997 L 148.5,86.862183 z"
sodipodi:ry="40.517963"
sodipodi:rx="40.517963"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3446"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-77.547636,201.00658)" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-77.547636,201.00658)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3452"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.517963"
sodipodi:ry="40.517963"
d="m 189.01796,86.862183 c 0,20.698127 -15.60025,38.068697 -36.17938,40.285007 L 148.5,86.862183 z"
sodipodi:start="0"
sodipodi:end="1.4635127"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-77.547636,201.00658)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3428"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 137.55176,125.85431 c -2.16484,-0.60784 -4.2753,-1.39492 -6.3095,-2.35307 L 148.5,86.862183 z"
sodipodi:start="1.8445288"
sodipodi:end="2.0109926"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="m 128.25,121.93621 c -19.37085,-11.18376 -26.0078,-35.953176 -14.82403,-55.324027 2.95698,-5.121641 6.99975,-9.533548 11.84418,-12.925657 L 148.5,86.862183 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3134"
style="fill:#ffff99;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-77.547636,201.00658)"
sodipodi:start="2.0943951"
sodipodi:end="4.1015237"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
id="path3258"
d="m 475.22279,391.83481 c -23.83754,0 -47.34882,7.11351 -66.6491,18.1705 l 67.3053,113.79825 130.7812,-11.46875 c -5.8108,-67.50758 -62.424,-120.5 -131.4374,-120.5 z"
style="fill:#eeeeee;fill-opacity:1;stroke:#003366;stroke-width:1.89999974;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="scccs"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:end="0.90791653"
sodipodi:start="0"
d="m 183.21429,86.862183 c 0,10.690108 -4.9253,20.784027 -13.35149,27.362607 L 148.5,86.862183 z"
sodipodi:ry="34.714287"
sodipodi:rx="34.714287"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3426"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-77.547636,201.00658)" />
<path
inkscape:connector-curvature="0"
id="path3260"
d="m 597.01619,512.83059 c -3.6759,38.82512 -35.7283,65.39664 -61.7151,90.91258 -31.2208,30.08849 -82.35701,26.32501 -116.58393,3.51574 -40.49749,-24.9635 -58.48632,-78.23862 -44.30298,-123.16278 8.94091,-32.6142 34.84648,-59.72827 67.4441,-69.2231 48.85281,-16.80454 110.49431,-3.98972 140.97781,39.85496 11.0858,17.05711 15.6584,37.91904 14.1801,58.1026 z"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:1.89999974;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:type="arc"
style="opacity:0.1;fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.25121951;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3128"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
transform="matrix(-1.5185185,0,0,1.5185185,699.7857,391.88891)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:type="arc"
style="fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.57088006;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path7865"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
transform="matrix(-0.73337337,-0.96181362,0.96181362,-0.73337337,499.64641,730.32247)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
style="fill:none;stroke:none"
d="m 445.71762,444.79793 c 43.62652,-15.77772 91.78318,6.79821 107.5609,50.42473 15.77771,43.62652 -6.79821,91.78318 -50.42473,107.5609 -43.62653,15.77771 -91.78319,-6.79822 -107.5609,-50.42474 -15.77771,-43.62652 6.79821,-91.78318 50.42473,-107.56089 z"
id="path3105"
inkscape:connector-curvature="0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(2.6295998,0,0,2.6295998,83.790134,295.37796)"
sodipodi:type="arc"
style="fill:#aaccee;fill-opacity:1;stroke:#003366;stroke-width:0.7225433;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3199"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
inkscape:transform-center-x="-4.0352443"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(1.2839507,0,0,1.271605,285.11903,415.33636)"
sodipodi:type="arc"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:1.48697376;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3298"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-9.728884 3.50213,-19.132672 9.86592,-26.49157"
sodipodi:start="0"
sodipodi:end="3.8546018"
sodipodi:open="true"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:end="1.4608094"
sodipodi:start="0.90588138"
d="m 173.49927,118.74858 c -5.93635,4.65416 -13.05407,7.55875 -20.5518,8.38674 L 148.5,86.862183 z"
sodipodi:ry="40.517967"
sodipodi:rx="40.517967"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3495"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-77.547636,201.00658)" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-77.547636,201.00658)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3444"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="34.714287"
sodipodi:ry="34.714287"
d="m 169.91844,114.18126 c -5.08604,3.98751 -11.18424,6.47606 -17.60802,7.18545 L 148.5,86.862183 z"
sodipodi:start="0.90588138"
sodipodi:end="1.4608094"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:connector-curvature="0"
style="fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:1.9000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="m 473.0357,437.80356 c -57.02341,0 -103.25,43.76416 -103.25,97.75 0,4.4009 0.31105,8.72188 0.90625,12.96875 11.30806,46.15474 53.57916,80.68211 104.3125,81.75 0.13548,-9e-4 0.27088,0.001 0.40625,0 39.00612,-0.40429 72.96871,-21.7686 91.1875,-53.375 0.0165,-0.0333 0.0461,-0.0604 0.0625,-0.0937 6.17236,-12.52788 9.625,-26.51231 9.625,-41.25 0,-53.98584 -46.22659,-97.75 -103.25,-97.75 z"
id="path3201"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3294"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:1.07622373;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-0.72762529,-1.6085123,1.6085123,-0.72762529,442.61916,825.85794)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
sodipodi:linespacing="125%"
id="text3041"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
transform="matrix(0.99970601,-0.02424632,0.02424632,0.99970601,377.96832,282.00424)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3210"
id="textPath3212"><tspan
id="tspan3043"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
dx="10.5">OpenNebula</tspan></textPath></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3033"
sodipodi:linespacing="125%"
inkscape:transform-center-x="0.37728737"
inkscape:transform-center-y="-50.660877"
transform="matrix(0.99369837,0.11208727,-0.11208727,0.99369837,409.73136,266.65812)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3292"
id="textPath3116"><tspan
style="font-weight:bold"
id="tspan3120">Celery</tspan></textPath></text>
<path
transform="matrix(1.2345679,0,0,1.2345679,290.95236,416.55348)"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3118"
style="fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.53900003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
transform="translate(381.7857,279.92856)"
sodipodi:linespacing="100%"
id="text3037"
style="font-size:19px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3515"
startOffset="50%"
id="textPath3517"><tspan
dy="0 0 0 0 0 0 0"
id="tspan3296"
style="font-size:19px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;text-anchor:middle;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">RabbitMQ</tspan></textPath></text>
<path
transform="matrix(-1.0841391,2.204492,2.204492,1.0841391,443.79336,102.25299)"
sodipodi:type="arc"
style="opacity:0;fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:0.77341002;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path7884"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
transform="translate(381.7857,279.92856)"
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
id="text3394"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3392"
id="textPath3398"><tspan
style="font-size:30px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold"
id="tspan3396"
dx="1.4142134">CIRCLE</tspan></textPath></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-471.00821"
y="621.1474"
id="text3432"
sodipodi:linespacing="125%"
transform="matrix(0.32266286,-0.94651396,0.94651396,0.32266286,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><tspan
sodipodi:role="line"
x="-471.00821"
y="621.1474"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#980101;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="tspan3436">SMB</tspan></text>
<text
transform="matrix(0.20261113,-0.97925928,0.97925928,0.20261113,0,0)"
sodipodi:linespacing="125%"
id="text3440"
y="579.93793"
x="-545.62189"
style="font-size:38.21019363px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><tspan
id="tspan3442"
style="font-size:19.10509682px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#980101;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
y="579.93793"
x="-545.62189"
sodipodi:role="line">SFTP</tspan></text>
<text
xml:space="preserve"
style="font-size:38.21019363px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-642.69623"
y="494.18115"
id="text3448"
sodipodi:linespacing="125%"
transform="matrix(0.01924015,-0.99981489,0.99981489,0.01924015,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><tspan
sodipodi:role="line"
x="-642.69623"
y="494.18115"
style="font-size:19.10509682px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#980101;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="tspan3450">WEB</tspan></text>
<text
transform="translate(381.7857,279.92856)"
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:transform-center-y="-50.660877"
inkscape:transform-center-x="0.37728737"
sodipodi:linespacing="125%"
id="text3454"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"><textPath
xlink:href="#path3464"
id="textPath3470"><tspan
id="tspan3458"
style="font-weight:bold;fill:#980101"
dx="-4.24264">LVM</tspan></textPath></text>
<path
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
d="m 507.37226,644.35762 c 28.77579,-8.16369 53.82029,-26.07346 70.84837,-50.66486"
id="path7898"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:transform-center-x="-70.632065"
inkscape:transform-center-y="98.769975"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3473"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-97.650821"
inkscape:transform-center-y="65.385"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
transform="matrix(0.84808922,-0.52985344,0.52985344,0.84808922,266.62623,365.9853)"><textPath
id="textPath3475"
xlink:href="#path3464"><tspan
style="font-weight:bold;fill:#980101"
id="tspan3477"
dx="-1.7677672">QCOW</tspan></textPath></text>
<path
inkscape:transform-center-y="44.466657"
inkscape:transform-center-x="-108.56353"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3479"
d="m 566.22883,608.51119 c 20.07888,-22.1705 31.82929,-50.62949 33.24079,-80.50758"
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
transform="translate(381.7857,279.92856)"
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3487"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-1.5797689"
inkscape:transform-center-y="-50.705679"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3503"
id="textPath3506"><tspan
style="font-weight:bold;fill:#980101"
id="tspan3491"
dx="1.0606601">iSCSI</tspan></textPath></text>
<path
inkscape:transform-center-y="98.769975"
inkscape:transform-center-x="-70.632065"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3493"
d="m 508.78647,666.98504 c 28.77579,-8.16369 53.82029,-26.07346 70.84837,-50.66486"
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
transform="translate(381.7857,279.92856)"
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:transform-center-y="70.938638"
inkscape:transform-center-x="-115.63696"
sodipodi:linespacing="125%"
id="text3497"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"><textPath
xlink:href="#path3503"
id="textPath3510"><tspan
id="tspan3501"
style="font-weight:bold;fill:#980101"
dx="74.953384">NFS over IB</tspan></textPath></text>
<path
sodipodi:type="arc"
style="opacity:0;fill:#980101;fill-opacity:1;stroke:#ffffff;stroke-width:1.89999998;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path7911"
sodipodi:cx="92.5"
sodipodi:cy="243.86218"
sodipodi:rx="29"
sodipodi:ry="29"
d="m 121.5,243.86218 c 0,16.01626 -12.98374,29 -29,29 -16.016258,0 -29,-12.98374 -29,-29 0,-16.01626 12.983742,-29 29,-29 16.01626,0 29,12.98374 29,29 z"
transform="matrix(-0.01061887,0.99994362,-0.99994362,-0.01061887,719.11638,433.8855)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="translate(381.7857,279.92856)"
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3520"
sodipodi:cx="92.5"
sodipodi:cy="243.86218"
sodipodi:rx="10.000001"
sodipodi:ry="10.000001"
d="m 102.5,243.86218 c 0,5.52285 -4.477152,10 -10,10 -5.522848,0 -10.000001,-4.47715 -10.000001,-10 0,-5.52285 4.477153,-10 10.000001,-10 5.522848,0 10,4.47715 10,10 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#333333;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="text3057"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
transform="translate(383.2857,278.92856)"><textPath
xlink:href="#path3524"
id="textPath3536"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#333333;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold"
id="tspan3059"
dx="2 0 0 0 0 0 0 0 0 0 0 7.5">VT-x/AMD-V IOMMU+CUDA</tspan></textPath></text>
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="fill:none;stroke:none"
id="path7917"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 c 0,22.367527 -18.13247,40.499997 -40.5,40.499997 -22.36753,0 -40.5,-18.13247 -40.5,-40.499997 0,-22.367533 18.13247,-40.5 40.5,-40.5 22.36753,0 40.5,18.132467 40.5,40.5 z"
transform="matrix(-1.5029938,-2.9059467,2.9059467,-1.5029938,445.06339,1085.8772)" />
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:linespacing="125%"
id="text3550"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:transform-center-x="110.47503"
inkscape:transform-center-y="3.8880154"
transform="matrix(-0.49541966,-0.86865376,0.86865376,-0.49541966,306.78021,724.45533)"><textPath
id="textPath3552"
xlink:href="#path3524"><tspan
id="tspan3554"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#015a01;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold">Netfilter dnsmasq Open</tspan></textPath></text>
<text
inkscape:transform-center-y="3.8880154"
inkscape:transform-center-x="110.47503"
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="text3556"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
transform="translate(383.2857,278.92856)"><textPath
xlink:href="#path3562"
id="textPath3565"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#015a01;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold"
id="tspan3560"
dx="22.627419 0 0 0 0 0 0 0 0 0 0 1.4142135"> iptables tinydns vSwitch</tspan></textPath></text>
<path
transform="matrix(-0.71022656,3.1098739,-3.1098739,-0.71022656,849.88476,123.6663)"
d="m 187.35849,98.27567 c -5.11247,17.40597 -21.17604,29.28892 -39.31613,29.08393"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3568"
style="fill:none;stroke:#003366;stroke-width:0.59562188;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
sodipodi:start="0.28568475"
sodipodi:end="1.5820964"
sodipodi:open="true" />
<path
style="fill:none;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
d="M 370.18063,498.64376 327.56338,488.60335"
id="path3570"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3573"
d="m 375.93063,566.26876 -40.86725,15.70959"
style="fill:none;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
transform="translate(381.7857,279.92856)"
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
id="text3138"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3575"
id="textPath3577"><tspan
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="tspan3140">virtualization</tspan></textPath></text>
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:linespacing="125%"
id="text3582"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:transform-center-x="156.27315"
inkscape:transform-center-y="11.085366"
transform="matrix(-0.47669194,-0.87907042,0.87907042,-0.47669194,304.00768,721.35189)"><textPath
id="textPath3584"
xlink:href="#path3575"><tspan
id="tspan3586"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">networking</tspan></textPath></text>
<text
transform="translate(381.7857,279.92856)"
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:linespacing="125%"
id="text3590"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"><textPath
xlink:href="#path3588"
id="textPath3597"><tspan
id="tspan3594"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">storage</tspan></textPath></text>
<text
transform="matrix(0.99748842,-0.07082977,0.07082977,0.99748842,-544.7247,358.17924)"
sodipodi:linespacing="125%"
id="text3262"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#333333;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#333333;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="textPath3264"
xlink:href="#path3216">libvirt</textPath></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#333333;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="text3266"
sodipodi:linespacing="125%"
transform="translate(-536.74601,279.92856)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
id="textPath3268"
xlink:href="#path3225"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#333333;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="tspan3270">KVM</tspan></textPath></text>
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3274"
d="m 536.32911,386.47726 -8.0183,17.43383"
style="fill:none;stroke:#003366;stroke-width:1.9000001;stroke-miterlimit:4;stroke-dashoffset:0" />
</g>
</svg>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Better animations</title>
<style>
.container {
width: 400px;
-webkit-transition: height 700ms;
height: 0px;
overflow: hidden;
background-color: red;
}
.container.opened {
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
window.onload=function(){
document.getElementById('toggle-css-btn').onclick=function(){
var el=$('#toggle-css');
if(!el.hasClass('opened')) {
el.css('height', el.find('.details')[0].offsetHeight||'1000px');
} else {
el.css('height', '0px');
}
$('#toggle-css').toggleClass('opened');
}
}
</script>
</head>
<body>
<div class="container" id="toggle-css">
<div class="details">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec et consectetur augue. Nulla eu egestas massa. Sed convallis odio justo, ac vehicula sem. Nunc diam leo, consequat nec vulputate volutpat, vulputate quis enim. Praesent mattis egestas neque, at aliquam neque scelerisque non. Ut convallis ligula quis mi tincidunt id accumsan turpis tincidunt. Praesent quis lacus dolor, a varius magna. Aliquam tellus enim, convallis at varius a, pharetra eget dolor.
Aliquam sed leo quis ante fermentum viverra non at ante. Aliquam ante ligula, posuere in dictum egestas, commodo vel mi. Praesent dui nulla, accumsan euismod eleifend non, suscipit dapibus erat. Aliquam consequat felis ut sapien sodales ultricies non nec tellus. In ac odio ante. Nunc lectus urna, bibendum vitae sodales vel, volutpat id libero. Phasellus id turpis ligula, et tincidunt ante.
</div>
</div>
<button id="toggle-css-btn">Toggle, CSS3</button>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ellipsis test</title>
</head>
<body>
<div style="width: 40%; background-color: cyan;">
<div style="float: left; background-color: yellow; width: calc(100%-60px);">
<div style="background: red; float: left; text-overflow: ellipsis; width: 70%; min-width: 50px; overflow: hidden; white-space: nowrap;">Hosszú név, Hosszú név, Hosszú név, Hosszú név</div>
<div style="float: left; background-color: blue;">Részletek</div>
</div>
<div style="float: right; background-color: green;">jobb szél</div>
<div style="clear: both;"></div>
</div>
</body>
</html>
...@@ -6,7 +6,7 @@ from one.models import Instance ...@@ -6,7 +6,7 @@ from one.models import Instance
from django.template.loader import render_to_string from django.template.loader import render_to_string
from one.tasks import SendMailTask from one.tasks import SendMailTask
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from cloud.settings import CLOUD_URL as url from django.conf import settings
from django.utils import translation from django.utils import translation
class Job(HourlyJob): class Job(HourlyJob):
...@@ -16,6 +16,8 @@ class Job(HourlyJob): ...@@ -16,6 +16,8 @@ class Job(HourlyJob):
return (orig + datetime.timedelta(days=days, hours=hours)).replace(minute=0, second=0, microsecond=0) return (orig + datetime.timedelta(days=days, hours=hours)).replace(minute=0, second=0, microsecond=0)
def execute(self): def execute(self):
url = settings.CLOUD_URL
site = settings.SITE_NAME
now = datetime.datetime.utcnow().replace(tzinfo=utc) now = datetime.datetime.utcnow().replace(tzinfo=utc)
d = { d = {
'1m': self.calc(orig=now, days=30), '1m': self.calc(orig=now, days=30),
...@@ -28,26 +30,33 @@ class Job(HourlyJob): ...@@ -28,26 +30,33 @@ class Job(HourlyJob):
# print i+':'+unicode(d[i]) # print i+':'+unicode(d[i])
# delete # delete
for i in Instance.objects.filter(state__in=['ACTIVE', 'STOPPED'], time_of_delete__isnull=False): for i in Instance.objects.filter(state__in=['ACTIVE', 'STOPPED'],
time_of_delete__isnull=False, waiting=False):
try: try:
translation.activate(i.owner.person_set.get().language) translation.activate(i.owner.person_set.get().language)
except: except:
pass pass
# print u'%s delete: %s' % (i.name, i.time_of_delete) # print u'%s delete: %s' % (i.name, i.time_of_delete)
delete = i.time_of_delete.replace(minute=0, second=0, microsecond=0) delete = i.time_of_delete.replace(minute=0, second=0, microsecond=0)
continue if not settings.DELETE_VM:
continue
if i.time_of_delete < now: if i.time_of_delete < now:
# msg = render_to_string('mails/notification-delete-now.txt', { 'user': i.owner, 'instance': i, 'url': url } ) msg = render_to_string('mails/notification-delete-now.txt',
# SendMailTask.delay(to=i.owner.email, subject='[IK Cloud] %s' % i.name, msg=msg) { 'user': i.owner, 'instance': i, 'url': url, 'site': site } )
pass SendMailTask.delay(to=i.owner.email, subject='[%s] %s' %
(site, i.name), msg=msg)
i.one_delete()
else: else:
for t in d: for t in d:
if delete == d[t]: if delete == d[t]:
msg = render_to_string('mails/notification-delete.txt', { 'user': i.owner, 'instance': i, 'url': url } ) msg = render_to_string('mails/notification-delete.txt',
SendMailTask.delay(to=i.owner.email, subject='[IK Cloud] %s' % i.name, msg=msg) { 'user': i.owner, 'instance': i, 'url': url, 'site': site } )
SendMailTask.delay(to=i.owner.email, subject='[%s] %s' %
(site, i.name), msg=msg)
# suspend # suspend
for i in Instance.objects.filter(state='ACTIVE', time_of_suspend__isnull=False): for i in Instance.objects.filter(state='ACTIVE',
time_of_suspend__isnull=False, waiting=False):
try: try:
translation.activate(i.owner.person_set.get().language) translation.activate(i.owner.person_set.get().language)
except: except:
...@@ -56,11 +65,15 @@ class Job(HourlyJob): ...@@ -56,11 +65,15 @@ class Job(HourlyJob):
suspend = i.time_of_suspend.replace(minute=0, second=0, microsecond=0) suspend = i.time_of_suspend.replace(minute=0, second=0, microsecond=0)
if i.time_of_suspend < now: if i.time_of_suspend < now:
msg = render_to_string('mails/notification-suspend-now.txt', { 'user': i.owner, 'instance': i, 'url': url } ) msg = render_to_string('mails/notification-suspend-now.txt',
SendMailTask.delay(to=i.owner.email, subject='[IK Cloud] %s' % i.name, msg=msg) { 'user': i.owner, 'instance': i, 'url': url, 'site': site } )
SendMailTask.delay(to=i.owner.email, subject='[%s] %s' %
(site, i.name), msg=msg)
i.stop() i.stop()
else: else:
for t in d: for t in d:
if suspend == d[t]: if suspend == d[t]:
msg = render_to_string('mails/notification-suspend.txt', { 'user': i.owner, 'instance': i, 'url': url } ) msg = render_to_string('mails/notification-suspend.txt',
SendMailTask.delay(to=i.owner.email, subject='[IK Cloud] %s' % i.name, msg=msg) { 'user': i.owner, 'instance': i, 'url': url, 'site': site } )
SendMailTask.delay(to=i.owner.email, subject='[%s] %s' %
(site, i.name), msg=msg)
...@@ -18,7 +18,9 @@ from firewall.models import Host, Rule, Vlan, Record ...@@ -18,7 +18,9 @@ from firewall.models import Host, Rule, Vlan, Record
from school.models import Person, Group from school.models import Person, Group
from store.api import StoreApi from store.api import StoreApi
from .util import keygen from .util import keygen
from cloud.settings import CLOUD_URL import django.conf
CLOUD_URL = django.conf.settings.CLOUD_URL
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
pwgen = User.objects.make_random_password pwgen = User.objects.make_random_password
...@@ -228,6 +230,9 @@ class Share(models.Model): ...@@ -228,6 +230,9 @@ class Share(models.Model):
return u"%(group)s: %(tpl)s %(owner)s" % { return u"%(group)s: %(tpl)s %(owner)s" % {
'group': self.group, 'tpl': self.template, 'owner': self.owner} 'group': self.group, 'tpl': self.template, 'owner': self.owner}
def get_used_quota(self):
return self.template.get_credits_per_instance() * self.instance_limit
class Disk(models.Model): class Disk(models.Model):
"""Virtual disks automatically synchronized with OpenNebula.""" """Virtual disks automatically synchronized with OpenNebula."""
name = models.CharField(max_length=100, unique=True, name = models.CharField(max_length=100, unique=True,
...@@ -244,23 +249,23 @@ class Disk(models.Model): ...@@ -244,23 +249,23 @@ class Disk(models.Model):
@staticmethod @staticmethod
def update(delete=True): def update(delete=True):
"""Get and register virtual disks from OpenNebula.""" """Get and register virtual disks from OpenNebula."""
import subprocess try:
proc = subprocess.Popen(["/opt/occi.sh", "storage", "list"], from .tasks import UpdateDiskTask
stdout=subprocess.PIPE, stderr=subprocess.PIPE) x = UpdateDiskTask.delay().get(timeout=10)
(out, err) = proc.communicate() x[0]
from xml.dom.minidom import parse, parseString except:
x = parseString(out) return
with transaction.commit_on_success(): with transaction.commit_on_success():
l = [] l = []
for d in x.getElementsByTagName("STORAGE"): for d in x:
id = int(d.getAttributeNode('href').nodeValue.split('/')[-1]) id = int(d['id'])
name=d.getAttributeNode('name').nodeValue name = d['name']
try: try:
d = Disk.objects.get(id=id) d, created = Disk.objects.get_or_create(id=id)
d.name=name d.name = name
d.save() d.save()
except: except:
Disk(id=id, name=name).save() pass
l.append(id) l.append(id)
if delete: if delete:
Disk.objects.exclude(id__in=l).delete() Disk.objects.exclude(id__in=l).delete()
...@@ -286,23 +291,23 @@ class Network(models.Model): ...@@ -286,23 +291,23 @@ class Network(models.Model):
@staticmethod @staticmethod
def update(): def update():
"""Get and register virtual networks from OpenNebula.""" """Get and register virtual networks from OpenNebula."""
import subprocess try:
proc = subprocess.Popen(["/opt/occi.sh", "network", "list"], from .tasks import UpdateNetworkTask
stdout=subprocess.PIPE, stderr=subprocess.PIPE) x = UpdateNetworkTask.delay().get(timeout=10)
(out, err) = proc.communicate() x[0]
from xml.dom.minidom import parse, parseString except:
x = parseString(out) return
with transaction.commit_on_success(): with transaction.commit_on_success():
l = [] l = []
for d in x.getElementsByTagName("NETWORK"): for n in x:
id = int(d.getAttributeNode('href').nodeValue.split('/')[-1]) id = int(n['id'])
name=d.getAttributeNode('name').nodeValue name = n['name']
try: try:
n = Network.objects.get(id=id) n, created = Network.objects.get_or_create(id=id)
n.name = name n.name = name
n.save() n.save()
except: except:
Network(id=id, name=name).save() pass
l.append(id) l.append(id)
Network.objects.exclude(id__in=l).delete() Network.objects.exclude(id__in=l).delete()
def get_vlan(self): def get_vlan(self):
...@@ -381,6 +386,30 @@ class Template(models.Model): ...@@ -381,6 +386,30 @@ class Template(models.Model):
logger.info("Could not delete template. Instances still running!") logger.info("Could not delete template. Instances still running!")
return False return False
def get_credits_per_instance(self):
return self.instance_type.credit
def get_shares_for(self, user=None):
shares = Share.objects.all().filter(template=self)
if user:
return shares.filter(owner=user)
else:
return shares
def get_share_quota_usage_for(self, user=None):
shares = self.get_shares_for(user)
usage = 0
for share in shares:
usage += share.instance_limit * self.get_credits_per_instance()
return usage
def get_share_quota_usage_for_user_with_type(self, type, user=None):
shares = self.get_shares_for(user)
usage = 0
for share in shares:
usage += share.instance_limit * type.credit
return usage
class Instance(models.Model): class Instance(models.Model):
"""Virtual machine instance.""" """Virtual machine instance."""
name = models.CharField(max_length=100, name = models.CharField(max_length=100,
...@@ -461,33 +490,6 @@ class Instance(models.Model): ...@@ -461,33 +490,6 @@ class Instance(models.Model):
except: except:
return return
def update_state(self):
"""Get and update VM state from OpenNebula."""
import subprocess
if not self.one_id:
return
proc = subprocess.Popen(["/opt/occi.sh", "compute", "show",
"%d" % self.one_id], stdout=subprocess.PIPE)
(out, err) = proc.communicate()
x = None
old_state = self.state
try:
from xml.dom.minidom import parse, parseString
x = parseString(out)
self.vnet_ip = (x.getElementsByTagName("IP")[0].childNodes[0]
.nodeValue.split('.')[3])
state = x.getElementsByTagName("STATE")[0].childNodes[0].nodeValue
self.state = state
except:
self.state = 'UNKNOWN'
if self.state != old_state:
self.waiting = False
self.save()
if self.template.state == 'SAVING':
self.check_if_is_save_as_done()
return x
@property @property
def nat(self): def nat(self):
if self.firewall_host is not None: if self.firewall_host is not None:
...@@ -512,81 +514,69 @@ class Instance(models.Model): ...@@ -512,81 +514,69 @@ class Instance(models.Model):
def submit(cls, template, owner, extra="", share=None): def submit(cls, template, owner, extra="", share=None):
"""Submit a new instance to OpenNebula.""" """Submit a new instance to OpenNebula."""
from django.template.defaultfilters import escape from django.template.defaultfilters import escape
out = ""
inst = Instance(pw=pwgen(), template=template, owner=owner, inst = Instance(pw=pwgen(), template=template, owner=owner,
share=share, state='PENDING') share=share, state='PENDING')
inst.save() inst.save()
hostname = u"%d" % (inst.id, ) hostname = u"%d" % (inst.id, )
with tempfile.NamedTemporaryFile(delete=False) as f: token = signing.dumps(inst.id, salt='activate')
os.chmod(f.name, stat.S_IRUSR|stat.S_IWUSR|stat.S_IRGRP|stat.S_IROTH)
token = signing.dumps(inst.id, salt='activate')
try:
details = owner.cloud_details
except:
details = UserCloudDetails(user=owner)
details.save()
tpl = u"""
<COMPUTE>
<NAME>%(name)s</NAME>
<INSTANCE_TYPE href="http://www.opennebula.org/instance_type/%(instance)s"/>
<DISK>
<STORAGE href="http://www.opennebula.org/storage/%(disk)d"/>
</DISK>
<NIC>
<NETWORK href="http://www.opennebula.org/network/%(net)d"/>
</NIC>
<CONTEXT>
<SOURCE>web</SOURCE>
<HOSTNAME>%(hostname)s</HOSTNAME>
<NEPTUN>%(neptun)s</NEPTUN>
<USERPW>%(pw)s</USERPW>
<SMBPW>%(smbpw)s</SMBPW>
<SSHPRIV>%(sshkey)s</SSHPRIV>
<BOOTURL>%(booturl)s</BOOTURL>
<SERVER>store.cloud.ik.bme.hu</SERVER>
%(extra)s
</CONTEXT>
</COMPUTE>""" % {"name": u"%s %d" % (owner.username, inst.id),
"instance": template.instance_type,
"disk": template.disk.id,
"net": template.network.id,
"pw": escape(inst.pw),
"hostname": escape(hostname),
"smbpw": escape(details.smb_password),
"sshkey": escape(details.ssh_private_key),
"neptun": escape(owner.username),
"booturl": "%sb/%s/" % ( CLOUD_URL, token ),
"extra": extra}
f.write(tpl)
f.close()
import subprocess
proc = subprocess.Popen(["/opt/occi.sh", "compute", "create",
f.name], stdout=subprocess.PIPE)
(out, err) = proc.communicate()
os.unlink(f.name)
from xml.dom.minidom import parse, parseString
try: try:
x = parseString(out) details = owner.cloud_details
except:
details = UserCloudDetails(user=owner)
details.save()
ctx = u'''
<SOURCE>web</SOURCE>
<HOSTNAME>%(hostname)s</HOSTNAME>
<NEPTUN>%(neptun)s</NEPTUN>
<USERPW>%(pw)s</USERPW>
<SMBPW>%(smbpw)s</SMBPW>
<SSHPRIV>%(sshkey)s</SSHPRIV>
<BOOTURL>%(booturl)s</BOOTURL>
<SERVER>store.cloud.ik.bme.hu</SERVER>
%(extra)s
''' % {
"pw": escape(inst.pw),
"hostname": escape(hostname),
"smbpw": escape(details.smb_password),
"sshkey": escape(details.ssh_private_key),
"neptun": escape(owner.username),
"booturl": "%sb/%s/" % ( CLOUD_URL, token ),
"extra": extra
}
try:
from .tasks import CreateInstanceTask
x = CreateInstanceTask.delay(
name=u"%s %d" % (owner.username, inst.id),
instance_type=template.instance_type.name,
disk_id=int(template.disk.id),
network_id=int(template.network.id),
ctx=ctx,
)
res = x.get(timeout=10)
res['one_id']
except: except:
inst.delete() inst.delete()
raise Exception("Unable to create VM instance.") raise Exception("Unable to create VM instance.")
inst.one_id = int(x.getElementsByTagName("ID")[0].childNodes[0]
.nodeValue) inst.one_id = res['one_id']
inst.ip = x.getElementsByTagName("IP")[0].childNodes[0].nodeValue inst.ip = res['interfaces'][0]['ip']
inst.name = ("%(neptun)s %(template)s (%(id)d)" % inst.name = ("%(neptun)s %(template)s (%(id)d)" %
{'neptun': owner.username, 'template': template.name, {'neptun': owner.username, 'template': template.name,
'id': inst.one_id}) 'id': inst.one_id})
inst.save() inst.save()
host = Host(vlan=Vlan.objects.get(name=template.network.name),
owner=owner) host = Host(
host.hostname = hostname vlan=Vlan.objects.get(name=template.network.name),
host.mac = x.getElementsByTagName("MAC")[0].childNodes[0].nodeValue owner=owner, hostname=hostname,
host.ipv4 = inst.ip mac=res['interfaces'][0]['mac'],
ipv4=res['interfaces'][0]['ip'], ipv6='auto',
)
if inst.template.network.nat: if inst.template.network.nat:
host.pub_ipv4 = Vlan.objects.get(name=template.network.name).snat_ip host.pub_ipv4 = Vlan.objects.get(name=template.network.name).snat_ip
host.shared_ip = True host.shared_ip = True
host.ipv6 = "auto"
try: try:
host.save() host.save()
except: except:
...@@ -597,6 +587,7 @@ class Instance(models.Model): ...@@ -597,6 +587,7 @@ class Instance(models.Model):
logger.warning('Delete orphan fw host (%s) of %s.' % (i, inst)) logger.warning('Delete orphan fw host (%s) of %s.' % (i, inst))
i.delete() i.delete()
host.save() host.save()
host.enable_net() host.enable_net()
host.add_port("tcp", inst.get_port(), {"rdp": 3389, "nx": 22, host.add_port("tcp", inst.get_port(), {"rdp": 3389, "nx": 22,
"ssh": 22}[inst.template.access_type]) "ssh": 22}[inst.template.access_type])
...@@ -606,10 +597,13 @@ class Instance(models.Model): ...@@ -606,10 +597,13 @@ class Instance(models.Model):
def one_delete(self): def one_delete(self):
"""Delete host in OpenNebula.""" """Delete host in OpenNebula."""
if self.template.state != "DONE":
self.check_if_is_save_as_done()
if self.one_id and self.state != 'DONE': if self.one_id and self.state != 'DONE':
proc = subprocess.Popen(["/opt/occi.sh", "compute", "delete", self.waiting = True
"%d" % self.one_id], stdout=subprocess.PIPE) self.save()
(out, err) = proc.communicate() from .tasks import DeleteInstanceTask
DeleteInstanceTask.delay(one_id=self.one_id)
self.firewall_host_delete() self.firewall_host_delete()
def firewall_host_delete(self): def firewall_host_delete(self):
...@@ -622,28 +616,10 @@ class Instance(models.Model): ...@@ -622,28 +616,10 @@ class Instance(models.Model):
pass pass
h.delete() h.delete()
def _update_vm(self, template):
out = ""
with tempfile.NamedTemporaryFile(delete=False) as f:
os.chmod(f.name, stat.S_IRUSR|stat.S_IWUSR|stat.S_IRGRP|stat.S_IROTH)
tpl = u"""
<COMPUTE>
<ID>%(id)d</ID>
%(template)s
</COMPUTE>""" % {"id": self.one_id,
"template": template}
f.write(tpl)
f.close()
import subprocess
proc = subprocess.Popen(["/opt/occi.sh", "compute", "update",
f.name], stdout=subprocess.PIPE)
(out, err) = proc.communicate()
os.unlink(f.name)
print "out: " + out
def _change_state(self, new_state): def _change_state(self, new_state):
"""Change host state in OpenNebula.""" """Change host state in OpenNebula."""
self._update_vm("<STATE>" + new_state + "</STATE>") from .tasks import ChangeInstanceStateTask
ChangeInstanceStateTask.delay(one_id=self.one_id, new_state=new_state)
self.waiting = True self.waiting = True
self.save() self.save()
...@@ -680,7 +656,8 @@ class Instance(models.Model): ...@@ -680,7 +656,8 @@ class Instance(models.Model):
def save_as(self): def save_as(self):
"""Save image and shut down.""" """Save image and shut down."""
imgname = "template-%d-%d" % (self.template.id, self.id) imgname = "template-%d-%d" % (self.template.id, self.id)
self._update_vm('<DISK id="0"><SAVE_AS name="%s"/></DISK>' % imgname) from .tasks import SaveAsTask
SaveAsTask.delay(one_id=self.one_id, new_img=imgname)
self._change_state("SHUTDOWN") self._change_state("SHUTDOWN")
self.save() self.save()
t = self.template t = self.template
...@@ -701,22 +678,9 @@ class Instance(models.Model): ...@@ -701,22 +678,9 @@ class Instance(models.Model):
self.firewall_host_delete() self.firewall_host_delete()
return True return True
def delete_instance(sender, instance, using, **kwargs): def delete_instance_pre(sender, instance, using, **kwargs):
if instance.state != "DONE": if instance.state != 'DONE':
instance.one_delete() instance.one_delete()
try:
instance.firewall_host_delete()
except:
pass
post_delete.connect(delete_instance, sender=Instance,
dispatch_uid="delete_instance")
def delete_instance_pre(sender, instance, using, **kwargs):
try:
if instance.template.state != "DONE":
instance.check_if_is_save_as_done()
except:
pass
pre_delete.connect(delete_instance_pre, sender=Instance, pre_delete.connect(delete_instance_pre, sender=Instance,
dispatch_uid="delete_instance_pre") dispatch_uid="delete_instance_pre")
var toggleDetails; var toggleDetails;
$(function() { $(function() {
toggleDetails = cloud.throttle(function() { toggleDetails = function() {
if ($(this).parent('.entry').hasClass('opened')) { if ($(this).parent('.entry').hasClass('opened')) {
$(this).parent('.entry').removeClass('opened'); $(this).parent('.entry').removeClass('opened');
$(this).next('.details').slideUp(700); $(this).next('.details').css('height', '0px');
} else { } else {
$(this).parent('.entry').addClass('opened'); $(this).parent('.entry').addClass('opened');
$(this).next('.details').slideDown(700); $(this).next('.details').css('height',
$(this).next('.details').find('.details-container')[0].offsetHeight+15+'px');
} }
}) }
$('a[href=#]').click(function(e) { $('a[href=#]').click(function(e) {
e.preventDefault(); e.preventDefault();
}); });
......
...@@ -273,13 +273,17 @@ ...@@ -273,13 +273,17 @@
z-index: 2; z-index: 2;
position: relative; position: relative;
} }
.details {
height: auto;
}
} }
&.opened #new-folder-form { &.opened #new-folder-form {
display: block; display: block;
} }
.details { .details {
border-top: 1px solid #888; height: 0px;
display: none; .vendor(transition, height 700ms);
overflow: hidden;
.container { .container {
padding: 5px 5px; padding: 5px 5px;
.upload-zone { .upload-zone {
...@@ -314,6 +318,9 @@ ...@@ -314,6 +318,9 @@
a { a {
text-decoration: underline; text-decoration: underline;
} }
.details-container {
border-top: 1px solid #888;
}
.name { .name {
float: none; float: none;
background-image: url(/static/icons/computer.png); background-image: url(/static/icons/computer.png);
......
from celery.task import Task, PeriodicTask from celery.task import Task
import logging import logging
import celery
import os
import sys
import time
from django.core.mail import send_mail from django.core.mail import send_mail
from django.conf import settings
from one.models import Instance from one.models import Instance
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class SendMailTask(Task): class SendMailTask(Task):
def run(self, to, subject, msg, sender=u'noreply@cloud.ik.bme.hu'): def run(self, to, subject, msg, sender=None):
send_mail(subject, msg, sender, [ to ], fail_silently=False) if sender is None:
logger.info("[django][one][tasks.py] %s->%s [%s]" % (sender, to, subject) ) if settings.SITE_NAME:
sender = '"%s" <%s>' % (settings.SITE_NAME.replace('"', ''),
settings.DEFAULT_FROM_EMAIL)
else:
sender = settings.DEFAULT_FROM_EMAIL
send_mail(subject, msg, sender, [to, ], fail_silently=False)
logger.info("[django][one][tasks] %s->%s %s" % (sender, to, subject))
class UpdateInstanceStateTask(Task): class UpdateInstanceStateTask(Task):
def run(self, one_id): def run(self, one_id, new_state):
print one_id print one_id
try: try:
inst = Instance.objects.get(one_id=one_id) inst = Instance.objects.get(one_id=one_id)
except: except:
print 'nincs ilyen' print 'nincs ilyen'
return return
inst.update_state() inst.state = new_state
inst.waiting = False inst.waiting = False
inst.save() inst.save()
if inst.template.state == 'SAVING':
inst.check_if_is_save_as_done()
print inst.state print inst.state
# ezek csak azert vannak felveve, hogy szepen meg lehessen hivni oket
# ezeket a fejgepen futo celery futtatja
class CreateInstanceTask(Task):
def run(self, name, instance_type, disk_id, network_id, ctx):
pass
class DeleteInstanceTask(Task):
def run(self, one_id):
pass
class ChangeInstanceStateTask(Task):
def run(self, one_id, new_state):
pass
class SaveAsTask(Task):
def run(self, one_id, new_img):
pass
class UpdateDiskTask(Task):
def run(self):
pass
class UpdateNetworkTask(Task):
def run(self):
pass
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
{% block body %} {% block body %}
{% blocktrans with vm=instance.name state=instance.state|lower date=instance.time_of_delete time=exp|timeuntil %} {% blocktrans with vm=instance.name state=instance.state|lower date=instance.time_of_delete time=instance.time_of_delete|timeuntil %}
Your {{state}} virtual machine "{{vm}}" is going to be DELETED Your {{state}} virtual machine "{{vm}}" is going to be DELETED
at {{date}} (in {{time}}). at {{date}} (in {{time}}).
{% endblocktrans %} {% endblocktrans %}
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
{% block body %} {% block body %}
{% blocktrans with vm=instance.name state=instance.state|lower date=instance.time_of_suspend time=exp|timeuntil url=url %} {% blocktrans with vm=instance.name state=instance.state|lower date=instance.time_of_suspend time=instance.time_of_suspend|timeuntil url=url %}
Your {{state}} virtual machine "{{vm}}" is going to be STOPPED Your {{state}} virtual machine "{{vm}}" is going to be STOPPED
at {{date}} (in {{time}}). at {{date}} (in {{time}}).
{% endblocktrans %} {% endblocktrans %}
......
...@@ -16,11 +16,10 @@ from django.template import RequestContext ...@@ -16,11 +16,10 @@ from django.template import RequestContext
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.translation import get_language as lang from django.utils.translation import get_language as lang
from django.utils.translation import ugettext_lazy as _, ungettext_lazy from django.utils.translation import ugettext_lazy as _
from django.views.decorators.http import * from django.views.decorators.http import *
from django.views.generic import * from django.views.generic import *
from firewall.tasks import * from firewall.tasks import *
from cloud.settings import store_settings
from one.models import * from one.models import *
from school.models import * from school.models import *
import django.contrib.auth as auth import django.contrib.auth as auth
...@@ -28,6 +27,7 @@ import json ...@@ -28,6 +27,7 @@ import json
import logging import logging
import subprocess import subprocess
store_settings = settings.STORE_SETTINGS
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def _list_instances(request): def _list_instances(request):
...@@ -147,9 +147,19 @@ class AjaxTemplateEditWizard(View): ...@@ -147,9 +147,19 @@ class AjaxTemplateEditWizard(View):
})) }))
def post(self, request, id, *args, **kwargs): def post(self, request, id, *args, **kwargs):
template = get_object_or_404(Template, id=id) template = get_object_or_404(Template, id=id)
user_details = UserCloudDetails.objects.get(user=request.user)
if template.owner != request.user and not template.public and not request.user.is_superuser: if template.owner != request.user and not template.public and not request.user.is_superuser:
raise PermissionDenied() raise PermissionDenied()
template.instance_type_id = request.POST['size'] instance_type = get_object_or_404(InstanceType, id=request.POST['size'])
current_used_share_quota = user_details.get_weighted_share_count()
current_used_share_quota_without_template = current_used_share_quota - template.get_share_quota_usage_for(request.user)
new_quota_for_current_template = template.get_share_quota_usage_for_user_with_type(instance_type, request.user)
new_used_share_quota = current_used_share_quota_without_template + new_quota_for_current_template
allow_type_modify = True if new_used_share_quota <= user_details.share_quota else False
if not allow_type_modify:
messages.error(request, _('You do not have enough free share quota.'))
return redirect(home)
template.instance_type = instance_type
template.description = request.POST['description'] template.description = request.POST['description']
template.name = request.POST['name'] template.name = request.POST['name']
template.save() template.save()
...@@ -208,7 +218,11 @@ ajax_share_wizard = login_required(AjaxShareWizard.as_view()) ...@@ -208,7 +218,11 @@ ajax_share_wizard = login_required(AjaxShareWizard.as_view())
class AjaxShareEditWizard(View): class AjaxShareEditWizard(View):
def get(self, request, id, *args, **kwargs): def get(self, request, id, *args, **kwargs):
det = UserCloudDetails.objects.get(user=request.user) det = UserCloudDetails.objects.get(user=request.user)
if det.get_weighted_share_count() >= det.share_quota: if det.get_weighted_share_count() > det.share_quota:
logger.warning('[one] User %s ha more used share quota, than its limit, how is that possible? (%d > %d)',
str(request.user),
det.get_weighted_share_count(),
det.share_quota)
return HttpResponse(unicode(_('You do not have any free share quota.'))) return HttpResponse(unicode(_('You do not have any free share quota.')))
types = TYPES_L types = TYPES_L
for i, t in enumerate(types): for i, t in enumerate(types):
...@@ -228,16 +242,21 @@ class AjaxShareEditWizard(View): ...@@ -228,16 +242,21 @@ class AjaxShareEditWizard(View):
stype = request.POST['type'] stype = request.POST['type']
if not stype in TYPES.keys(): if not stype in TYPES.keys():
raise PermissionDenied() raise PermissionDenied()
il = request.POST['instance_limit'] instance_limit = int(request.POST['instance_limit'])
if det.get_weighted_share_count() + int(il)*share.template.instance_type.credit > det.share_quota: current_used_share_quota = det.get_weighted_share_count()
current_used_share_quota_without_current_share = current_used_share_quota - share.get_used_quota()
new_quota_for_current_share = instance_limit * share.template.get_credits_per_instance()
new_used_share_quota = current_used_share_quota_without_current_share + new_quota_for_current_share
allow_stype_modify = True if new_used_share_quota <= det.share_quota else False
if not allow_stype_modify:
messages.error(request, _('You do not have enough free share quota.')) messages.error(request, _('You do not have enough free share quota.'))
return redirect('/') return redirect(share.group)
share.name=request.POST['name'] share.name = request.POST['name']
share.description=request.POST['description'] share.description = request.POST['description']
share.type=stype share.type = stype
share.instance_limit=il share.instance_limit = instance_limit
share.per_user_limit=request.POST['per_user_limit'] share.per_user_limit = request.POST['per_user_limit']
share.owner=request.user share.owner = request.user
share.save() share.save()
messages.success(request, _('Successfully edited share %s.') % share) messages.success(request, _('Successfully edited share %s.') % share)
return redirect(share.group) return redirect(share.group)
...@@ -300,7 +319,7 @@ def _check_quota(request, template, share): ...@@ -300,7 +319,7 @@ def _check_quota(request, template, share):
@login_required @login_required
def vm_new(request, template=None, share=None, redir=True): def vm_new(request, template=None, share=None, redir=True):
base = None base = None
extra = None extra = ''
if template: if template:
base = get_object_or_404(Template, pk=template) base = get_object_or_404(Template, pk=template)
else: else:
...@@ -460,7 +479,7 @@ class VmDeleteView(View): ...@@ -460,7 +479,7 @@ class VmDeleteView(View):
inst = get_object_or_404(Instance, id=iid, owner=request.user) inst = get_object_or_404(Instance, id=iid, owner=request.user)
if inst.template.state != 'READY' and inst.template.owner == request.user: if inst.template.state != 'READY' and inst.template.owner == request.user:
inst.template.delete() inst.template.delete()
inst.delete() inst.one_delete()
messages.success(request, _('Virtual machine is successfully deleted.')) messages.success(request, _('Virtual machine is successfully deleted.'))
except: except:
messages.error(request, _('Failed to delete virtual machine.')) messages.error(request, _('Failed to delete virtual machine.'))
...@@ -484,21 +503,12 @@ def vm_unshare(request, id, *args, **kwargs): ...@@ -484,21 +503,12 @@ def vm_unshare(request, id, *args, **kwargs):
if not g.owners.filter(user=request.user).exists(): if not g.owners.filter(user=request.user).exists():
raise PermissionDenied() raise PermissionDenied()
try: try:
n = s.get_running() if s.get_running_or_stopped() > 0:
m = s.get_running_or_stopped() messages.error(request, _('There are machines running of this share.'))
if n > 0:
messages.error(request, ungettext_lazy('There is a machine running of this share.',
'There are %(n)d machines running of this share.', n) %
{'n' : n})
elif m > 0:
messages.error(request, ungettext_lazy('There is a suspended machine of this share.',
'There are %(m)d suspended machines of this share.', m) %
{'m' : m})
else: else:
s.delete() s.delete()
messages.success(request, _('Share is successfully removed.')) messages.success(request, _('Share is successfully removed.'))
except Exception as e: except:
print e
messages.error(request, _('Failed to remove share.')) messages.error(request, _('Failed to remove share.'))
return redirect(g) return redirect(g)
...@@ -533,7 +543,6 @@ def vm_renew(request, which, iid, *args, **kwargs): ...@@ -533,7 +543,6 @@ def vm_renew(request, which, iid, *args, **kwargs):
try: try:
vm = get_object_or_404(Instance, id=iid, owner=request.user) vm = get_object_or_404(Instance, id=iid, owner=request.user)
vm.renew() vm.renew()
messages.success(request, _('Virtual machine is successfully renewed.'))
except: except:
messages.error(request, _('Failed to renew virtual machine.')) messages.error(request, _('Failed to renew virtual machine.'))
return redirect('/') return redirect('/')
......
from django.test import TestCase from django.test import TestCase
from models import create_user_profile, Person, Course, Semester from models import create_user_profile, Person, Course, Semester, Group
from datetime import datetime, timedelta from datetime import datetime, timedelta
class MockUser: class MockUser:
...@@ -55,11 +55,12 @@ class PersonTestCase(TestCase): ...@@ -55,11 +55,12 @@ class PersonTestCase(TestCase):
class CourseTestCase(TestCase): class CourseTestCase(TestCase):
def setUp(self): def setUp(self):
now = datetime.now() now = datetime.now()
date = now.date()
delta = timedelta(weeks=7) delta = timedelta(weeks=7)
self.testperson1 = Person.objects.create(code="testperson1") self.testperson1 = Person.objects.create(code="testperson1")
self.testperson2 = Person.objects.create(code="testperson2") self.testperson2 = Person.objects.create(code="testperson2")
self.testsemester = Semester.objects.create(name="testsemester", self.testsemester = Semester.objects.create(name="testsemester",
start=now-delta, end=now+delta) start=date-delta, end=date+delta)
self.testcourse = Course.objects.create(code="testcode", self.testcourse = Course.objects.create(code="testcode",
name="testname", short_name="tn") name="testname", short_name="tn")
self.testcourse.owners.add(self.testperson1, self.testperson2) self.testcourse.owners.add(self.testperson1, self.testperson2)
...@@ -72,3 +73,55 @@ class CourseTestCase(TestCase): ...@@ -72,3 +73,55 @@ class CourseTestCase(TestCase):
def test_owner_list(self): def test_owner_list(self):
owner_list = self.testcourse.owner_list() owner_list = self.testcourse.owner_list()
self.assertIsNotNone(owner_list) self.assertIsNotNone(owner_list)
class SemesterTestCase(TestCase):
def setUp(self):
now = datetime.now()
date = now.date()
self.now = now
delta = timedelta(weeks=7)
self.last_semester = Semester.objects.create(name="testsem1",
start=date-3*delta, end=date-delta)
self.current_semester = Semester.objects.create(name="testsem2",
start=date-delta, end=date+delta)
self.next_semester = Semester.objects.create(name="testsem3",
start=date+delta, end=date+3*delta)
def test_is_on(self):
self.assertFalse(self.last_semester.is_on(self.now))
self.assertTrue(self.current_semester.is_on(self.now))
self.assertFalse(self.next_semester.is_on(self.now))
def test_get_current(self):
self.assertEqual(self.current_semester, Semester.get_current())
def test_unicode(self):
self.current_semester.__unicode__()
class GroupTestCase(TestCase):
def setUp(self):
date = datetime.now().date()
delta = timedelta(weeks=7)
semester = Semester.objects.create(name="testsem",
start=date-delta, end=date+delta)
self.testgroup = Group.objects.create(name="testgrp",
semester=semester)
def test_owner_list(self):
self.assertIsNotNone(self.testgroup.owner_list())
testowner1 = Person.objects.create(code="testprsn1")
self.testgroup.owners.add(testowner1)
self.assertIsNotNone(self.testgroup.owner_list())
testowner2 = Person.objects.create(code="testprsn2")
self.testgroup.owners.add(testowner2)
self.assertIsNotNone(self.testgroup.owner_list())
self.assertIn(", ", self.testgroup.owner_list())
def test_member_count(self):
self.assertEqual(0, self.testgroup.member_count())
testmember1 = Person.objects.create(code="testprsn3")
self.testgroup.members.add(testmember1)
self.assertEqual(1, self.testgroup.member_count())
testmember2 = Person.objects.create(code="testprsn4")
self.testgroup.members.add(testmember2)
self.assertEqual(2, self.testgroup.member_count())
from django.db import models from django.db import models
from django.http import Http404 from django.http import Http404
import json, requests, time import json, requests, time
from cloud.settings import store_settings as settings import django.conf
settings = django.conf.settings.STORE_SETTINGS
# Create your models here. # Create your models here.
#TODO Handle exceptions locally #TODO Handle exceptions locally
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment