Random work

This commit is contained in:
Marc 2014-07-08 15:19:15 +00:00
parent d068bb4459
commit fc35859052
39 changed files with 2668 additions and 258 deletions

View file

@ -43,3 +43,7 @@ Remember that, as always with QuerySets, any subsequent chained methods which im
* use HTTP OPTIONS instead of configuration endpoint, or rename to settings?
* Log changes from rest api (serialized objects)
* passlib; nano /usr/local/lib/python2.7/dist-packages/passlib/ext/django/utils.py SortedDict -> collections.OrderedDict
* pip install pyinotify

View file

@ -0,0 +1,18 @@
from django.contrib.admin import SimpleListFilter
from django.utils.translation import ugettext as _
class UsedContentTypeFilter(SimpleListFilter):
title = _('Content type')
parameter_name = 'content_type'
def lookups(self, request, model_admin):
qset = model_admin.model._default_manager.all().order_by()
result = ()
for pk, name in qset.values_list('content_type', 'content_type__name').distinct():
result += ((str(pk), name.capitalize()),)
return result
def queryset(self, request, queryset):
if self.value():
return queryset.filter(content_type=self.value())

View file

@ -1,5 +1,6 @@
from admin_tools.menu import items, Menu
from django.core.urlresolvers import reverse
from django.utils.text import capfirst
from django.utils.translation import ugettext_lazy as _
from orchestra.core import services
@ -17,11 +18,11 @@ def api_link(context):
if 'object_id' in context:
object_id = context['object_id']
try:
return reverse('%s-detail' % opts.module_name, args=[object_id])
return reverse('%s-detail' % opts.model_name, args=[object_id])
except:
return reverse('api-root')
try:
return reverse('%s-list' % opts.module_name)
return reverse('%s-list' % opts.model_name)
except:
return reverse('api-root')
@ -32,7 +33,8 @@ def get_services():
if options.get('menu', True):
opts = model._meta
url = reverse('admin:%s_%s_changelist' % (opts.app_label, opts.model_name))
result.append(items.MenuItem(options.get('verbose_name_plural'), url))
name = capfirst(options.get('verbose_name_plural'))
result.append(items.MenuItem(name, url))
return sorted(result, key=lambda i: i.title)
@ -72,6 +74,8 @@ def get_administration_models():
administration_models.append('djcelery.*')
if isinstalled('orchestra.apps.issues'):
administration_models.append('orchestra.apps.issues.*')
if isinstalled('orchestra.apps.resources'):
administration_models.append('orchestra.apps.resources.*')
return administration_models

View file

@ -17,7 +17,7 @@ def get_modeladmin(model, import_module=True):
""" returns the modeladmin registred for model """
for k,v in admin.site._registry.iteritems():
if k is model:
return v
return type(v)
if import_module:
# Sometimes the admin module is not yet imported
app_label = model._meta.app_label
@ -30,8 +30,9 @@ def get_modeladmin(model, import_module=True):
def insertattr(model, name, value, weight=0):
""" Inserts attribute to a modeladmin """
is_model = models.Model in model.__mro__
modeladmin = get_modeladmin(model) if is_model else model
modeladmin = model
if models.Model in model.__mro__:
modeladmin = get_modeladmin(model)
# Avoid inlines defined on parent class be shared between subclasses
# Seems that if we use tuples they are lost in some conditions like changing
# the tuple in modeladmin.__init__

View file

@ -77,11 +77,11 @@ class AccountAdmin(ExtendedModelAdmin):
obj.user.account = obj
obj.user.save()
def queryset(self, request):
def get_queryset(self, request):
""" Select related for performance """
# TODO move invoicecontact to contacts
related = ('user', 'invoicecontact')
return super(AccountAdmin, self).queryset(request).select_related(*related)
return super(AccountAdmin, self).get_queryset(request).select_related(*related)
admin.site.register(Account, AccountAdmin)
@ -131,9 +131,9 @@ class AccountAdminMixin(object):
account_link.allow_tags = True
account_link.admin_order_field = 'account__user__username'
def queryset(self, request):
def get_queryset(self, request):
""" Select related for performance """
qs = super(AccountAdminMixin, self).queryset(request)
qs = super(AccountAdminMixin, self).get_queryset(request)
return qs.select_related('account__user')
def formfield_for_dbfield(self, db_field, **kwargs):
@ -177,7 +177,7 @@ class SelectAccountAdminMixin(AccountAdminMixin):
urls = super(AccountAdminMixin, self).get_urls()
admin_site = self.admin_site
opts = self.model._meta
info = opts.app_label, opts.module_name
info = opts.app_label, opts.model_name
account_list = AccountListAdmin(Account, admin_site).changelist_view
select_urls = patterns("",
url("/select-account/$",

View file

@ -1,12 +1,12 @@
from django.conf import settings as django_settings
from django.db import models
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _
from . import settings
class Account(models.Model):
user = models.OneToOneField(get_user_model(), related_name='accounts')
user = models.OneToOneField(django_settings.AUTH_USER_MODEL, related_name='accounts')
type = models.CharField(_("type"), max_length=32, choices=settings.ACCOUNTS_TYPES,
default=settings.ACCOUNTS_DEFAULT_TYPE)
language = models.CharField(_("language"), max_length=2,

View file

@ -0,0 +1,13 @@
from django.db import models
class Bill(models.Model):
pass
class Invoice(models.Model):
pass
class Fee(models.Model):
pass

View file

@ -0,0 +1,115 @@
./apps/vps/admin.pyfrom django.db import models from django.conf.urls import patterns from django.contrib import admin from django.contrib.auth.admin import
UserAdmin from django.core.urlresolvers import reverse from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _
./apps/issues/admin.py from orchestra.admin import ExtendedModelAdmin from orchestra.admin.utils import link from orchestra.apps.accounts.admin import
AccountAdminMixin, SelectAccountAdminMixin ./apps/contacts/admin.py from .forms import (DatabaseUserChangeForm, DatabaseUserCreationForm, ./apps/webapps/admin.py
DatabaseCreationForm) from .models import Database, Role, DatabaseUser ./apps/prices/admin.py ./apps/websites/admin.py class UserInline(admin.TabularInline):
./apps/users/roles/posix/admin.py model = Role ./apps/users/roles/admin.py verbose_name_plural = _("Users") ./apps/users/roles/jabber/admin.py readonly_fields =
('user_link',) ./apps/users/roles/mail/admin.py extra = 0 ./apps/users/admin.py ./apps/orchestration/admin.py user_link = link('user') ./apps/orders/admin.py
./apps/domains/admin.py def formfield_for_dbfield(self, db_field, **kwargs): ./apps/accounts/admin.py """ Make value input widget bigger """ ./apps/lists/admin.py if
db_field.name == 'user': ./apps/resources/admin.py users = db_field.rel.to.objects.filter(type=self.parent_object.type)
kwargs['queryset'] = users.filter(account=self.account)
return super(UserInline, self).formfield_for_dbfield(db_field, **kwargs)
class PermissionInline(AccountAdminMixin, admin.TabularInline):
model = Role
verbose_name_plural = _("Permissions")
readonly_fields = ('database_link',)
extra = 0
filter_by_account_fields = ['database']
database_link = link('database', popup=True)
def formfield_for_dbfield(self, db_field, **kwargs):
""" Make value input widget bigger """
formfield = super(PermissionInline, self).formfield_for_dbfield(db_field, **kwargs)
if db_field.name == 'database':
# Hack widget render in order to append ?account=id to the add url
db_type = self.parent_object.type
old_render = formfield.widget.render
def render(*args, **kwargs):
output = old_render(*args, **kwargs)
output = output.replace('/add/?', '/add/?type=%s&' % db_type)
return mark_safe(output)
formfield.widget.render = render
formfield.queryset = formfield.queryset.filter(type=db_type)
return formfield
class DatabaseAdmin(SelectAccountAdminMixin, ExtendedModelAdmin):
list_display = ('name', 'type', 'account_link')
list_filter = ('type',)
search_fields = ['name', 'account__user__username']
inlines = [UserInline]
add_inlines = []
change_readonly_fields = ('name', 'type')
extra = 1
fieldsets = (
(None, {
'classes': ('extrapretty',),
'fields': ('account_link', 'name', 'type'),
}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('account_link', 'name', 'type')
}),
(_("Create new user"), {
'classes': ('wide',),
'fields': ('username', 'password1', 'password2'),
}),
(_("Use existing user"), {
'classes': ('wide',),
'fields': ('user',)
}),
)
add_form = DatabaseCreationForm
def save_model(self, request, obj, form, change):
super(DatabaseAdmin, self).save_model(request, obj, form, change)
if not change:
user = form.cleaned_data['user']
if not user:
user = DatabaseUser.objects.create(
username=form.cleaned_data['username'],
type=obj.type,
account_id = obj.account.pk,
)
user.set_password(form.cleaned_data["password1"])
user.save()
Role.objects.create(database=obj, user=user, is_owner=True)
class DatabaseUserAdmin(SelectAccountAdminMixin, ExtendedModelAdmin):
list_display = ('username', 'type', 'account_link')
list_filter = ('type',)
search_fields = ['username', 'account__user__username']
form = DatabaseUserChangeForm
add_form = DatabaseUserCreationForm
change_readonly_fields = ('username', 'type')
inlines = [PermissionInline]
add_inlines = []
fieldsets = (
(None, {
'classes': ('extrapretty',),
'fields': ('account_link', 'username', 'password', 'type')
}),
)
add_fieldsets = (
(None, {
'classes': ('extrapretty',),
'fields': ('account_link', 'username', 'password1', 'password2', 'type')
}),
)
def get_urls(self):
useradmin = UserAdmin(DatabaseUser, self.admin_site)
return patterns('',
(r'^(\d+)/password/$',
self.admin_site.admin_view(useradmin.user_change_password))
) + super(DatabaseUserAdmin, self).get_urls()
admin.site.register(Database, DatabaseAdmin)
admin.site.register(DatabaseUser, DatabaseUserAdmin)

View file

@ -130,6 +130,7 @@ class DatabaseUserChangeForm(forms.ModelForm):
class Meta:
model = DatabaseUser
fields = ('username', 'password', 'type', 'account')
def clean_password(self):
return self.initial["password"]

View file

@ -107,9 +107,9 @@ class DomainAdmin(ChangeListDefaultFilter, AccountAdminMixin, ExtendedModelAdmin
return TemplateResponse(request, 'admin/domains/domain/view_zone.html',
context)
def queryset(self, request):
def get_queryset(self, request):
""" Order by structured name and imporve performance """
qs = super(DomainAdmin, self).queryset(request)
qs = super(DomainAdmin, self).get_queryset(request)
qs = qs.select_related('top', 'account__user')
# qs = qs.select_related('top')
# For some reason if we do this we know for sure that join table will be called T4

View file

@ -88,9 +88,9 @@ class MessageInline(admin.TabularInline):
self.form.user = request.user
return super(MessageInline, self).get_formset(request, obj, **kwargs)
def queryset(self, request):
def get_queryset(self, request):
""" Don't show any message """
qs = super(MessageInline, self).queryset(request)
qs = super(MessageInline, self).get_queryset(request)
return qs.none()
@ -308,9 +308,9 @@ class TicketAdmin(ChangeListDefaultFilter, ExtendedModelAdmin): #TODO ChangeView
data_formated = markdowt_tn(strip_tags(data))
return HttpResponse(data_formated)
def queryset(self, request):
def get_queryset(self, request):
""" Order by structured name and imporve performance """
qs = super(TicketAdmin, self).queryset(request)
qs = super(TicketAdmin, self).get_queryset(request)
return qs.select_related('queue', 'owner', 'creator')
@ -345,8 +345,8 @@ class QueueAdmin(admin.ModelAdmin):
list_display.append(display_notify)
return list_display
def queryset(self, request):
qs = super(QueueAdmin, self).queryset(request)
def get_queryset(self, request):
qs = super(QueueAdmin, self).get_queryset(request)
qs = qs.annotate(models.Count('tickets'))
return qs

View file

@ -36,6 +36,9 @@ class MessageInlineForm(forms.ModelForm):
created_on = forms.CharField(label="Created On", required=False)
content = forms.CharField(widget=MarkDownWidget(), required=False)
class Meta:
fields = ('author', 'author_name', 'created_on', 'content')
def __init__(self, *args, **kwargs):
super(MessageInlineForm, self).__init__(*args, **kwargs)
admin_link = reverse('admin:users_user_change', args=(self.user.pk,))
@ -56,7 +59,7 @@ class UsersIterator(forms.models.ModelChoiceIterator):
def __init__(self, *args, **kwargs):
self.ticket = kwargs.pop('ticket', False)
super(forms.models.ModelChoiceIterator, self).__init__(*args, **kwargs)
def __iter__(self):
yield ('', '---------')
users = User.objects.exclude(is_active=False).order_by('name')
@ -74,6 +77,10 @@ class TicketForm(forms.ModelForm):
class Meta:
model = Ticket
fields = (
'creator', 'creator_name', 'owner', 'queue', 'subject', 'description',
'priority', 'state', 'cc', 'display_description'
)
def __init__(self, *args, **kwargs):
super(TicketForm, self).__init__(*args, **kwargs)

View file

@ -1,4 +1,4 @@
from django.contrib.auth import get_user_model
from django.conf import settings as django_settings
from django.db import models
from django.db.models import Q
from django.utils.translation import ugettext_lazy as _
@ -56,10 +56,10 @@ class Ticket(models.Model):
(CLOSED, 'Closed'),
)
creator = models.ForeignKey(get_user_model(), verbose_name=_("created by"),
creator = models.ForeignKey(django_settings.AUTH_USER_MODEL, verbose_name=_("created by"),
related_name='tickets_created', null=True)
creator_name = models.CharField(_("creator name"), max_length=256, blank=True)
owner = models.ForeignKey(get_user_model(), null=True, blank=True,
owner = models.ForeignKey(django_settings.AUTH_USER_MODEL, null=True, blank=True,
related_name='tickets_owned', verbose_name=_("assigned to"))
queue = models.ForeignKey(Queue, related_name='tickets', null=True, blank=True)
subject = models.CharField(_("subject"), max_length=256)
@ -153,7 +153,7 @@ class Ticket(models.Model):
class Message(models.Model):
ticket = models.ForeignKey('issues.Ticket', verbose_name=_("ticket"),
related_name='messages')
author = models.ForeignKey(get_user_model(), verbose_name=_("author"),
author = models.ForeignKey(django_settings.AUTH_USER_MODEL, verbose_name=_("author"),
related_name='ticket_messages')
author_name = models.CharField(_("author name"), max_length=256, blank=True)
content = models.TextField(_("content"))
@ -183,7 +183,7 @@ class TicketTracker(models.Model):
""" Keeps track of user read tickets """
ticket = models.ForeignKey(Ticket, verbose_name=_("ticket"),
related_name='trackers')
user = models.ForeignKey(get_user_model(), verbose_name=_("user"),
user = models.ForeignKey(django_settings.AUTH_USER_MODEL, verbose_name=_("user"),
related_name='ticket_trackers')
class Meta:

View file

@ -109,9 +109,9 @@ class BackendLogAdmin(admin.ModelAdmin):
return monospace_format(escape(log.traceback))
mono_traceback.short_description = _("traceback")
def queryset(self, request):
def get_queryset(self, request):
""" Order by structured name and imporve performance """
qs = super(BackendLogAdmin, self).queryset(request)
qs = super(BackendLogAdmin, self).get_queryset(request)
return qs.select_related('server')

View file

@ -65,8 +65,16 @@ class ServiceBackend(object):
@classmethod
def get_choices(cls):
backends = cls.get_backends()
choices = ( (b.get_name(), b.verbose_name or b.get_name()) for b in backends )
return sorted(choices, key=lambda e: e[1])
choices = []
for b in backends:
# don't evaluate b.verbose_name ugettext_lazy
verbose = getattr(b.verbose_name, '_proxy____args', [None])
if verbose[0]:
verbose = b.verbose_name
else:
verbose = b.get_name()
choices.append((b.get_name(), verbose))
return sorted(choices, key=lambda e: e[0])
def get_banner(self):
time = datetime.now().strftime("%h %d, %Y %I:%M:%S")

View file

View file

@ -0,0 +1,92 @@
import sys
from django.contrib import admin
from django.contrib.contenttypes import generic
from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _
from orchestra.admin.filters import UsedContentTypeFilter
from orchestra.admin.utils import insertattr, get_modeladmin
from .forms import ResourceForm
from .models import Resource, ResourceAllocation, Monitor, MonitorData
class ResourceAdmin(admin.ModelAdmin):
list_display = (
'name', 'verbose_name', 'content_type', 'period', 'ondemand',
'default_allocation', 'disable_trigger'
)
list_filter = (UsedContentTypeFilter, 'period', 'ondemand', 'disable_trigger')
def save_model(self, request, obj, form, change):
super(ResourceAdmin, self).save_model(request, obj, form, change)
model = obj.content_type.model_class()
modeladmin = get_modeladmin(model)
resources = obj.content_type.resource_set.filter(is_active=True)
inlines = []
for inline in modeladmin.inlines:
if inline.model is ResourceAllocation:
inline = resource_inline_factory(resources)
inlines.append(inline)
modeladmin.inlines = inlines
class ResourceAllocationAdmin(admin.ModelAdmin):
list_display = ('id', 'resource', 'content_object', 'value')
list_filter = ('resource',)
class MonitorAdmin(admin.ModelAdmin):
list_display = ('backend', 'resource', 'crontab')
list_filter = ('backend', 'resource')
class MonitorDataAdmin(admin.ModelAdmin):
list_display = ('id', 'monitor', 'content_object', 'date', 'value')
list_filter = ('monitor',)
admin.site.register(Resource, ResourceAdmin)
admin.site.register(ResourceAllocation, ResourceAllocationAdmin)
admin.site.register(Monitor, MonitorAdmin)
admin.site.register(MonitorData, MonitorDataAdmin)
# Mokey-patching
def resource_inline_factory(resources):
class ResourceInlineFormSet(generic.BaseGenericInlineFormSet):
def total_form_count(self):
return len(resources)
@cached_property
def forms(self):
forms = []
for i, resource in enumerate(resources):
forms.append(self._construct_form(i, resource=resource))
return forms
class ResourceInline(generic.GenericTabularInline):
model = ResourceAllocation
verbose_name_plural = _("resources")
form = ResourceForm
formset = ResourceInlineFormSet
class Media:
css = {
'all': ('orchestra/css/hide-inline-id.css',)
}
def has_add_permission(self, *args, **kwargs):
""" Hidde add another """
return False
return ResourceInline
if not 'migrate' in sys.argv and not 'syncdb' in sys.argv:
# not run during syncdb
for resources in Resource.group_by_content_type():
inline = resource_inline_factory(resources)
model = resources[0].content_type.model_class()
insertattr(model, 'inlines', inline)

View file

@ -0,0 +1,30 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from orchestra.forms.widgets import ShowTextWidget, ReadOnlyWidget
class ResourceForm(forms.ModelForm):
verbose_name = forms.CharField(label=_("Name"), widget=ShowTextWidget(bold=True),
required=False)
current = forms.CharField(label=_("Current"), widget=ShowTextWidget(),
required=False)
value = forms.CharField(label=_("Allocation"))
class Meta:
fields = ('verbose_name', 'current', 'value',)
def __init__(self, *args, **kwargs):
self.resource = kwargs.pop('resource', None)
super(ResourceForm, self).__init__(*args, **kwargs)
if self.resource:
self.fields['verbose_name'].initial = self.resource.verbose_name
self.fields['current'].initial = self.resource.get_current()
if self.resource.ondemand:
self.fields['value'].widget = ReadOnlyWidget('')
else:
self.fields['value'].initial = self.resource.default_allocation
def save(self, *args, **kwargs):
self.instance.resource_id = self.resource.pk
return super(ResourceForm, self).save(*args, **kwargs)

View file

@ -0,0 +1,112 @@
import datetime
from django.db import models
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from django.core import validators
from django.utils.translation import ugettext_lazy as _
from djcelery.models import PeriodicTask, CrontabSchedule
from orchestra.utils.apps import autodiscover
class Resource(models.Model):
MONTHLY = 'MONTHLY'
PERIODS = (
(MONTHLY, _('Monthly')),
)
name = models.CharField(_("name"), max_length=32, unique=True,
help_text=_('Required. 32 characters or fewer. Lowercase letters, '
'digits and hyphen only.'),
validators=[validators.RegexValidator(r'^[a-z0-9_\-]+$',
_('Enter a valid name.'), 'invalid')])
verbose_name = models.CharField(_("verbose name"), max_length=256, unique=True)
content_type = models.ForeignKey(ContentType) # TODO filter by servicE?
period = models.CharField(_("period"), max_length=16, choices=PERIODS,
default=MONTHLY)
ondemand = models.BooleanField(default=False)
default_allocation = models.PositiveIntegerField(null=True, blank=True)
is_active = models.BooleanField(default=True)
disable_trigger = models.BooleanField(default=False)
def __unicode__(self):
return self.name
@classmethod
def group_by_content_type(cls):
prev = None
group = []
for resource in cls.objects.filter(is_active=True).order_by('content_type'):
ct = resource.content_type
if prev != ct:
if group:
yield group
group = [resource]
else:
group.append(resource)
prev = ct
if group:
yield group
def get_current(self):
today = datetime.date.today()
result = 0
has_result = False
for monitor in self.monitors.all():
has_result = True
if self.period == self.MONTHLY:
data = monitor.dataset.filter(date__year=today.year,
date__month=today.month)
result += data.aggregate(models.Sum('value'))['value__sum']
else:
raise NotImplementedError("%s support not implemented" % self.period)
return result if has_result else None
class ResourceAllocation(models.Model):
resource = models.ForeignKey(Resource)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
value = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
class Meta:
unique_together = ('resource', 'content_type', 'object_id')
autodiscover('monitors')
class Monitor(models.Model):
backend = models.CharField(_("backend"), max_length=256,)
# choices=MonitorBackend.get_choices())
resource = models.ForeignKey(Resource, related_name='monitors')
crontab = models.ForeignKey(CrontabSchedule)
class Meta:
unique_together=('backend', 'resource')
def __unicode__(self):
return self.backend
class MonitorData(models.Model):
monitor = models.ForeignKey(Monitor, related_name='dataset')
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
date = models.DateTimeField(auto_now_add=True)
value = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
def __unicode__(self):
return str(self.monitor)
#for resources in Resource.group_by_content_type():
# model = resources[0].content_type.model_class()
# print resources[0].content_type.model_class()
# model.add_to_class('allocations', generic.GenericRelation('resources.ResourceAllocation'))

View file

@ -61,10 +61,10 @@ class UserAdmin(AccountAdminMixin, auth.UserAdmin, ExtendedModelAdmin):
new_urls += patterns("",
url('^(\d+)/%s/$' % role.url_name,
wrap_admin_view(self, role().change_view),
name='%s_%s_%s_change' % (opts.app_label, opts.module_name, role.name)),
name='%s_%s_%s_change' % (opts.app_label, opts.model_name, role.name)),
url('^(\d+)/%s/delete/$' % role.url_name,
wrap_admin_view(self, role().delete_view),
name='%s_%s_%s_delete' % (opts.app_label, opts.module_name, role.name))
name='%s_%s_%s_delete' % (opts.app_label, opts.model_name, role.name))
)
return new_urls + urls
@ -101,10 +101,10 @@ class UserAdmin(AccountAdminMixin, auth.UserAdmin, ExtendedModelAdmin):
kwargs['extra_context'] = extra_context
return super(UserAdmin, self).change_view(request, object_id, **kwargs)
def queryset(self, request):
def get_queryset(self, request):
""" Select related for performance """
related = ['account__user'] + [ role.name for role in self.roles ]
return super(UserAdmin, self).queryset(request).select_related(*related)
return super(UserAdmin, self).get_queryset(request).select_related(*related)
admin.site.register(User, UserAdmin)

View file

@ -111,9 +111,9 @@ class AddressAdmin(SelectAccountAdminMixin, ExtendedModelAdmin):
kwargs['queryset'] = mailboxes.filter(user__account=self.account)
return super(AddressAdmin, self).formfield_for_dbfield(db_field, **kwargs)
def queryset(self, request):
def get_queryset(self, request):
""" Select related for performance """
qs = super(AddressAdmin, self).queryset(request)
qs = super(AddressAdmin, self).get_queryset(request)
# TODO django 1.7 account__user is not needed
return qs.select_related('domain', 'account__user')

View file

@ -13,7 +13,7 @@ from . import settings
def settings_to_choices(choices):
return sorted(
[ (name, opt[0]) for name,opt in choices.iteritems() ],
key=lambda e: e[1]
key=lambda e: e[0]
)

View file

@ -84,9 +84,9 @@ class WebsiteAdmin(SelectAccountAdminMixin, ExtendedModelAdmin):
kwargs['widget'] = forms.TextInput(attrs={'size':'100'})
return super(WebsiteAdmin, self).formfield_for_dbfield(db_field, **kwargs)
def queryset(self, request):
def get_queryset(self, request):
""" Select related for performance """
qs = super(WebsiteAdmin, self).queryset(request)
qs = super(WebsiteAdmin, self).get_queryset(request)
return qs.prefetch_related('domains')

View file

@ -13,7 +13,7 @@ from . import settings
def settings_to_choices(choices):
return sorted(
[ (name, opt[0]) for name,opt in choices.iteritems() ],
key=lambda e: e[1]
key=lambda e: e[0]
)

View file

@ -0,0 +1,291 @@
from . import settings
class ServiceBackend(object):
"""
Service management backend base class
It uses the _unit of work_ design principle, which allows bulk operations to
be conviniently supported. Each backend generates the configuration for all
the changes of all modified objects, reloading the daemon just once.
"""
verbose_name = None
model = None
related_models = () # ((model, accessor__attribute),)
script_method = methods.BashSSH
function_method = methods.Python
type = 'task' # 'sync'
ignore_fields = []
# TODO type: 'script', execution:'task'
__metaclass__ = plugins.PluginMount
def __unicode__(self):
return type(self).__name__
def __str__(self):
return unicode(self)
def __init__(self):
self.cmds = []
@classmethod
def get_name(cls):
return cls.__name__
@classmethod
def is_main(cls, obj):
opts = obj._meta
return cls.model == '%s.%s' % (opts.app_label, opts.object_name)
@classmethod
def get_related(cls, obj):
opts = obj._meta
model = '%s.%s' % (opts.app_label, opts.object_name)
for rel_model, field in cls.related_models:
if rel_model == model:
related = obj
for attribute in field.split('__'):
related = getattr(related, attribute)
return related
return None
@classmethod
def get_backends(cls):
return cls.plugins
@classmethod
def get_choices(cls):
backends = cls.get_backends()
choices = ( (b.get_name(), b.verbose_name or b.get_name()) for b in backends )
return sorted(choices, key=lambda e: e[1])
def get_banner(self):
time = datetime.now().strftime("%h %d, %Y %I:%M:%S")
return "Generated by Orchestra %s" % time
def append(self, *cmd):
# aggregate commands acording to its execution method
if isinstance(cmd[0], basestring):
method = self.script_method
cmd = cmd[0]
else:
method = self.function_method
cmd = partial(*cmd)
if not self.cmds or self.cmds[-1][0] != method:
self.cmds.append((method, [cmd]))
else:
self.cmds[-1][1].append(cmd)
def execute(self, server):
from .models import BackendLog
state = BackendLog.STARTED if self.cmds else BackendLog.SUCCESS
log = BackendLog.objects.create(backend=self.get_name(), state=state, server=server)
for method, cmds in self.cmds:
method(log, server, cmds)
if log.state != BackendLog.SUCCESS:
break
return log
def ServiceController(ServiceBackend):
def save(self, obj)
raise NotImplementedError
def delete(self, obj):
raise NotImplementedError
def commit(self):
"""
apply the configuration, usually reloading a service
reloading a service is done in a separated method in order to reload
the service once in bulk operations
"""
pass
class ServiceMonitor(ServiceBackend):
TRAFFIC = 'traffic'
DISK = 'disk'
MEMORY = 'memory'
CPU = 'cpu'
def prepare(self):
pass
def store(self, stdout):
""" object_id value """
for line in stdout.readlines():
line = line.strip()
object_id, value = line.split()
# TODO date
MonitorHistory.store(self.model, object_id, value, date)
def monitor(self, obj):
raise NotImplementedError
def trigger(self, obj):
raise NotImplementedError
def execute(self, server):
log = super(MonitorBackend, self).execute(server)
return log
class AccountDisk(MonitorBackend):
model = 'accounts.Account'
resource = MonitorBackend.DISK
verbose_name = 'Disk'
def monitor(self, user):
context = self.get_context(user)
self.append("du -s %(home)s | {\n"
" read value\n"
" echo '%(username)s' $value\n"
"}" % context)
def process(self, output):
# TODO transaction
for line in output.readlines():
username, value = line.strip().slpit()
History.store(object_id=user_id, value=value)
class MailmanTraffic(MonitorBackend):
model = 'lists.List'
resource = MonitorBackend.TRAFFIC
def process(self, output):
for line in output.readlines():
listname, value = line.strip().slpit()
def monitor(self, mailinglist):
self.append("LISTS=$(grep -v 'post to mailman' /var/log/mailman/post"
" | grep size | cut -d'<' -f2 | cut -d'>' -f1 | sort | uniq"
" | while read line; do \n"
" grep \"$line\" post | head -n1 | awk {'print $8\" \"$11'}"
" | sed 's/size=//' | sed 's/,//'\n"
"done)")
self.append('SUBS=""\n'
'while read LIST; do\n'
' NAME=$(echo "$LIST" | awk {\'print $1\'})\n'
' SIZE=$(echo "$LIST" | awk {\'print $2\'})\n'
' if [[ ! $(echo -e "$SUBS" | grep "$NAME") ]]; then\n'
' SUBS="${SUBS}${NAME} $(list_members "$NAME" | wc -l)\n"\n'
' fi\n'
' SUBSCRIBERS=$(echo -e "$SUBS" | grep "$NAME" | awk {\'print $2\'})\n'
' echo "$NAME $(($SUBSCRIBERS*$SIZE))"\n'
'done <<< "$LISTS"')
class MailDisk(MonitorBackend):
model = 'email.Mailbox'
resource = MonitorBackend.DISK
verbose_name = _("Mail disk")
def process(self, output):
pass
def monitor(self, mail):
pass
class MysqlDisk(MonitorBackend):
model = 'database.Database'
resource = MonitorBackend.DISK
verbose_name = _("MySQL disk")
def process(self, output):
pass
def monitor(self, db):
pass
class OpenVZDisk(MonitorBackend):
model = 'vps.VPS'
resource = MonitorBackend.DISK
class OpenVZMemory(MonitorBackend):
model = 'vps.VPS'
resource = MonitorBackend.MEMORY
class OpenVZTraffic(MonitorBackend):
model = 'vps.VPS'
resource = MonitorBackend.TRAFFIC
class Apache2Traffic(MonitorBackend):
model = 'websites.Website'
resource = MonitorBackend.TRAFFIC
verbose_name = _("Apache2 Traffic")
def monitor(self, site):
context = self.get_context(site)
self.append("""
awk 'BEGIN {
ini = "%(start_date)s";
end = "%(end_date)s";
months["Jan"]="01";
months["Feb"]="02";
months["Mar"]="03";
months["Apr"]="04";
months["May"]="05";
months["Jun"]="06";
months["Jul"]="07";
months["Aug"]="08";
months["Sep"]="09";
months["Oct"]="10";
months["Nov"]="11";
months["Dec"]="12";
} {
date = substr($4,2)
year = substr(date,8,4)
month = months[substr(date,4,3)];
day = substr(date,1,2)
hour = substr(date,13,2)
minute = substr(date,16,2)
second = substr(date,19,2);
line_date = year month day hour minute second
if ( line_date > ini && line_date < end)
if ( $10 == "" )
sum+=$9
else
sum+=$10;
} END {
print sum;
}' %(log_file)s | {
read value
echo %(site_name)s $value
}
""" % context)
def trigger(self, site):
pass
def get_context(self, site):
return {
'log_file': os.path.join(settings.WEBSITES_BASE_APACHE_LOGS, site.unique_name)
}
# start_date and end_date expected format: YYYYMMDDhhmmss
function get_traffic(){
RESULT=$(get_traffic)
if [[ $RESULT ]]; then
echo $RESULT
else
echo 0
fi
return 0

View file

@ -131,16 +131,15 @@ function install_requirements () {
django-celery-email==1.0.3 \
django-fluent-dashboard==0.3.5 \
https://bitbucket.org/izi/django-admin-tools/get/a0abfffd76a0.zip \
South==0.8.1 \
IPy==0.81 \
django-extensions==1.1.1 \
django-transaction-signals==1.0.0 \
django-celery==3.1.1 \
django-celery==3.1.10 \
celery==3.1.7 \
kombu==3.0.8 \
Markdown==2.4 \
django-debug-toolbar==1.0.1 \
djangorestframework==2.3.13 \
django-debug-toolbar==1.2.1 \
djangorestframework==2.3.14 \
paramiko==1.12.1 \
Pygments==1.6 \
django-filter==0.7 \

View file

@ -80,7 +80,6 @@ INSTALLED_APPS = (
'orchestra.apps.orders',
# Third-party apps
'south',
'django_extensions',
'djcelery',
'djcelery_email',
@ -103,6 +102,7 @@ INSTALLED_APPS = (
'orchestra.apps.accounts',
'orchestra.apps.contacts',
'orchestra.apps.resources',
)
@ -150,6 +150,8 @@ FLUENT_DASHBOARD_APP_GROUPS = (
'orchestra.apps.orchestration.models.BackendLog',
'orchestra.apps.orchestration.models.Server',
'orchestra.apps.issues.models.Ticket',
'orchestra.apps.resources.models.Resource',
'orchestra.apps.resources.models.Monitor',
),
'collapsible': True,
}),
@ -180,6 +182,8 @@ FLUENT_DASHBOARD_APP_ICONS = {
'orchestration/route': 'hal.png',
'orchestration/backendlog': 'scriptlog.png',
'issues/ticket': "Ticket_star.png",
'resources/resource': "gauge.png",
'resources/monitor': "Utilities-system-monitor.png",
}
# Django-celery

View file

@ -5,7 +5,6 @@ class Service(object):
if model in self._registry:
raise KeyError("%s already registered" % str(model))
plural = kwargs.get('verbose_name_plural', model._meta.verbose_name_plural)
plural = plural[0].upper() + plural[1:]
self._registry[model] = {
'verbose_name': kwargs.get('verbose_name', model._meta.verbose_name),
'verbose_name_plural': plural,

View file

@ -1,5 +1,32 @@
from django import forms
from django.utils.safestring import mark_safe
from django.utils.encoding import force_text
class ShowTextWidget(forms.Widget):
def render(self, name, value, attrs):
value = force_text(value)
if value is None:
return ''
if hasattr(self, 'initial'):
value = self.initial
if self.bold:
final_value = u'<b>%s</b>' % (value)
else:
final_value = '<br/>'.join(value.split('\n'))
if self.warning:
final_value = u'<ul class="messagelist"><li class="warning">%s</li></ul>' %(final_value)
if self.hidden:
final_value = u'%s<input type="hidden" name="%s" value="%s"/>' % (final_value, name, value)
return mark_safe(final_value)
def __init__(self, *args, **kwargs):
for kwarg in ['bold', 'warning', 'hidden']:
setattr(self, kwarg, kwargs.pop(kwarg, False))
super(ShowTextWidget, self).__init__(*args, **kwargs)
def _has_changed(self, initial, data):
return False
class ReadOnlyWidget(forms.Widget):

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,368 @@
<?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="48px"
height="48px"
id="svg1306"
sodipodi:version="0.32"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Utilities-system-monitor.svg"
version="1.1"
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/Utilities-system-monitor.png"
inkscape:export-xdpi="60"
inkscape:export-ydpi="60">
<defs
id="defs1308">
<linearGradient
inkscape:collect="always"
id="linearGradient2223">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2225" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2229" />
</linearGradient>
<linearGradient
id="linearGradient2222">
<stop
style="stop-color:#5187d6;stop-opacity:1;"
offset="0"
id="stop2224" />
<stop
style="stop-color:#1e4580;stop-opacity:1;"
offset="1"
id="stop2227" />
</linearGradient>
<linearGradient
id="linearGradient3090">
<stop
style="stop-color:#626c07;stop-opacity:1;"
offset="0"
id="stop3092" />
<stop
style="stop-color:#313603;stop-opacity:1;"
offset="1"
id="stop3094" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2238">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2240" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2242" />
</linearGradient>
<linearGradient
id="linearGradient2224">
<stop
style="stop-color:#32342f;stop-opacity:0.54639173;"
offset="0.0000000"
id="stop2226" />
<stop
style="stop-color:#32342f;stop-opacity:0;"
offset="1"
id="stop2228" />
</linearGradient>
<linearGradient
id="linearGradient2214">
<stop
style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2216" />
<stop
style="stop-color:#676964;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2218" />
</linearGradient>
<linearGradient
id="linearGradient2206">
<stop
style="stop-color:#c3c6c0;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2208" />
<stop
style="stop-color:#e8eae6;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2210" />
</linearGradient>
<linearGradient
id="linearGradient2198">
<stop
style="stop-color:#32342f;stop-opacity:1;"
offset="0"
id="stop2200" />
<stop
style="stop-color:#171816;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2202" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2180">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2182" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2184" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2206"
id="linearGradient2212"
x1="25.861118"
y1="26.133587"
x2="18.300278"
y2="19.567596"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.952387,0.000000,0.000000,1.018339,1.142599,-1.941627)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2214"
id="linearGradient2220"
x1="0.0012142062"
y1="24.012266"
x2="47.998765"
y2="24.012266"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.952387,0.000000,0.000000,1.018339,1.142599,-1.941627)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2224"
id="radialGradient2230"
cx="24.041630"
cy="42.242130"
fx="24.041630"
fy="42.242130"
r="17.576654"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.304598,-5.757924e-16,29.37527)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2238"
id="linearGradient2244"
x1="20.338758"
y1="19.636894"
x2="46.092255"
y2="39.708324"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.952387,0.000000,0.000000,1.015657,1.142599,-0.876325)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2180"
id="linearGradient1340"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.809547,0.000000,0.000000,1.750325,-16.00036,-15.78719)"
x1="8.8207808"
y1="12.53757"
x2="12.499243"
y2="24.238262" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2222"
id="radialGradient2229"
cx="23.994133"
cy="32.266911"
fx="23.994133"
fy="32.266911"
r="19.088932"
gradientTransform="matrix(1.768625,-1.961257e-23,1.552064e-23,1.387102,-18.44248,-15.29268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2223"
id="linearGradient2231"
x1="35.694206"
y1="37.333858"
x2="15.044075"
y2="5.9588566"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="8"
inkscape:cx="8.2618878"
inkscape:cy="21.335249"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1064"
inkscape:window-height="782"
inkscape:window-x="616"
inkscape:window-y="240"
inkscape:showpageshadow="false"
fill="#204a87"
inkscape:window-maximized="0" />
<metadata
id="metadata1311">
<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>System Monitor</dc:title>
<dc:date>2005-10-10</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Andreas Nilsson</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>system</rdf:li>
<rdf:li>monitor</rdf:li>
<rdf:li>performance</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:contributor>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
sodipodi:type="arc"
style="opacity:1;fill:url(#radialGradient2230);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.07686412;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path2222"
sodipodi:cx="24.04163"
sodipodi:cy="42.24213"
sodipodi:rx="17.576654"
sodipodi:ry="5.3538084"
d="M 41.618284 42.24213 A 17.576654 5.3538084 0 1 1 6.4649754,42.24213 A 17.576654 5.3538084 0 1 1 41.618284 42.24213 z"
transform="matrix(1.126713,0.000000,0.000000,1.002108,-2.891865,-0.821244)" />
<rect
style="opacity:1;fill:url(#linearGradient2212);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2220);stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1316"
width="44.759838"
height="41.701817"
x="1.6199486"
y="1.6600797"
rx="4.5659914"
ry="4.5659928" />
<rect
style="opacity:1;fill:url(#radialGradient2229);fill-opacity:1;fill-rule:evenodd;stroke:#173562;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1314"
width="37.177864"
height="28.954594"
x="5.4052019"
y="5.4815545"
rx="1.6946707"
ry="1.694671" />
<path
style="opacity:1;fill:#ecffd9;fill-opacity:1;fill-rule:evenodd;stroke:#c3ea9b;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.41618497"
d="M 12.390689,20.935247 L 6.3688614,20.935247 L 6.3688614,22.152253 L 14.087646,22.152253 L 15.493568,16.239132 L 18.956082,29.936652 L 22.164804,19.116952 L 25.059348,25.028755 L 28.946308,21.516786 L 41.654736,21.516786 L 41.654736,19.457141 L 28.505235,19.457141 L 25.335019,22.596741 L 22.059557,15.937588 L 19.049723,24.112486 L 15.78119,11.248712 L 12.390689,20.935247 z "
id="path2188"
sodipodi:nodetypes="ccccccccccccccccc" />
<rect
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2244);stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2232"
width="42.894741"
height="39.646549"
x="2.553669"
y="2.6544337"
rx="4.1303334"
ry="4.1303344" />
<path
sodipodi:nodetypes="ccccccccccccccccc"
id="path3088"
d="M 11.515689,20.012278 L 6.3688614,20.012278 L 6.3688614,23.061029 L 14.962646,22.936029 L 15.618568,19.893387 L 18.963229,32.601726 L 22.539804,21.135091 L 25.059348,26.551191 L 29.321308,22.442609 L 41.654736,22.317609 L 40.904736,18.408071 L 28.505235,18.283071 L 25.460019,21.456026 L 22.059557,13.665616 L 19.424723,20.604266 L 15.90619,8.333659 L 11.515689,20.012278 z "
style="opacity:0.38068183;fill:#ecffd9;fill-opacity:1;fill-rule:evenodd;stroke:#c3ea9b;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.41618497" />
<path
style="opacity:0.43181817;fill:url(#linearGradient1340);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 6.84375,6.96875 L 6.84375,15.795073 C 10.513653,16.483179 14.582567,16.875 18.875,16.875 C 27.810295,16.875 35.812258,15.21019 41.15625,12.596829 L 41.15625,6.96875 L 6.84375,6.96875 z "
id="rect2178"
sodipodi:nodetypes="ccsccc" />
<g
id="g3126"
style="opacity:0.07954544;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
transform="translate(0.187500,0.687500)">
<path
style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 39.125,37.8125 L 38.0625,37.34375 C 37.805688,37.204184 37.500156,37.125 37.1875,37.125 C 36.187,37.125 35.375,37.937 35.375,38.9375 C 35.375,39.938 36.187,40.75 37.1875,40.75 C 38.156734,40.75 38.951426,39.988481 39,39.03125 C 39.000392,39.02353 38.999705,39.007745 39,39 L 39.125,37.8125 z "
id="path3120"
sodipodi:nodetypes="ccsssscc" />
<path
sodipodi:nodetypes="ccsssscc"
id="path3122"
d="M 28.992526,37.544659 L 28.893139,38.709836 C 28.855813,38.999729 28.892396,39.313228 29.005385,39.604754 C 29.366952,40.537636 30.417519,41.001313 31.350402,40.639747 C 32.283284,40.27818 32.746961,39.227613 32.385394,38.29473 C 32.035127,37.391001 31.037884,36.925219 30.127792,37.225858 C 30.120452,37.228282 30.105982,37.234627 30.098654,37.237151 L 28.992526,37.544659 z "
style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 25.5,37.8125 L 24.5625,37.34375 C 24.305688,37.204184 24.000156,37.125 23.6875,37.125 C 22.687,37.125 21.875,37.937 21.875,38.9375 C 21.875,39.938 22.687,40.75 23.6875,40.75 C 24.656734,40.75 25.451426,39.988481 25.5,39.03125 C 25.500392,39.02353 25.499705,39.007745 25.5,39 L 25.5,37.8125 z "
id="path3124"
sodipodi:nodetypes="ccsssscc" />
</g>
<path
style="opacity:1;color:#000000;fill:#e0e2df;fill-opacity:1;fill-rule:nonzero;stroke:#9b9d99;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 39.125,37.8125 L 38.0625,37.34375 C 37.805688,37.204184 37.500156,37.125 37.1875,37.125 C 36.187,37.125 35.375,37.937 35.375,38.9375 C 35.375,39.938 36.187,40.75 37.1875,40.75 C 38.156734,40.75 38.951426,39.988481 39,39.03125 C 39.000392,39.02353 38.999705,39.007745 39,39 L 39.125,37.8125 z "
id="path3111"
sodipodi:nodetypes="ccsssscc" />
<path
sodipodi:nodetypes="ccsssscc"
id="path3116"
d="M 28.992526,37.544659 L 28.893139,38.709836 C 28.855813,38.999729 28.892396,39.313228 29.005385,39.604754 C 29.366952,40.537636 30.417519,41.001313 31.350402,40.639747 C 32.283284,40.27818 32.746961,39.227613 32.385394,38.29473 C 32.035127,37.391001 31.037884,36.925219 30.127792,37.225858 C 30.120452,37.228282 30.105982,37.234627 30.098654,37.237151 L 28.992526,37.544659 z "
style="opacity:1;color:#000000;fill:#e0e2df;fill-opacity:1;fill-rule:nonzero;stroke:#9b9d99;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
style="opacity:1;color:#000000;fill:#e0e2df;fill-opacity:1;fill-rule:nonzero;stroke:#9b9d99;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 25.5,37.8125 L 24.5625,37.34375 C 24.305688,37.204184 24.000156,37.125 23.6875,37.125 C 22.687,37.125 21.875,37.937 21.875,38.9375 C 21.875,39.938 22.687,40.75 23.6875,40.75 C 24.656734,40.75 25.451426,39.988481 25.5,39.03125 C 25.500392,39.02353 25.499705,39.007745 25.5,39 L 25.5,37.8125 z "
id="path3118"
sodipodi:nodetypes="ccsssscc" />
<rect
ry="2.5696716"
rx="2.5696716"
y="4.635767"
x="4.3192058"
height="30.646179"
width="39.349869"
id="rect2221"
style="opacity:0.57386364;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2231);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -17,7 +17,7 @@
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="basket.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/basket.png"
inkscape:export-filename="/home/glic3/orchestra/django-orchestra/orchestra/static/orchestra/icons/basket.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
version="1.0">
@ -195,16 +195,6 @@
y1="33.139202"
x2="30.587307"
y2="37.720802" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient172"
id="linearGradient5366"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.96282389,0,0,0.48721303,2.6688888,-11.773787)"
x1="19.347122"
y1="23.114082"
x2="19.672924"
y2="52.625473" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient15796"
@ -889,17 +879,17 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="8.0000002"
inkscape:cx="25.106424"
inkscape:cy="9.8527865"
inkscape:zoom="1.4142136"
inkscape:cx="-191.37018"
inkscape:cy="74.158655"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1440"
inkscape:window-height="822"
inkscape:window-x="190"
inkscape:window-y="109"
inkscape:window-width="1920"
inkscape:window-height="1024"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:showpageshadow="false"
guidetolerance="10000"
gridtolerance="10000"
@ -910,7 +900,7 @@
inkscape:snap-center="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-maximized="0">
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid6773"
@ -988,11 +978,11 @@
sodipodi:cy="37.75"
sodipodi:rx="14"
sodipodi:ry="3.75"
d="m 8,37.75 a 14,3.75 0 1 1 -28,0 14,3.75 0 1 1 28,0 z"
transform="matrix(1.535714,0,0,1.51296,32.089283,-31.86424)" />
d="m 8,37.75 c 0,2.071068 -6.2680135,3.75 -14,3.75 -7.731986,0 -14,-1.678932 -14,-3.75 0,-2.071068 6.268014,-3.75 14,-3.75 7.7319865,0 14,1.678932 14,3.75 z"
transform="matrix(1.4862766,0,0,1.6296267,31.350537,-35.455906)" />
<path
transform="matrix(0.94139938,0,0,1.9912023,4.5159267,-65.676956)"
d="m 44,43.9375 a 21.8125,3.4375 0 1 1 -43.625,0 21.8125,3.4375 0 1 1 43.625,0 z"
d="M 44,43.9375 C 44,45.835979 34.234211,47.375 22.1875,47.375 10.140789,47.375 0.375,45.835979 0.375,43.9375 0.375,42.039021 10.140789,40.5 22.1875,40.5 34.234211,40.5 44,42.039021 44,43.9375 z"
sodipodi:ry="3.4375"
sodipodi:rx="21.8125"
sodipodi:cy="43.9375"
@ -1008,11 +998,11 @@
sodipodi:cy="43.9375"
sodipodi:rx="21.8125"
sodipodi:ry="3.4375"
d="m 44,43.9375 a 21.8125,3.4375 0 1 1 -43.625,0 21.8125,3.4375 0 1 1 43.625,0 z"
d="M 44,43.9375 C 44,45.835979 34.234211,47.375 22.1875,47.375 10.140789,47.375 0.375,45.835979 0.375,43.9375 0.375,42.039021 10.140789,40.5 22.1875,40.5 34.234211,40.5 44,42.039021 44,43.9375 z"
transform="matrix(0.34795709,0,0,0.55292404,23.903788,-4.3832853)" />
<path
transform="matrix(0.34795709,0,0,0.55292404,7.4763706,-4.3832853)"
d="m 44,43.9375 a 21.8125,3.4375 0 1 1 -43.625,0 21.8125,3.4375 0 1 1 43.625,0 z"
d="M 44,43.9375 C 44,45.835979 34.234211,47.375 22.1875,47.375 10.140789,47.375 0.375,45.835979 0.375,43.9375 0.375,42.039021 10.140789,40.5 22.1875,40.5 34.234211,40.5 44,42.039021 44,43.9375 z"
sodipodi:ry="3.4375"
sodipodi:rx="21.8125"
sodipodi:cy="43.9375"
@ -1022,7 +1012,7 @@
sodipodi:type="arc" />
<path
transform="matrix(0.3765597,0,0,0.79648092,23.893063,-9.077033)"
d="m 44,43.9375 a 21.8125,3.4375 0 1 1 -43.625,0 21.8125,3.4375 0 1 1 43.625,0 z"
d="M 44,43.9375 C 44,45.835979 34.234211,47.375 22.1875,47.375 10.140789,47.375 0.375,45.835979 0.375,43.9375 0.375,42.039021 10.140789,40.5 22.1875,40.5 34.234211,40.5 44,42.039021 44,43.9375 z"
sodipodi:ry="3.4375"
sodipodi:rx="21.8125"
sodipodi:cy="43.9375"
@ -1032,13 +1022,13 @@
sodipodi:type="arc" />
<path
transform="matrix(0.68941617,0,0,0.68941617,8.3344474,-10.434323)"
d="m 13.837133,42.801304 a 4.9641695,4.9641695 0 1 1 -9.9283386,0 4.9641695,4.9641695 0 1 1 9.9283386,0 z"
d="m 13.837133,42.801304 c 0,2.741635 -2.222534,4.964169 -4.9641691,4.964169 -2.7416351,0 -4.9641695,-2.222534 -4.9641695,-4.964169 0,-2.741635 2.2225344,-4.96417 4.9641695,-4.96417 2.7416351,0 4.9641691,2.222535 4.9641691,4.96417 z"
sodipodi:ry="4.9641695"
sodipodi:rx="4.9641695"
sodipodi:cy="42.801304"
sodipodi:cx="8.8729639"
id="path8689"
style="fill:#eeeeec;fill-opacity:1;stroke:#2e3436;stroke-width:1.98566735;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:#eeeeec;fill-opacity:1;stroke:#555753;stroke-width:1.98566734999999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
@ -1048,32 +1038,32 @@
sodipodi:cy="43.9375"
sodipodi:rx="21.8125"
sodipodi:ry="3.4375"
d="m 44,43.9375 a 21.8125,3.4375 0 1 1 -43.625,0 21.8125,3.4375 0 1 1 43.625,0 z"
d="M 44,43.9375 C 44,45.835979 34.234211,47.375 22.1875,47.375 10.140789,47.375 0.375,45.835979 0.375,43.9375 0.375,42.039021 10.140789,40.5 22.1875,40.5 34.234211,40.5 44,42.039021 44,43.9375 z"
transform="matrix(0.3765597,0,0,0.79648092,4.7277415,-9.077033)" />
<path
sodipodi:type="arc"
style="fill:#eeeeec;fill-opacity:1;stroke:#2e3436;stroke-width:1.98566735;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:#eeeeec;fill-opacity:1;stroke:#555753;stroke-width:1.98566734999999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path3260"
sodipodi:cx="8.8729639"
sodipodi:cy="42.801304"
sodipodi:rx="4.9641695"
sodipodi:ry="4.9641695"
d="m 13.837133,42.801304 a 4.9641695,4.9641695 0 1 1 -9.9283386,0 4.9641695,4.9641695 0 1 1 9.9283386,0 z"
d="m 13.837133,42.801304 c 0,2.741635 -2.222534,4.964169 -4.9641691,4.964169 -2.7416351,0 -4.9641695,-2.222534 -4.9641695,-4.964169 0,-2.741635 2.2225344,-4.96417 4.9641695,-4.96417 2.7416351,0 4.9641691,2.222535 4.9641691,4.96417 z"
transform="matrix(0.68941617,0,0,0.68941617,24.251995,-10.434323)" />
<path
style="fill:#eeeeec;fill-opacity:1;stroke:#2e3436;stroke-width:1.3689512;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:#eeeeec;fill-opacity:1;stroke:#555753;stroke-width:1.36895119999999992;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 11.971379,22.495967 c -0.0015,-0.05746 0,-0.113371 0,-0.171118 0,-4.442404 4.580604,-8.042591 10.245624,-8.042591 5.665021,0 10.287275,3.600187 10.287273,8.042591 0,0.05774 0.0015,0.113663 0,0.171118 l -3.373559,0 c 0.0023,-0.05658 0,-0.114116 0,-0.171118 -2e-6,-2.930095 -3.021674,-5.304687 -6.788767,-5.304687 -3.767094,2e-6 -6.830417,2.374592 -6.830417,5.304687 0,0.05702 -0.0023,0.114554 0,0.171118 l -3.540154,0 z"
id="path3292"
inkscape:connector-curvature="0" />
<path
transform="matrix(0.82729944,0,0,0.82729944,24.907385,-11.544576)"
d="m 13.837133,42.801304 a 4.9641695,4.9641695 0 1 1 -9.9283386,0 4.9641695,4.9641695 0 1 1 9.9283386,0 z"
d="m 13.837133,42.801304 c 0,2.741635 -2.222534,4.964169 -4.9641691,4.964169 -2.7416351,0 -4.9641695,-2.222534 -4.9641695,-4.964169 0,-2.741635 2.2225344,-4.96417 4.9641695,-4.96417 2.7416351,0 4.9641691,2.222535 4.9641691,4.96417 z"
sodipodi:ry="4.9641695"
sodipodi:rx="4.9641695"
sodipodi:cy="42.801304"
sodipodi:cx="8.8729639"
id="path3254"
style="fill:#eeeeec;fill-opacity:1;stroke:#2e3436;stroke-width:1.65472305;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:#eeeeec;fill-opacity:1;stroke:#555753;stroke-width:1.65472305000000008;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" />
<path
transform="matrix(0.35906932,0,0,0.36054692,29.061243,8.4346361)"
@ -1094,13 +1084,13 @@
style="fill:#d3d7cf;fill-opacity:1;stroke:#555753;stroke-width:1.36895156;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient5364);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5366);stroke-width:1.36895156;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:url(#linearGradient5364);fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.36895155999999996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 5.8110737,-2.1451388 c -0.036108,-0.020088 1.4184467,14.4479058 1.4188611,14.4522908 0.1364542,1.444874 1.2819255,1.972952 2.5640385,1.975104 0.045814,7.5e-5 24.0530727,-0.0018 24.5645497,-0.0031 2.159135,-0.0063 2.688101,-0.925927 2.830138,-1.930661 0.01139,-0.01982 1.465198,-14.4735573 1.476588,-14.4933672 -10.95139,0 -21.902781,0 -32.8541753,0 z"
id="path1751"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient5361);fill-opacity:1;fill-rule:evenodd;stroke:#204a87;stroke-width:1.36895132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:url(#linearGradient5361);fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.36895132000000008;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 8.663751,-13.036264 c -0.8437448,0.0021 -1.5498928,0.02386 -1.9345262,0.917733 -0.066853,0.155363 -2.1046242,6.4609047 -2.2025944,6.7013722 -0.8387193,2.0586167 -0.065248,4.65182676 1.5547138,4.63446186 0.3080769,-0.0035 31.9216128,0.016179 32.4118358,0 1.378998,-0.044434 1.555465,-3.04734276 0.961814,-4.39821186 -0.03363,-0.07653 -2.78882,-7.0235532 -2.859092,-7.1466012 -0.325008,-0.549534 -1.052841,-0.790374 -1.593483,-0.767817 -0.106499,0.0045 -26.2332627,0.0588 -26.338668,0.05906 z"
id="path1841"
sodipodi:nodetypes="cssssscss"
@ -1129,7 +1119,7 @@
sodipodi:nodetypes="cssssss"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient5340);fill-opacity:1;fill-rule:evenodd;stroke:#204a87;stroke-width:1.36895156;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:url(#linearGradient5340);fill-opacity:1;fill-rule:evenodd;stroke:#204a87;stroke-width:1.36895155999999996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 40.591508,-13.083163 c -0.478291,-0.01727 -0.971743,-0.0166 -0.766517,0.720671 0.184536,0.662952 2.039433,5.6673508 2.129067,5.8869661 0.694397,1.701365 1.300394,4.0721465 2.009533,4.2150916 0.909011,0.1832346 1.141167,0.089803 1.610109,0.1026954 1.923342,0.052912 0.728403,-2.6382663 0.11578,-3.8452544 -0.0347,-0.068379 -3.016223,-6.2687107 -3.081213,-6.3790227 -0.296596,-0.4929 -0.758732,-0.722221 -1.060882,-0.714575 -0.05949,0.0016 -0.896123,0.01558 -0.955875,0.01343 z"
id="path3276"
sodipodi:nodetypes="cssssscss"
@ -1533,13 +1523,13 @@
inkscape:connector-curvature="0" />
<path
sodipodi:type="arc"
style="fill:#eeeeec;fill-opacity:1;stroke:#2e3436;stroke-width:1.65472305;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:#eeeeec;fill-opacity:1;stroke:#555753;stroke-width:1.65472305000000008;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path8685"
sodipodi:cx="8.8729639"
sodipodi:cy="42.801304"
sodipodi:rx="4.9641695"
sodipodi:ry="4.9641695"
d="m 13.837133,42.801304 a 4.9641695,4.9641695 0 1 1 -9.9283386,0 4.9641695,4.9641695 0 1 1 9.9283386,0 z"
d="m 13.837133,42.801304 c 0,2.741635 -2.222534,4.964169 -4.9641691,4.964169 -2.7416351,0 -4.9641695,-2.222534 -4.9641695,-4.964169 0,-2.741635 2.2225344,-4.96417 4.9641695,-4.96417 2.7416351,0 4.9641691,2.222535 4.9641691,4.96417 z"
transform="matrix(0.82729944,0,0,0.82729944,5.0575869,-11.544576)" />
<path
sodipodi:type="inkscape:offset"

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,957 @@
<?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="32"
height="32"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="gauge.svg"
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/gauge.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="7.9195959"
inkscape:cx="36.447712"
inkscape:cy="7.394867"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1024"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<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="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1020.3622)">
<image
y="1014.6645"
x="-5.8903012"
id="image2993"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABHNCSVQICAgIfAhkiAAAIABJREFU
eJzsvWmUZNtV3/nf55w7xJCRc2ZlVtWreqongd5DsqSHJQEGSdCYwQyiLWHE0ExyL7vpbhvcLC/3
x+4PvVYvu23MapuFaXXbIGgDZjBt3EIMDQLJsqWHQOIhLOnp1fBqyMp5iOHee87uD3FP1M1bMWVW
xqsh9m+tWHGnuPfmicj7/5999jmHmBmCIAiCIEwX6mHfgCAIgiAIrz5iAARBEARhChEDIAiCIAhT
iBgAQRAEQZhCxAAIgiAIwhQiBkAQBEEQphAxAIIgCIIwhYgBEARBEIQpRAyAIAiCIEwhYgAEQRAE
YQoRAyAIgiAIU4gYAEEQBEGYQsQACIIgCMIUIgZAEARBEKYQMQCCIAiCMIWIARAEQRCEKUQMgCAI
giBMIWIABEEQBGEKEQMgCIIgCFOIGABBEARBmELEAAiCIAjCFCIGQBAEQRCmEDEAgiAIgjCFiAEQ
BEEQhClEDIAgCIIgTCFiAARBEARhChEDIAiCIAhTiBgAQRAEQZhCxAAIgiAIwhQiBkAQBEEQphAx
AIIgCIIwhYgBEARBEIQpRAyAIAiCIEwhYgAEQRAEYQoRAyAIgiAIU4gYAEEQBEGYQsQACIIgCMIU
IgZAEARBEKYQMQCCIAiCMIWIARAEQRCEKUQMgCAIgiBMIWIABEEQBGEKEQMgCIIgCFOIGABBEARB
mELEAAiCIAjCFCIGQBAEQRCmEDEAgiAIgjCFiAEQBEEQhClEDIAgCIIgTCFiAARBEARhChEDIAiC
IAhTiBgAQRAEQZhCxAAIgiAIwhQiBkAQBEEQphAxAIIgCIIwhYgBEARBEIQpRAyAIAiCIEwhYgAE
QRAEYQoRAyAIgiAIU4gYAEEQBEGYQsQACIIgCMIUIgZAEARBEKYQMQCCIAiCMIWIARAEQRCEKUQM
gCAIgiBMIWIABEEQBGEKEQMgCIIgCFOIGABBEARBmELEAAiCIAjCFCIGQBAEQRCmEDEAgiAIgjCF
iAEQBEEQhClEDIAgCIIgTCFiAARBEARhChEDIAiCIAhTiBgAQRAEQZhCxAAIgiAIwhQiBkAQBEEQ
phAxAIIgCIIwhYgBEARBEIQpRAyAIAiCIEwhYgAEQRAEYQoRAyAIgiAIU4gYAEEQBEGYQsQACIIg
CMIUIgZAEARBEKYQMQCCIAiCMIWYh30DTzpENHQ/M79KdyI8yVD3h0bvfe976e7du3RwcEAA0Gq1
CAA6nU7vh5hlWd9lYwz3W46iiAEgjmMGgJmZGV5eXuZf/uVfZgDM8iMWhMcSkv/dySIGQHhQvLi/
853vVAcHB9RqtShJEmq328paS/lLOefIOaeYmZxzCt3/byq8AwABgN8+4JJMRAyA8+tzcZtSyhER
K6WcUoqJiIMgcEopNsZwrVZzcRzzzMwM//7v/76DmARBeCQRAzBhxAAI40JE9N73vlfdvXuXNjY2
1NHRkUqSRGVZpqy1/qWZWTGzf1fMrAEoZtZhGGpmVgC0MYby5aIJuG+5cAvHhN5vy9cdEXGWZQ6A
JSKXJIklot56foxTSln/rpRyWmuntXZBELg4jt3s7KwTcyAIDx8xABNGDIBQplyj39vbU81mU6dp
qrIs09Za7ZzTzjnDzNo5pwGYIAgCY4x2zhljTJDvM7kZMMhNgFIqUEpppZQ3A6SU6r3n4q/6mADO
hZydcw6AY2a21npxZ+dcRkTOWpsRkXXOWQAZEdn8lWVZlhFRBsD65fxlicgqpTKttTXGWK21q1Qq
tlaruRdffNEBEFMgCK8SYgAmjBgAwdfsX3rpJeXFPkkSnYu9sdZ6EQ+CIAicc0Eu8IFSKnTOBcxs
lFIhEYVKqYCZAyIKiCjMP1tzzp0nImOtvaCU0kSknXOr+fKxHyIzzwColbYBAJRSt/26F2LnHIjo
NjOnANoAbjNzprXeJKJdIsqYObPWJkSU5selzJw451IiSq21CYBMKZUSUZplWUpEKRFlebQgM8Zk
QRDYjY2NDF0z4F8QUyAIZ4sYgAkjBmD68DX8559/Xm9ubup2u63TNNVZlhlrbZDX2gNjTMTMgdY6
yoU+ykU/1lpHzBwBCIkocs5dIKJ5Zj7vnFtQStUArAGoM/NMt4Lf/b0REZRSvXe/7F+DKP4W/bJz
Ds45MPN978UXAAtgA8A+Mx8BuAFgD8BdrfVVAE1rbUcp1XHOdZi5w8wdIkqstR0iSvLoQUcplRBR
prVOtdbZ3t5emp/fIo8QQKIEgvDAiAGYMGIAnnyKgu9r+O1226RpGjjnfI0+cs6FxpiIiGLnXKSU
igHERBQTUQwgds5dBnCZmdcBrBLRIoDFoqBrrXvCXtxeFHylFIwxvWP9u/89+vfy768b+e9irQUz
I8syOOdgrUWWZb3t/QyBtbZnGkr7O8x8F12TcB3AK1rrlwHsMHMrf3Wcc20iajvn2kqpDhEluSlI
W61WAiAFkOUvh64pEDMgCKdADMCEEQPwZJKLvnruuef03t6e7nQ6OkmSwFobWGtDZg611hWtdURE
FedcZIypEVFFKVUFUE/T9DkAT6Nbk18mojUv1lprEFFPxP3LGIMgCHrbjTE9YS+KvTGmd6xfJ6Jj
vzcv0EX6rWdZhiRJkGUZ0jRFlmXIsqwn+EXhT9MU1lpYa5GmKZxzxwxE0RzkZmOPme8y8wYRfVEp
9VkAt5i5CaDFzE1mbjnnWkTUUUp1sizrdDqdDoCiIfARAokOCMKYiAGYMGIAnhyIiN75znfqu3fv
qp2dHeNr+dbaMK/dV7TWMRFVrLVVpVRVKVXLw/WrzrnXM/NriOgigPNaa1UU/KK4B0HQWw7DEFpr
hGGIIAgQRVFvWSl1rBYOoBiWL4fpe9uK78Xtw/b1Wy6TpinSNEWSJL3lomnwJsKbBP/yBiH/W3bQ
bUK4SkR/BuAlAEcAmsx8xMxN51xLKdXOsqydJEkbXTOQ4F50oNdcIGZAEPojBmDCiAF4vCnW9Aui
H+aiH+e1/AqAGhFViaimlKoT0bksy95ARM8R0VNKqXkv8lrrnsAHQXBM2IMgQBzHx5aVUr3QfPkd
wH0CP2z7OMLezzAUcwLGOb5UhgCAJEl6xqDT6fSMQdEgFM1BIWrQYeYbAL5IRJ8koi845w7yXIMj
pVTTOde01raVUu12u+0NQTE6IGZAEEqIAZgwYgAePwaJfpZlkXMurlQqVSKqZllWI6K61rqulGpk
WfZGAM8S0WuI6GKxRh+GIaIo6tXe4zhGHMcIwxCVSgVxHMMYMyjBbuDvZJDwDjIE/d7L2waJf7/7
6ffeL+rQ73r+fyNNU7Tb7WPGoBhFKOYe5IbgEN2owKeJ6E8B3AFwYK09YOYjpVTTWtssmQEfHZBm
AkHIEQMwYcQAPB4UE/m2trb04eFh0Ol0QmttlNf0q2EY1gDUAcww84wx5lyapl8O4A1KqaeVUnEx
fB/HMSqVCqIoQrVaRbVaRaVSQa1Wg9b6PrEvMux34cWzX23cLw8zAMXlQSZjlMAPuuY4nxt038C9
/5d2u41Op3PMGPg8BP/yUQJmvsbMXyCi/0REn2Xm/TxCcFgwA63cDHRwLzLQG+tgUFkLwpOMGIAJ
Iwbg0cbX9p955hlzcHBgOp1OkKZpbK2NtNa1MAzr1tq61nqGmRvGmHNZlr2ViN4E4GljjPZhfF/L
j+MYtVoN1WoVtVoNMzMzvbb6cQS/nKxXPMaL/7BznGTfMDHvd2/D7n/c6EC/8ww6xndd9Gag0+n0
zEDREPjoADPvAPg0gI8B+AsA+865/dwMHFlrm0mSNNEdy8A3E0gTgTCViAGYMGIAHj2Ktf07d+6Y
ZrMZ5CH+WGtd1VrXAMwAaCilZo0xq2mavo2I3kREV4Ig0MaYXkjfh/Cr1Srq9Trq9TpqtVovqW2c
8H2/7aNEeNBnxqnJF5eLNfJBxwyq+Y+zr98x/Y4vJjL6eyr/PcUIQavV6hmCcrJhXvabzPxpZv6o
UurzzLzHzPsA9q21R0qpZqfTaeJeVCCFRAWEKUIMwIQRA/Do4IX/ueeeMzs7O6bZbIZpmkbW2orW
uh6GYZ2ZG0qpOSKad879ZefcV2qtnzHGBD6s78W+KPj1eh1aazDzfd3rir+BYg1+0Pqw6MBZiH9Z
dE9zrn73U95XFPFx7mnQtkH7fLlmWdYzA+12+1gPBJ8/wMwbAF4got9j5lfQHaRoj5kPnHNHSZIc
oRsV6KAwzoAYAeFJRgzAhBED8PAphvn39vaCTqfja/s1pVSdmRta6zlmnlVKXXbOfS0RvVlr3fAJ
e5VKpSf4MzMzqNfraDQaxwa7GXDt3nJR7EeF0YvbRu0/jSkABmf097tueVv53OOYjWGmYtxzF8va
r/sy9e+tVutYdKDUVGCZ+bNE9FGl1H9k5h3n3B4z7znnDpVSR6WogDcC/b9gQXiMEQMwYcQAPDx8
v/2XX37Z5El9US789TAMG8zcIKJ5Ilqy1n4lgLfntf1eaN+34c/MzGB2dhaNRuO+0H6xNjqMccPo
xW2jPnuWpuA04j/qPIPMxzgRj2EmoHwP5eN8kmSz2USr1UKSJMe6HuY5AzsA/piIfhvAVQC71tpd
Zt4jomYhKlDsTsgSFRCeFMQATBgxAK8+RETPP/+82dra0vv7+2GSJJG1thLH8QyABjPPEtGCUuop
59zXA3ibMabm2/R9Td8L/vz8PIDjNdBR4+r744e9F487TQ1+3EjCSQT+JPsmJf7jRBUGbRtUxlmW
odls9hIJS1EBx8x/DuB3lVIvOOe2AewC2HPOHfZpHhAjIDwRiAGYMGIAXj2KNf5c+OMsyypxHDcA
zCql5oloHsDrnXNfr5R6YxAEgRd9X9ufm5vD3Nwc4jjudTXLz1+8Vm95kNAV18cV/3EFeZzzjarJ
jyvwZxVhGOdvGEf8xzm2aNaKENHABML8u74O4PeVUn/gnNsEsMt58mBuBFoQIyA8IYgBmDBiACbP
COGfI6IFrfWic+7LAbxLKfWlxe56tVoNs7OzmJ+fx/z8/H0h/n7C76MAZyX+D1JD7nfsScV/WDLg
qGsPu+eTiv+DRidGRQfK9+2bCHxUwDcRcLc74UcB/JZz7iYRbXM3T2A/TdNDiBEQngDEAEwYMQCT
wyf3Xb58OTg8PAza7XacZVm1JPzLzrmvcc59bRAE54sh/kajgdnZWSwuLiIMw76JfOVZ88oZ+55x
xX/UZ4cNkjOs5n1S8R90zX77y9tOIv7jnOckAj9s3zhmoDxnQnGcgVar1WsiKOQKtJj5PymlfsM5
dxXANoCdkhHw4wlIsqDwWCEGYMKIATh7yln9XvijKPLCv5gL/1cx8zcYY9Z8bb/RaGBubg7z8/NY
WFi4L0xcFPx+391Jxf8kNfFhIj5OFOE05x7WE2Dc6w86pt+x40Yahu0bdey4pqNsqIgIWZYdayIo
GIEOM3+ciH7dOXfNObetlNp1zu2VjEAGwEo0QHgcEAMwYcQAnB3Ffvybm5tBq9WK0jStKqUaQRDM
K6UWlVLLzrmvAPCNWuvzxUz++fl5LC8vH8vkL6KUAjD4Oxkl/qcR42GfG0dQR13vUennP+pehn3+
JGU6zKD021aOCHiICEdHR8eSBvPpjTvOuT8ion/LzDecc1ta613n3F6SJIe4N8KgjCMgPPKIAZgw
YgDOBiJSfuS+w8PDKEmSqlJqJgiC+bzGv2Kt/cvM/C3GmIuVSqXXZ39hYQHLy8uo1+v3Cf+gbP6T
CIlfPmntu7x/XCEddT3Po9LPv3wvo+7jJHMcPIj4j4oK+N+GH1fADzKU9x5oAfgIEf0/AG5Yazdz
I7BfMAK++yCLERAeRcQATBgxAA9GsZ1/f38/7HQ6FaXUTBiGc0S0yMwrRPRG59x3aK2vFIV/cXER
S0tL9wm//04GfTfDhKTf9zWOUI67b9RxxesN+8yw4X3HEePiceOWx2nEf9A1+93XacV/lHkqb+t3
D94I+K6EhaaBQwAfJqJ/B2DDObfpnNvVWu/nAwp5IyD5AcIjhxiACSMG4HQUw/0bGxthu92O0zSt
RVE0B2DBGLMM4DXOufdord8cx7Hyffd9qL9er/ftBlZePmmtvsg4gjWqtj2O+I9qqx8Uyh5HpM/y
vouctMY+TpPCqPOcxDT0+0y/sisfX+w54I2Ac+4OEf0qEX3MObcBYDPPD9jH8R4D0iwgPDKIAZgw
YgBOjh/I586dO+bg4CDOw/2NIAgWiGjZGLOeZdm3K6XeEcdx5LvxLS0tYWlpCTMzM7DWls95bMhY
z2nFctDyuBPrjNrP3D9hrnydUaI9ytyMEsRB5+53bHlI3n73MKpMTiv+J/3cuMcW95e/j+LAQoXu
g58F8EtE9GfMfJeItvL8gAPcyw+QboPCI4EYgAkjBmB8itn9u7u7YbvdrhBRI2/nX2LmFQDvBPAt
YRgu+az+xcVFrKysHOvDn59vaPmPK/ijhG+YiPQ7vt/1i+LSbya8YbXj4vqgv3ecsP+4SX39zMNZ
mYVh91e8/qBjHlT8h/09/a7tnLtvUKF8voE/IqJ/w8zXmHnDObeTZdkegCMUxg8QEyA8TMQATBgx
AOPhk/xu3boVHB4exkqpOoBZZl40xqwC+FJm/m6t9euq1WpviN7l5WWsra352pc/1301/pPWRP3y
aWvHo8xEv+Vhwloqq95Y98WZ70rj3PfOMyhaMOp++10XALTWUErBGAOtde89CIJeU8S4f0vRtIwy
Y/3+hrMQ/1Hf3SgzQESw1qLZbB7rMWCt3Qfw6wA+zMwbRLTJzDt5NKDYbZDFCAgPAzEAE0YMwHCK
tf7t7e0oT/JrBEGwAGDFGLOWpum7lVL/RaVSCXw7//LyMs6dO4cgCHoP46LwA6MF77T7Tyr+/YRw
0LZCufSEpTzFrR/DvvxyzvWGLh5X+Pvd8yCKyZNKqd5La9179TMGYRhCKXXf31zOayiPrDisTMfZ
5teHbRt1/KD9/b43IkKapvf1GHDOfZaIPsjMn2XmDWbeyrJsF/eiASkkGiA8BMQATBgxAIPJxV+v
r6+HhVr/HBEtE9GqUurNzrn3hWF4vtjOv7q62uvLXzjXseUHfcAP29/vvbi/n/D2E76icAD3Jqwp
TmNbnLSmWLt3zvV99TMXRLTDzO1S8Vul1Eafv6vGzA3czwoA7e+3/CoaguK6NwH+ZYxBEAS9V7k8
yuU5yBSctfgP2zbomGHfZ3kwoXwgoQ8B+DUAtwHcZeadQpKgRAOEVx0xABNGDMD9+Az/Z555Jtjd
3Q1brVZVKdUwxiwCWDXGXMyy7DuNMV9ZqVR0o9HAwsICVlZWcO7cOWRZVjzXfcunEf8HEYB+olIU
hX5t60oppGmKo6OjY8lkxclpnHO997LI53MRbDLzIbrD024z8xGAV4ioQ0SHRHSbiKxzzhKRBcAA
XP7ORMR+2RchMysA5F+FdU1E2jlXt9auaq0D59wSEc0w8xqAKhEtAFgAEHkjUDYHPmJgjDlmBsIw
RBzHfQ1MsfyHJXCO8/09iPiPOl+/Y3yPgcJ3ehXAzwH4E2a+k0cDdnA8GiA9BYRXBTEAE0YMwHF8
yP/ChQvh4eFhRER1Zp5j5mWt9Tkiejszf08URYv1eh0LCwtYWlrC+vo6tNbHaln9av2DynNU2Le8
fdgxxX3l2usgAfP36gW/OMpceUY6n8+QRziazHwHwBaAW0R0HcCGUuqOtTYhooSIUmZOAWTOucw5
lwGwROSF3wFg2z0hl14ovBeFn4rrABQza621Zmbj39E1BgERhcxsiCgCUGPmp5h5HcA6d8dqWAEw
P6j5wBiDMAx7hsBPzVyOagz6bgdtG1foH9QQDDMCvlmg0FvAAvg9AD8P4BaAuwC289yAJu41Cci4
AcJEEQMwYcQA3IOIlB/Gt9lsVoioWOtfz7LsfVrrr65Wq9qH+8+dO4e5ubleuH9YZv8gIThJrb7f
MeW26vJnij0PyqKfJAmOjo5wdHTUG1GuGN73gp+fo8PMN5j5OoCrSqkvEtEtZm4RUYeZk3wo2oSI
UiLK/MtamxGRS5Ik86Lva/1EVK71I19HYd3fvxf84nIxGqD8uzHG5OuGmb0x8EYgZOZQKRUyc0RE
MTPPAngNM19m5qeI6AIRLfQzAz53oGgIjDHHDMEgTmsIBv0GTru/3POinBtgrb1KRB9g5s8A8NGA
XXRNgIwbIEwcMQATRgzA8ZD/9vZ21G63a0Q0FwTBktb6HDN/GYAfCMPwKT9077lz57C+vt572BcT
0PoxqnY/bN+wB3v5mHJov3xO3/67v7/fq+kX2/SLmfrOuX0A15xzV5VSnwXwOXRr/C0ALWttRynV
IaLEWpsopdI0TVMAWV67z4jI5cuOiJxSyimlHBGx1toppVhrfewmrbV9C9E513f75uamQ24KUIgI
lF46jmMNQOeGwBhjgnw5yM1AxMwhEVUAxERUY+YlAM8BuEJEFwGcJyJVTigsNxWUexyUGbdnwUl+
A8POM+icxc8XkwQLuQFtAL9GRL/JzLeI6C6AnU6n48cNkARBYWKIAZgw024AiiH/g4ODOG8zns+T
/NYAfDMRfXu1Wo18rf/8+fOYnZ3t1az9JD39ynIcgR+2b5CAlMW/Xyg6b4fvzSK3v7+P/f39Xpjf
i7611j/sUwBfBPCflVJ/nNf0j5i5mWVZk4jaSqm2c66TpqkP72dKqZSIrFLKKqWs1tpqrV0QBC4M
Q2eM4SiKOI5jfuGFF3q1/fzemYjoPe95j3rppZfU1taWPjo6MlmWaeecYmYf7i9+Z+yNxM7Ojp/v
vteUgPvNgDcERWOgCy8DQEdRFDJzkEcJfGSg4l8AakQ055z7SwBeD+B1RDRfTij0zQW+mcD3BOk3
6uM40YBJiH95W9kIlKMBzPynRPQB59xLAO4A2E7TdA/daEACaRIQJoAYgAkzzQaAqDui340bN8I8
5D9rjFlk5jVjzGuyLPvhIAie8239KysrOH/+fN+2/n4P89OK/6DJZor7yw/vQbX93d3dnugX2/UL
I8NtcXd0uD9XSn2KmfeY+SjLsiOlVDMX/LYXfKVUopTKlFKZMSYLgsAGQeDiOHazs7OuKPDj1gqJ
SAHQKysrYavVirIsi51zUV4z1wBUEASUpqk/n88fSLTWnSAI2nt7e2N1V6N7P/iyKdD5u8mXAwAm
DMOImUNjTOSci5VSVXQTCqsA6gAuO+eeB/BaIrpMREG5R4E3A5VK5VguiI8cFSNI5e/8QcX/pOcq
3leapr3fSx4V2gHwQQAfcc7dBnA3bxI4xL0mgbG/d0EYhRiACTOtBoCIVCHLv0ZEc8aYZa31OhG9
1Tn3Q5VKZW5mZgZLS0tYW1vDyspKL8O/GPJ/UPE/aa1tWJhfKYVms4mdnR0cHBz0JogpJfJtAvgM
EX0MwBeJaN9ae+CcO1JKtZxzrSzL2nl4P9Vap1rrLAiCLIoiG8ex+8IXvtCrcT/oA5+I9MrKStxs
NitpmtattbNa67pSqsrMIbrC3MNam+bRh6Zz7kBrvddut3tT3Z6mJuqbgdA/SmDQNQRBFEWRcy7W
WsfMHBNRPTcDMwCWmPmtAN4M4BmllC72KChGBcIwPPZdDooGeCYp/uXzls/towG5aXTM/NtE9PMA
bjrn7iildgpDCUsvAeHMEAMwYabNAPiQ/+XLl4O9vb0IQC/kb4y5YK39a0qpd9dqNTM3N4fV1VWs
r6+jUqnAWnssye+04n9Swe8Xqi2aAH8fOzs72N3dxeHhYa+2X5gnfsc592kAHyeiv/Ciz8yHSqlm
UfSVUqkxJg2CIKvValmtVnMvvviiF3yc9cOdiILZ2dlau92etdaeY+bvJaKa1rrKzEYppQvlwsyc
MXPKzE1mvqaU+lVjzHar1doH0GJmO/SC499XP0PQMwNxHEd5pCJWSlWJqEZEdQANAKvOubcD+EtE
dEVrrQZFBYD7h0IexCTFv/xe3O9zA4qDBymlfso59wUiug1gK0mS4pgBkhcgPDBiACbMNBmAYnv/
/v5+hYga3B3Kd01rfdk5933GmLf6qXrX1tZw/vz5Xre304j/gzysy+Pvl2tovm1/d3e3F+ovDfea
AvgMgD9SSn2amXettXvMfMjdMH9TKdVWSiVa6yQMwzSO42x2dtZOUvDLXL58Od7c3GwkSbKklPqS
LMt+pdw3v1g+pTEHPqe1/mEAt5Ik2QJwyN0uh2dOyRD46ECQv8IwDCu5GfBGYAZAg4jWnXPvJKK3
ENGKbyIoGwGl1FAj0O9reFDB73fe8u/M//aL8wrkpnILwE8D+CQz3wKwmaapH0FQ8gKEB8Y87BsQ
ngyK7f17e3sVAHNa6yWt9Tozv8E59zfjOD7faDR6iX7z8/M98S8m+vXL4Pbr/R7Ixf3l4/rtB/pn
8/sHsQ/z7+7uYm9vr1fjL2Ru32DmT2itP+Kcu+2c27XWHiiljpIkOVJKtZRSnTiOkzAM01qtli0u
LtoXXnjBAuAbN268qq4vSRLlnDNa64pzbqY8GI/PuPdl4Xsp5O+amWcA7KD7vBjuaB+A3Agx7nVh
BLpt3xqATpLkEF0zEHkzkDcR3AbwOSKaY+Y3p2n6VVmWfVmapkGSJL1R+eI4RhzH0FqPjAicleAP
M6jl7USEWq3WM2VJkixaa/8eM/8KgN/gbq6EybJMI88LIKIMuZGcBp6kCtOjgBgA4YEhInruueeC
a9euha1Wqwpg3hizQkTnmfldAL6nWq3W5ufnsbq6ikuXLh17CA8T/1E1ML8+bH/5POVQf1H49/f3
e7X9w8PDYr/9lJn/hIj+gLpTve5Ya/eZeT+v7R9prTtxHHe86F+9ejUD4DY3N/nll19+aE8uay1x
tztepJSqMTOMMYiiCHEcI4oiaK0BoJeY1m63ffloY0yVmYM0TX1S38QpREUsukmJhG6tVwEwuRkI
AeyGYVh1zlVyo3JLKfVRIjrnnHtXkiRfmabpYpqm6HQ6A41AMepTXC8u/Ct+AAAgAElEQVTd06mW
B5mAfomJzrneveWJgmGapt/FzJeUUh8AEBhjtFJKl/IC+DSRpFERSuHJRgyA8EBQPrjPnTt3omaz
WY+iaB7AmlLqPDO/Wyn1bbVaTftEv6eeeurYUL7lLn4nCbn69XHEv3hccUhdIoLWGvv7+9je3sbu
7m6vG18hzP+CUuo3mPlla+0OdzP5D3LRb2mtO/V6PanX6+nS0pL95Cc/aTc3N0/1QJ4EzjliZsX3
BuqBMQZxHKPRaGBmZqaXNNdsNnFwcABm9mMVEHUH9fFZ/A+FvCy9GcjQNQNt3DMDURiGe8xc5e58
BhsArhHRbzjnvjZJkndkWbbmjUC73e4ZoHITiP9d+PVyU9SoCNM4UaryevEazjkYY1Cr1dBqtQAA
WZZ9hXNumYh+kogCa60Jw1AnSbKHrilLiUiSA4UTIQZAODU+0//mzZsxEdXDMFzUWq8ppZ7KsuwH
gyD4Cp/lf/HiRSwvLx/L8i920Rom+MPCpuOIv6/llQeOKQv/wcFBsVtWm5k/prX+98656/l47TvM
fGitPdRat6vVaqdSqaTz8/PZiy++mG1tbT3Umv4ICAAppXTZANRqtV65zM3NAUBv8KL8+/Kj//nz
PFS8GaDuCIc9M5AkyRGACEAUBMGu1nrLWntXa71BRB92zn2lc+6vWmsvZlnW1wiUI0W+bb50/b7r
40ah+q0Xl4v/F7VarTeiZJqmz1hr/0ci+mda6z8BYIIgUPl4AS0AiZgA4SSIARBOBRGpy5cvh5ub
mzGAhnNuMe/i97S19r+Jouj1ftrep5566tjsfeXaVZFRD9vi9nFCr+VQP3CvK9/m5iZ2dnZweHjY
m5Any7ImgD8kov8XwCt53+ydJEn2lVJHxph2vV7v5CH+dHd31928efOxeOAaY3qFrZRCGIao1Wr3
jXtQqVR6U/jmteOHLvr9yIWumDOQomsGWmmaNtM0PQjDcC/Lsh2l1JZS6i4R/aFz7m3W2m/Msuxy
lmXweQLFsQRGNQ2MK+aDto0Sf7/dfx9+cqUkSVattT9ORP+cmT+OrgnQeXIgoWsCpIeAMBZiAIQT
Uezmt7OzUwEwq7VeZuZ1pdTrrbV/u1KpPFVs7w+C4FgXv3EGZem3Xtw+KmIwKNzPzLh16xa2trZ6
Wf258O865z6itf5t59wtZt4GsNvpdPa11kdxHLfiOE6WlpbSF1980W5ubj6WNS2fCa+U6o2gVxac
MAx7iYHofuUMAJVKhXxI+lFjgBnoJEnSBHAYhuFBwQhsAvgPzPymNE2/McuyL03TFEmSoNPp9IxA
uWyGXLvv8qBtJ2nS8tvCMOz97yRJUrfW/h0APwvgwwC0MUZlWeb/scQECGMhBkAYm2I3v+3t7QqA
WWPMCjOfV0p9OTP/7VqtNre4uIhz587h8uXLx0Kp4yZYDTrGbx9WCyvW9v0yEcEYg62trV6t30/O
k6bpFjP/gVLqt4noTpqm29ztzneQC3+7Vqt1fJh/Y2ODH8cHaxiGvUl+fMJjccTFcrn6JDQArLVW
zEzj9qV/2HC3a5w3AhmAJEmSNrpG4DDLsj2l1BaAu0qpF5j5DVmWfaO19g1ZlsGbAd80UB4MalwD
O2r/oPV+TWO+2cbnK6RpGmZZ9oPMvEpE/zczF03AEbomIHscf6vCq4cYAGEsiuK/t7dXJaI5rfWK
c+681vqrAby/VqtVl5aWcOHCBVy4cMEnkfXCl4MY98E4Tq2/HO7XWqPZbOLOnTvH+vInSbLPzL+j
lPota+3dNE23AOxmWXZgjDmqVCrtarWaeOG/devWYyX8dK/A1dzcnGZmpbXWRGS8wHsDUBQeX3Ze
bPJ28d4EP+hO/6uB4/MNPJQ/cgT5fWV9jMBRFEUH1to9ANsANono08z8XJZl326t/VI/qmOSJIjj
GMaYEyX3+W3DjOyg9WFNAkopVKtVnxyosiz7FmaeU0r9C+ecMsZQwQRATIAwDDEAwki8+K+vr0d5
H/95pdSqUuoCM38tEf1gvV4PvPivra0d699/UvEf9YDtlyfghb+8z4f79/b2/Oh9lpk/rrX+FWvt
NWvtlrV221q7r7VuVqvVVr1eT27cuJHu7e25R1X4/aA573jHO9TBwQG12206OjpSWZZRmqZqaWmJ
rLXKOacA1Kk7CVNNa13xAu8z/31t01M0CF3PQFVmrgOYqVQqWavVCnBvYiCXNxH01kvvD90g5Ncv
Jg2mnU6naAT2lVI7ALaJ6M+Z+R1pmn67c27BRwTiOD7WLFAus8K1+i4POsavj3Ns0Qz4XIV8sKq/
4pyrKKX+OTMXTYD/nJgAoS9iAIShFMX/4OCgiu4AP+eUUhettd9sjPmuer1ufLKfz/T3YeZitn+Z
frX4fgwK+w+r9RfD/YeHh37Y3qtKqV9k5k+laboJYKvT6ezmNf6e8O/u7jp+hEZYK4r93bt31dHR
kVpbW1NJkuhPfepTOh+sRzvnNHez9TUzqyAIDDMrIqorpZaMMYtBENQ5b1OOouhYl0xffs653nj6
SZKAmReUUsvOudQ5F9ZqtVaaphZ5mJ2IXLvd9gPS2PIrF17/Ypyyz/qD0scIJLkRaEZRdJgP5rQL
YJeIPmGtfY9z7q9YawNvBPzsg8A9IzrKCAzbfhrx93gTAABZlj3vnPtRIvpJAEprTcYY1el09vPP
iwkQ7kOGAp4wowbaeJTLv4/4zzPzShiGl5xz32KM+c56va5XVlZ63fzKyX79HlyjHoLjNgGUxV8p
hVarhbt37x5L8su7h/2mUupDaZreJqLNTqezo7U+CMOwNTMz07lx44afZOWhCn8/sW+1WjpNU51l
mXHOaeec8SF5Y0zolwvbAmbWSimjlAryoXMXgiBYq1arc865H11cXMTMzMx97c6+PJVS2NzcxP7+
/g2l1L9stVqHaZpuMPOetbblnEvRNQCZcy5DN9SeEVGWZVlKRGm+nubmwL+K5qBnDB6GOPnfN7oj
DYYA4jAM60Q0C2CBiFaY+Vlmfh8RvdbPM+BzA8q/7UFG13Na8R91vE9ezIcP/iyAnwDwknPuFWPM
Tm4COgDuMwGjnk+PGo/y8/JxRAzAhHlcDUCpzb+Ggvgz83dorf/LRqOhlpaWcOnSJSwuLvbEvzi4
z0nEf1iUoPzuRd/XwowxuHXrFu7evYu9vT00m020Wi3HzJ8gol9i5i9mWbYBYMdauxcEwVGlUunk
Wf3ZwxR+L/pvectb9NbWlj46OjJpmhprrbHWBswcOOeCXOwDZg601hEzR0QUElHEzIExJuZuO31A
RIFzbo2IGkR0Tms9E4bhQqVSqVer1S9bWlo6ZpyK5eoTJ9M0xc7OTtpqtV5stVouy7JNa22Huz0k
tgAcaa1fYebMOZcwc0pECTMnSqmOcy5xznWIKAGQWmsTIkqVUkm73U7RzdRPcdwYnMkMiKcofz9V
cQSgEgTBDBHNAVjKjcDXAfg2rfVc2QgMSxL0nIX4l/cVzVvJBHwOwD8B8PncBGx3Op0D9DEBYgCm
GzEAE+ZxNADlhD90xX81F/+/rrV+d6PRUL7mv7CwcOxhNOhvHiTm5eVRx1trj9VUW60Wbt26he3t
7d4UvUmS3DDG/KK19gVm3iCirU6ns2OMOYrjuDU3N5d84QtfyPAQap9Fwd/b21PNZlO3222Tpmng
nAucc6FzLjLGRM65KB/DP8oFPiKiWClVYeYGM19h5ovMfIGIlgEYIlpC1wT0sv39wD/1eh3z8/PH
zFnx+yrPi9But3uGys9U58vffyf5sXeYuQlgA8ArRPSyUuolZm4651pKqcQ512bmjnOuRUQd51yb
iDpE1Ol0OgnuNwS9ZoNX4zsiIj8rYYCuEagZY2aJaF4ptUxEF5xz7yWir9Jaa59H4UPx/cpzkAk+
jfiX14vveS6A79IKa+1LAP4RgM85525aa7cAHKA7TkLPBIgBmG7EAEyYx9QA6GK2v3POi/+7tdbv
KYt/seY/qPYzLBIwSvzLtVO/rrXG7du3sbm5ie3tbT9TX9M59yGt9W8mSXJbKbXZ6XS2tdYHURQ1
fTs/XuXpVAfV8rMsC621ITOHeYJelE99WwVQZeaKMabOzOedc08DeIqZzxHRai5MKL/8d+FfvrZa
rVbvG/innPzny7loApxzODg4KM6CeKzpxb+KUZnC+yYz3wFwG8ArSqmXAVzl7lTDvRcRtXND0FZK
ddrtdoKuWKV4FaMD/nvCvWmJK4VmgUUAK8z8HIDvVkq9Rmvdy6eIouhYEqovW1+OfvksxL+8PsAE
fA7A/wbgC8z8ijFmu91u+0iAZWYWAzDdiAGYMI+bAaB8hL/t7e0qgJ74O+f+mjHmfY1GQ48S/3Ef
Wv32Acez/PsJDABkWdYL+e/v76PVaiHLss8A+DkAL+Xh/i1r7Z4xplmtVtsPI9xPRPSOd7xD37hx
Qx8cHJh2ux1mWeZr+BXnXKSUqgKoElENQE0pNeOcu+yc+3IAV4joAhFFvjZfrNV7gfez+vkX5XMc
+ClxvZCPE6ruJ+6+WcdHAfI563vHWWt7L+fcfevFFzMfAbgK4M/zaZSvozvNcBNA0zl3pJRqWWtb
Sql2p9PpoCtax6IDr4IRKDcLNKg74+CyUuocgG9g5m/TWse+nCuVytDznlT8x/kTi8cVTYDPCSCi
f8TMX2Tmm8aYnaIJQN5T43HhUXtePu6IAZgwj5MB8OK/s7NTYeY57ob9n3LOfaPW+r8aJv755x9I
/MsPvKIYFdur9/f3ezX/w8NDdDqdDjP/OoAPWWtv+lq/MebwYYT7vXg8++yzemdnx7RarSBN08ha
GxljqkqpqrW2SkQ16k5nO0Pd2eve4Jx7joheo5RqeLH34u6n7w2CoCfsPgwdRdExwS6WZblcy7/J
cpEMmjthXPFK0xQ+a94vF6cY9t+nNwfMvAPgcwD+gog+A+A2Mx8w8yEzHyqlmtbaplKqlWft+8iA
73kwse+11CwQR1FUs9bOaq2XmHkZwLMAfoiILvnvojxuwCgeVPz7LVtriybg00T0E865lwDcLkQC
EjxmJuBRel4+CYgBmDCPiwGgfGKfzc3NCjPPOedWtNZPKaW+Tin1/nq9blZWVnDp0iXMz8/3EsVO
I/6jHnhlEfOCpLXGrVu3eoP6HB0d+a59/5KZP2Otvc3MW8653TAMm4Xs/omH+4sh/jt37ph2u206
nU7oRd9aWyGiujGmYa2tG2PmrLVvZOY3ENEzRHTR197LQu/F3nfN8/33y2P4Dyvbwn0ONWHlMfAH
GYpB1+x3fZ9Q6KMHRVPgjYE3BPl1rgN4CcB/pG6//F1vCJxzh0TUStO0iW4ttthMMJEmglKzQIhu
s8AM8sRYpdS6c+67iOhdWmvtv6M4ju+rnftQ/bDyOo3499tWMgF/DOAnmPkqgFtBEGy3Wq1DdMuv
N2bDo86j8rx8UhADMGEeBwPgxX9raytm5tmC+L+TiP7rer0ePYj4j6pBDgv5+0Q/5xxeeeUVbGxs
+KQ0a639A631L6Rp+opSaiOv9R9Uq9XW8vJy8mqE+4u1/c3NzaDT6QRpmsbW2tgYU8vD+jNE1NBa
zzHza5xzX8PMb9JaN7zge5EvCn15cppxauPlfcXjB4n/KEEf9JlB9zPILJSTDYuj7ZUNQSE6sMnM
f0pE/x+6zQZ7APaZ+SCPChwlSdLCPTPgmwgmZQQ0ukYgBlA1xsznc2GsAngrgO9XSi0WmwQGlUE/
HkT8++0rNQf8ByL6Z94EZFm2je6Igd5APfI8Cs/LJwkxABPmUTcARETPPfdccOvWrZiZG9baFa31
RaXU2wH83ZmZmdgP8rO4uDi2+I9jCMrLxRptUfzb7TZu3Ljh+6Uj79f8s865jzLzbefchnNuJwzD
o7zWn+BVaCP2bft7e3tBu92Osizzol/Pa/mz1O1Kts7MX8nMzyulzhdr9z55zCfpDRL8clmVGec7
6Ld9nNr8SWr+/SI55WsPEsIkSXqvctNBHh34IoBPEdEfArhNRHvW2j2l1IG19jCPCrRwLyowkeaB
vFmgFw0IgmAWwAKAVaXUZefc+5VSbyw2CZR7BvTjLMS/fAwRHZva2Tn3OwD+DyK6xsy3cxPQxL3y
eqR52M/LJw0xABPmUTYARETPP/+8uXbtWnR0dDQTBIEX/zcy84/XarU5X/MfJP7loXeBwWHlYcf1
E3+tNXZ2dnrD+ebt/V80xvyLLMs+65y7nabpptZ6v1KpNOfn55PPf/7zKSaYKe6F/+WXXzaHh4dB
p9OJsiyraK3rRDST1/JntdaL1tq3AXgbEb1Oa619rTCO497QstVqtdd+Xw7pl0PF/ZIsi4J6mtr9
sH2jTNtJIwbl/f0iBf5v9OFrbwbSNC3mEKTo5gx8nIg+xsybRLTLzPvOuQOl1FGn0/FRgV7zwFn+
JgrRgADdAYRmnHNzSqlVAOsA/jqAb/ZNAn4EwX634L+7sxL/4nHM3DPRviwB/CKAfwPgGoA7aZru
oGucHnkTIHp1togBmDCPqgHwD7DV1dXo8PCwHgTBstb6AhG9zjn392u12roXfz9oDBX6+Per+QPD
xWDQcf26k2mtsbGxgZs3b/ba+7Ms+0Ot9Qfzdv87SZJsGWMOZ2ZmWrdu3Uowwbb+ovDv7++HSZJE
WZZV4zieybJsRms9T0QLAC47576JiN6kta4W2++94NfrdQRBcF9W/iCKAl9eLh7j3wdFX85SxMv7
Bu0vnm/Y9kHn9PkDxS6IxcgAMx8C+EMi+jCAG9xNKPSzOR4WjIBPeDszI1DoKaBxb9yAeXQHD1oj
oq9i5u/XWs8GQYA4jo/Nv+D/vn5l1o+T3nbZBOTjYyDLMgvgZwD8lnPuqtb6bpIkuwDauJdY+Ugi
enW2iAGYMI+wAdDr6+vR/v5+DcBiEATngyB4JsuyH6tUKq/zYf9z58498Ah/ZfqJf9EEGGNw/fp1
3LlzBzs7O2i1Wh3n3C8S0Yetta/kIf/tOI6PGo1G5+rVq34Y3zMvTP+Qv3TpUnB4eBi02+04F/5G
lmUNrfWCUmqRmd/E3YmRngvDUPn2fC/6XvgLbdv+/EOvP0qgRxmuhyX+g44b5/7LZqZoOn04u5g3
kDcRdAB8goh+E8DLzrktALvOuf3cCDTRFbgzjwjkTQJ+OGHfJLBERGsAXsfMf0sp9XQxAnRaMT8p
ZbPhTYC1tg3gnzLzHzHztdwE7OOeCXgkhUH06mwRAzBhHkUD4Lv7bW1t1QAsKKXWwzB8jbX2R6Io
en5xcRGXLl3ChQsXehP7FGv/ZU4q/uUHvA/5e65fv46NjQ3s7u6i3W7vKKV+2lr7SWvtTQCbzrnd
SqXSXF1d7Uwq0c8L/5UrV0zexh9nWVaNoqiRZdmsUmpRa73knHsrgG/SWj/l2/QrlQpqtRpqtRrq
9ToA9K3tj+qON45IlrcP+/yo2vqDiP9JogKjIgXDlot4M1Dsbuics8z8pwD+PYAXuTts8Y5zbi83
Akc4bgT4LIxAKUGwEoZhw1o7r5Q6R0RPMfMPE9Fbi6MHliMdg3iQ2+tX1r45wFq7D+B/BfCCc+66
MWarMG/AI9k9UPTqbBEDMGEeNQNQ7O7nnJt3zp0Lw/BpAN8fBMFfXVhYwMWLF/H000/3pvT1A8uM
c//DhKi4XKz1++aFTqeDGzdu9Ab3SZLkmlLqp7Ise5GZbyVJcjcIgoOZmZnmpEL+vsvXs88+azY3
N4NmsxnnbfyzAGa11ov5zHhfwczfZIw572t19XodtVoNjUZjaIi/XzewYeI9Ti1/3Fr2qHMPuq+z
2DfO9kH3Psj4DGoiyJsHPsvMHyKiTzDzFoBtZt5N03Qf3TZvnyNwJpNAFZoEDIDI5wWgmxx4gZm/
k4i+yRijfJNAOTmwGPHoV06noViGPm+nYALuENH/xMx/AeBmEARbrVarOEbAI4Xo1dkiBmDCPEoG
oJTxP2utXVVKXVJKfavW+vvm5ubU+vo6Xvva1/Yetlpr/9mR9z5MdIrbyuKvlMLBwQFu3ryJu3fv
4uDgAGmafkYp9dPOuS8w8+0kSTajKDqYmZlpTyrLn4iU78d/eHgYJUlS1Vo3AMwqpZZy4X8bgG/V
Wp8Pw7AX3m80Gmg0GlBKwVpbPOfA652kFt5vX3nbaWv4oz47zNSdlfgPupfi/nHKot1u96IChTEG
rhLRLwH4FDPfBbDFzHtpmh7gXq+BDGdkKAtNAlEcx/Usy+YArBDROoCvJ6LvVUqF3jj6prWy+J8l
xfIiIlhr0Wq1fPfAvyCi/4WZXwZwM8uyLdzrHvhI5QOIXp0tYgAmzKNiAHyIcnl5OS5k/F8iorcT
0Y81Go3o3LlzuHLlSi9RyQ/vO0z8hwlBv+OLbf1e/Hd2dnDz5s1epn+WZR/VWn8gTdNr+eA+23Ec
Hy4uLrY///nPp2dRW+tTNurSpUvB/v5+2Ol0KlrrGeTCD2CZiN7onPsOrfUzXvhrtRpmZ2cxOzt7
zNSM8xAfVH6TEP9xzj3ss5MS/3F+O6OMTL/7A3DMCPgeBMz8xwB+CcDniWgT3YjAfpIkB+g2C5xZ
omChSSCsVCq1LMtmASwDOJ8nB75fa10/STfB0zKofLMsK84g+LsAfoaIXgZwq9Az4JFKChS9OlvM
w74B4VVDra+vh/v7+1UimieiVaXU0865H67VatHCwgIuXLjQm9BkkPgPE4TycnlbOeFPKYXt7W28
8sor2NrawtHRkbPW/lsi+rU0Ta87524D2KlWq4eTau8nIuXD/VtbW3GWZbUoiubSNF0wxiwDeJ1z
7j1a6zfGcax8Mt/s7Czm5+d7fdQL5xsawj2NEJ6F0I8r+OVtj5r4e4qJqP16RfipelutVjEi8GZr
7Zcx80eI6FeY+aZSatMYs6213ivmBxDRAzULMDMTkQWQtFotrlarLk1TP6mRRbenwo8kSbLMzPdF
AvzfddYUy803U+X/j+9k5i8S0b+z1nbCMMySJPEjBPqX8IQhEYAJ8yhEAKgwwQ8zLyqlzgdBcMU5
9/cqlcrrl5aWcOnSJayurt43uc8wsS+vn1T87969i5s3b2J7extHR0fWOfevmfk3Adxwzt1xzu3U
arWju3fv3jeP+RmUSa/Wv7e3F3U6narWusHMC0qpZWPMurX23UT0tWEYBpVKBfV6HXNzc5ifn7+v
xu//piLl8Q9OKoSjhP2k5xl1zvJ5H0XxH2VUysvekOUzRRaTBffQTRT8EHeni77LzLta64N2u32E
e80CDxQNKOQFBADiIAhmnXOLSql1AK8H8He11us+J0Ap1bvv/PMnvuY4t1s0GT5aYq1tAfiHzPxx
Zr5mjNnsdDp76OZKPBLDBYtenS1iACbMwzYAvt3/5s2bvaS/IAhew8zfH0VRL+nv0qVLyLIMAIZO
6zto/bTin9f8U+fcz6HbL/l6mqYbxpjder3evHPnTm/q0jMsE/WWt7xF37hxI2w2m3GapvUoiuaZ
eUkptQbg7c657wzDcMkLf6PRwPz8PLTWx4R/UDk9qHgOMwGTOvegbac5z0nO/6DiX9w27J588psf
FS/PD7gG4F8D+CQRbVhrN7XWe8aYw6OjIz84zgP9/nxiKe4NGtSw1i4qpdaJ6LXM/GPFXiRa6/tM
QHG9zGlurfwZnw+QZVkxKfCVUlLgQ28KEL06W8QATJiHaQBK7f4NY8w5rfVlIvoGrfX7fdLf6173
umPd/co12X73Oa74+wlefG3Yi/+NGzewvb2NZrPZYeb/E8DvWWuvp2m6EQTBXp7p38EEBm65cuWK
2d7ejjqdTlUpNcvMC8aYc0qp11hrv19r/YYoinpt/PPz82PN9e7Xz0KgR9V0z/rcg44/zfXHva9x
PzfOZ4ddpxyJ8W3fxbEEmPljSqkPArjmnNsAsF2IBvhucQ8aDfA9BOIwDGcKJuAZZv7vtdavNcYg
juOeCcg/d9pLDqWfOUqSBM65PyWifwjgiwBupmnqhwt+6PkAoldnixiACfOQDYAf7KfOzMtxHF9S
Sr3FWvsPGo1GdW1trZf05+91ULv/oPV++4oP4GIff6UUNjc3cf36dS/+TWb+GQAfcc7dSJJkIwiC
vbm5ueZZZ/p7M7S2thYeHh7GaZrWwzD0tf51AF8N4G+EYdjw/ffn5+cxOzvbMzGFc/W9xiiBHHff
acT/Qc5dPn7Q3/QwxP9BlweVAxEhSZJjRiAfPOiDAD4G4I5z7q5Sai8IgqMzjAb0uglGUTSTZdlC
wQT8iNb6WW8CikZ8EiagWDZE1Js4KC+L3yCif+Wce1lrfScfKbCFhzw+gOjV2SJJgE8oeX9/s7Gx
ERPRrNZ6mYjWsyz7oVqtVl1YWMDa2tp9Gf9lRon/sId4IcGor/gD+CkAH3POXU+SZCOKor1Go9Ga
gPirK1euBLu7u+He3l5Va90wxiww82oQBJettd+tlHpbtVrFzMwMZmdnsbi4CGbuNYvk5+m9DxPK
cjmUyw24fwbEYcuTPPeo872a4j+u0Rz1G+x3fuB4siAz92ZhLPQYWLTW/rfM/CYAv0DdmRzvJEmy
U6lU9lutVhNAh4gsnzJBkJkdEWUAuNPpcBRFyLKM8/+/f2qt/e8APNfpdI71DvAifZYUmxZ8eRSG
Kv5mAH9GRG1rbSeO47Tdblvci4YITwBiAJ5A8nZ/c+vWrUgpVbfWLmit16y1742i6OnZ2Vmsrq5i
YWGhl/TXL+noJLXB4rZ+bf5bW1t45ZVXimH/nwHwUefcjTRN78RxvDc3N9c6y2F9i4l+m5ubcafT
qUVRNJ+m6ZIxZo2I3p5l2fdEUbTow/2Li4uoVConzuwfZYb6vY+zPKjMz+Lc5fOPusZptj9oNOAk
9ztsW5GyEYiiCMYYHwJXWZZ9jXPuS4joXwH4BDNX0jSNoija7XQ6hwDauYif6neamwAA6HQ6nf0o
ijjLMiilmIj+d2vt3wHwJQBeNRPgz++buphZW2vfT0TXADSzLMcJv1MAACAASURBVPMzLPoIwEPP
BxAeHDEATyYqn5u+aoyZN8acI6K3aq2/bmZmBisrK7h48aKfGWyo+J9EEID7xZ+IsLOz0+vq12w2
U2b+APKwf5qmd6Io8uKfnLZmVaYY8t/a2qqkaToThuEiM6+GYXjROfc3lFJfE8exbjQamJubw8rK
Si85zJfHsOaQYYZoVK19nOVh4n8W5z7JceNsH9cADVse92/t97lh+8u13eI2b1JrtRq01j4asGqt
/TFm/l2l1C8AqGRZFoZhGBhjDvIIVppHA05rAhjoDmmcRwKglKI8EvBjAK4AkzcBwL2ysNZCKYUg
CABgyVr7A9ban2Dm4lwKxe6BwmOMGIAnjLzLX7C1tVUhojkiWgmC4HKWZd9brVb14uIi1tfX78v4
Lz5giu+efg/48nH9xP/g4KBY80+Z+f9yzv0egImK/7PPPhtsbGyE+/v7VaXUrDFmSSm1zsxvds79
QBAE5/2wvcvLy6hWq72hj4dl9/crjwet8Q4Sz5PU8k967lGfKW87yfX7Xfck4n+az41z3uJ7uRnH
XzcMw54JSJJEp2n69cz8WiL6gNb6M8wcpWkaVCoV3Wq1jgAkp20SYGbOIwlFE0C5Cfgn1tr/AcAl
4H4T4P+GB4GZe90iiwMmlXgrgHehOzLgscGS8Ih0DRROjxiAJwgf+r9582ZE3bnpF7XWa2mafl+1
Wl2am5vDuXPnevPPF5OMxq0lFukn/v5F+cxjN27c8F39rLX255n5d5jZi//+BMRfXblyJbhz507Y
bDbrSql5a+1yGIYXnHNfR0TfG0VRUK/XsbCwgOXl5d746L5MBrXxF5dPKqwnKd+zEP/TiPi499Tv
2FHlNWj5tJ8rcxIDU6RfDw6tNWq1Wu+3kGXZZWvtP0A3QfB3chNgoijSeZNAh4hONUhVHxNABRPw
j621Pw7gPABUKpXefZ5G/L3IF6dUHpP3AfjP6PYEKE6klEAMwGONGIAnCx/6rwVBMEdEq8z89UEQ
PO9D/0tLS70uf0D/B2CRk4h/MeM/y7JeV7+joyNYa38V3UFXejX/RqPRunr16pkM7Vts79/a2ora
7XY9iqJF59yqMeaitfa7tdbvqlQqqtFoYGFhoZcD4f/u8khs/crlQWrHD7rvtJ8f5x7HPWdxfRyh
PY05GXd53POOulaRYrOAz8TPmwQq1tofYuaniehnmTmw1powDLUfSvi0eQElE7DvIwFEpIjoJ621
fx/APBH1IgH+EoOMgHPumOCnaTrwbx6DGoC/CeB/xv0mgCEm4LFFDMATQjH0r5RqBEGwopR6nbX2
O+r1OhYXF3Hx4sVj/f2LnEb8izXh4ue11rh27Ro2Nzf92P6/A+DXfZt/EATHsv3P4G8nAOr8+fPh
9vZ2JUmSmTAMl5j5XBAEV7Ise38QBG/wiX4rKyuI4/hYDajYC2KQuI0rrKcV83GOH3U/DyL+p6mp
jxLx037uLJYHbRu0Xk6IY+5mxmutiwmCX8fMTxHRTwIIrbUmCAKdpukejg8jfBoTYNFNDDwIw1BZ
axUAnScG/miSJDUAvamEi5ew1vZmQxwQyn9QXgvgWwH8AromoIN74wJIr4DHFDEATwDF0L9Sqk5E
i8y8mmXZ+yqVSm12dhZra2u9h0a59j+u+PcTI//ytX+tNa5fv46NjQ0cHBwgSZJPGmM+mGXZK7n4
755lP/9ist/e3l4lTdPZIAiWtdbrAJ7LsuxvxXF83vfrX11dBTP3ej+Uy6Hf+6Bt5bIbd99JxP80
gn6aY8fdN2r7MDE+C/H//9l70yBJkrte8OfuERmZlXX2PT096hnNCEmju1sHAiSNYBCGhECABDzg
wYrrwdNyvt39sMeH/bBru7Zma8/WdnkgEE8PECAE4pBA4kkcQgghhGZGB6NjZjTTM31VV1XXmUcc
7v/94OGZnlERmZFnZff4zywso+Lw8IjMit///pc9d9Ac+p2f52tfWFjoWAOSJHmeUup/AvCrQogv
pEIA931/Lw0OjEYUAjrZAVEU7VUqFSal5Jzzh4joPVLKfx/Hscc5ty0TJm9/mEuNiu8C8DkAB9A1
AWJoIYDgsgJuSTgB4PZAJ+o/Nf2fAvAGz/Neury8jFOnTmF5ebkn5a8M+Q8SAvLIf319Hevr69jb
20MYhk8IIX4zjuPLSqnrnuftLC0tTZz8T506FaTBfque550UQpwjom8B8BO1Wq2+vLyMEydOdNwf
eUJQv3sfhSxH0VyL/p4U+Y+6b5RrT4r8y4yZt2/Y4wftI9IpciwtIJRmCfz3RPSbnPN/AODFcSxq
tRpvtVoHGDFDgLp1AtpRFDHf9zkReQA+CWBVKfWje3t7fEaEn0UNwL8FcAU6KNC0UnZZAbconABw
i4Mxxu677z5vfX29yjlf5pyf8DzvbiL6PhPodvbs2UOpbbav02DQCzVbYMYmf9PW9/r169jd3UUY
hjc8z/v1KIqeIqJrRLS9tLTUuHbt2sTI/+LFi94zzzxTaTQadcbYmlLqlO/7z1FKvY1z/rZareaZ
9L56vZ6b9pg1++Y9h2E13mE12n7jjkvAw+4bdvukyb/s77Es+Y8jGGRTB4kIvu933EVRFC1KKd8F
4ASADwMQcRzzWq3GUiEgGlcIiON4L3UxCOjmRasAvnuY8SaMFwH4dgAfhHMF3PJwAsAtDEOCly5d
qggh6lLKNc75HVLKH6xWq6vLy8s4c+ZM53g75a8M+Q/SVo0AwNJua9euXcPOzg5arVaTMfbuJEm+
KoS4HkXRzYWFhcakGvvkkP8xpdTplPx/VAjxpoWFBaytreHkyZOo1Wod4cW2fhSR/7DkOswzszEN
8h913yjbJ0H+wwhLw+wr+okNK0jkpQtyzjvBeFEU+UmS/DARLQH4QwA8jmNWrVZZu902GQLjCAGt
OI5NR0EPwB8DOAfgwjDjTRhvA/B5aFdAE72pgc4KcAvhcNcXh1sJbH193Wu32zUAK77vnwLwas75
q5aWlnDy5Emsrq4e8g+aqH0D+6Vpp/Nl95t1sxiXglIKV65cwfb2NhqNhiKi9yVJ8giAq2EYbtVq
tYPTp09PnPwPDg4WK5XKccbY2SAI7iaidwoh3mSCHu+8884e8rcD/WwhyEwp77lMQiCYNPnnLf2O
KTPfYbePSv6D5lR2zLLjFp076DrZ7dlsGcYYarUaKpUKPM/jnPPvYYz9FOf8PIA7kiQ5Vq1WFwEE
0IF8oyTtK2g/ewvALoANaPP7bwB4ZoTxJoVlAD8C4BSANegsgQoAAd310OEWgRMAblGYwL+Dg4OA
c75ERMc9zzurlHrHwsICNzn/xuydrfVvXpjZ/P0sil76Jn2Oc94p9LO/vw8p5cc5558goqthGG4G
QbB/7Nix8NFHH00mRf6XLl0KDPkT0dm0nv9P+b7/RuPvP3fuHDjnHQtFtsNh9n7z3BujEGERIfe7
dtF59tz6CSNF8yhz3KB7G1YIyju33zzKrmevW/acQWOVPcdez6YKmlLCjLE3KqX+PWPsPIDTSZKs
VavVJYwoBKT/L0YIaADYBrAO4BKAX0+3HRUuAHgttPtjBTo+wIMTAG4pOAHg1gXf3Nz0oyhaALDK
GDsRRdFbgiA4bXL+DekV5foPegnmkUG2wc/169exubmJ/f19xHH8KGPs/VLKK3Ecb/i+v7+6utp+
/PHHx871t8m/2WwuViqV4wDu4JzfLaX8qUql8i2mqt+5c+cKBZrsvZl7yttedHzRtrJEOyz5Z8cc
ZR7j3lvZYwcJT6OuD5pP3r6i7WV+9/3I33ya44Ig6AgBnPNvBPCLnPN7oC0BqxMQAkzRnQaAmwCu
A/gSgN/G0frd3wHgDLpWgADOCnBLwQkAtyBM4F+z2TSBf8eFEPcJIR6s1+s4duwYTpw40dF+s2lN
/daz27IvX7vYz/7+PjY2NrC3t4coim4IId4tpbwipbzhed7e0tLSRAr9FJD/Wc75PVLKn61UKq81
+f2nT5/uKXqSrXlg7qGsZpv3LPII6VYk/yLCLkv+ZYXJYQi/H/mOQ/797tP+u981DPIyR3zfR7Va
NUGCryCinxdC3K2UuqPdbq/CMpNPUAj4BICPDjPWhHEGujbACejgxAUAPhyv3DJwQYC3JvjOzk4l
SZIFz/NWhBCnlVJvX1hYqK6srODMmTM9hUCI6BAJ5q3322eI367zf/36dWxvb6PVasUA3iulfFII
sR7H8Xa9Xm+aiP9xbtT2+TebzXqlUjkGrfnfI6V8VxAEL1tZWenEO9j3zTkv1CSL7rUsuZY9J+/a
ZYm53zwHzW+U48rOv8y1xpn7OOMO2jfuNnu7bQWQUiIMQ1MnAABeAeDnAfxHoJMiZwYcOjuAqFMt
sA1gH/rdHQD4AHS/gBeXHWvCeBN0iuIedFBgG92sgNL353A0cALALQZT8W9zc7PKOTeBfxeEEK+o
1+s4fvw46vV6p6tXmTz3vH3Zl6hN/kIIXL58Gdvb22g2m5BSfpgx9hARXY+iaGthYaGxsbExdtCf
qfBnov2DIDhGRMbs/wtBELzYaP4rKys9GrOdwlV0T4Puu9/zmgb5lyXysucMM172+GGJvN94w8xp
1HEHHVd0nTLXL9oeRVGH9Asq770CwC/isBBAAGjYYkFkZQZAm9orAKoA3gvgf4H2xc8aNQA/AB2c
uIferACXFjjncKaaWwipNiz29vYqSZLUfd9f45yfIqK3VatVbnLe7Sp36Xmdl3rRy72fWdxeGGPY
2trK+v0/lCTJtSiKtoIgODh27NjEyP+OO+4IGo3GAmNsTUp5hnN+Xkr57yqVSof8TZEjc6+DKh1m
ia7fc7E/+23PI7jsuGX3Zccse86w4xWNPUny7zfvvPOGHXfQcf2uU+b62e1hGHZcX5YAnHt8igvQ
dfTPATiN8U3lJiiwCWAHwA0AjwH4PRxdNb5XQlsgjkNnCLiAwFsEzgJwa4Gtr697YRjWgiBYYYyd
kFK+3vO8u03qm+d5h9L++pFC9u+iF6LZniQJbty4YSr97Xme9944jq8A2Ez9/hMJ+kNa2393d7fG
OV9ljJ32PO+uJEneWalUXmkC/lZWVnoqHHYeVEFd/3FIvmh7PzIa9F2U3ZY3j1EElLz5lrnfYddH
ERrKjDWJv8te3yCOY7TbbbRarVFL7r4OmrDfi0wrXcYYDfO/QtTpGWDHAwQA/h7A/QDeMMoExwSH
Dgj8KnS6YgO6QJCEdgc4zCmcAHCLwKT9XblyJZBS1j3PO8YYu5OIvrtWq2F1dRWnT5/uafYzKPiv
zD6lVCflz5j+d3d30Wq1FIDfT5Lkcc75RpIkO4uLi6bBz8iaf3qv/Pz58/729nY1juOVarV6ijF2
l5TyBzzP+5alpSWcOHGiU+NgkNY/CZLPbi9DgMMQ87j7Rr1G0VyLxig7Xr/tefvKjDtozDJ/lz1O
Stkh/SHa5vbDd0CbyD+ArnmcoIWAoVoJW0JACO1334LWut8H4F5oa8Os8Q3QwsdN6BgF0yvACDsO
cwjnArh1wLa3t70oimqVSmWVMXZCKfVm3/dXFxcXO1H/BoM0saJ9hgzygv62trbs9r6fYox9Sil1
vd1u36xWq42TJ0+OXeaXMcbvvfdef2dnpxqG4bLv+ycAnCWiN3PO32LKGx8/frynup99H5Mmf/M8
smNnrzdp8i/S8ssKKIOeQ979ZMfKG3fQeP3mVrSv3/32O2+Yv4vux/ytlEKr1cL29jY2Njawv78/
KfI3+H4ADwK4Azpyfgnahz9KZoCC1q5b0ILFJrQf/regrQNHgbeg6+YwWQ+OY+YYzgJwC8DS/itC
iEUAa57nnZNSvr5Wq8FEwUeR/r83wX9lyL/fC9do/2bdpPyFYbjJOf9AkiTXANz0ff9geXl57GI/
jDF2//33e+vr65UwDOuVSuWEEOJOInodY+wHTIrjHXfccaiuvxFSytxbWU14Utp0WcFgkMY9rTll
Mc54RccPum6/8wcdP+7fYRii1WohDMNCoaEEGtCk1w8cwI9BF/RJrMW4A4aNm8nGA1Sh6wP8V+jO
fbPGGWgBZxO9AYHOCjCncALArYGO9u953jLn/Hgcx2+tVqv1er3e6XIH4FDFO6A8gZh1o/EaDdu0
+N3d3UW73VYAPiClfJpzvhHH8e7S0lJ73Hx/E/S3ubnpt1qtehAEx4noDBG9BMCP12o1b21trae6
od3XYBzyH0U7Lxp7mDGGIfxh5zSM8Ndv+zDjDTtmmfMHHV/2mtn9SZKg1WqN49c3iKDr8z8NHex3
bMDxVQA/A02SETSBm7iAcJjMAKKeeIADaMFiAcCfAngZgLuGvpvx8R3Q9Qm2oV0Bdlqgw5zBmWfm
HEb7bzQagZSyDmBNCHGec/7aarWKtbW1QnM4kF9GtgzBmIUxhu3tbVPnH1LKf2GMfVopdSMMw+0g
CJppk59x/8HZnXfeWTER/0qpU5zz5xLRu6rV6rLJcLDnOQr5lyHpccm/3xj95tDvWkXfYb99RfMs
s33Y8fLWJ0n+ec+t7DUNlFI4ODjA5uYmNjc30Wg0xiX/dQD/H4B/ho7G/22UK8+7Bp0eeB66nr4p
petj+Mh5gibYEJpwtwBcg44HOIo0vGPQ3QKPQbs4TEaA45o5hLMAzD/Y9va2F8dxNQiCFc75sSRJ
3lKtVqtLS0s4duxYj/ZvCDHvZQmUIwCibnlcpRQ2NzdNtb89IcT74zi+BuCm53mN5eXlaHt7eyJ+
/42NjaoQYhnASSHEOSnlzwZBcMrU9/d9v3N/w5B/WdIe9JxG0cCH0abHvWa/9aLjzd/DCCTDHDcq
+fcj8mHHMpp+GIa5Y42Ih6H97dehTd0cWggAgJ+F1vT74RyAnwTw/0CTd4xUU2aMxUP+PxG6rgDT
NOhhaE38W4cYZ1J4EMDH0LUCtOCsAHMJJwDMOS5evCieeOKJShr5vyqEeI5S6jW1Wg3Ly8tYW1vr
RP7nEaJB2ZetbfrnnOPq1aumxS+UUh9USj3FGNtKkmRvUqb/+++/37t27VoQRdGi53nHhRBnlFLf
63ne/Sa9cXFx8VC63yjkX1YwyDu2jLY7zLX6zS077jACSpnjp0XegwTPca45zFhKKTSbzUlo+VnE
AP4CwAehNe2b0GZuAU14bWgz/E+m2/rhNQC+Mx3LCAESWggYJh6A0FsqeBs6HuEDAF4EHZg3S6xA
WwGuQ8cmNNAtDjSyouAweTgBYI7BGOPnzp0z2v9yqv2/uaqd/zh27FhPARyDccjffDLGcHBw0In6
T5LkS4yxvwew0W63t2u1WvPEiRPxjRs3JuL3b7fb9UqlcoxzfgeAVzLG3mzu0Vg5hinyk903jDZc
Zty8Y4rGnZWAkreeneckiLisMFH2/DLXHDSWWY+iCM1mE61WK/f8MbEN4D8D+DQ0uZlgtwjaAtCA
Jrm/hibgHykx5tsBPA4tOEToasomj74sjBBgSgVvQWcF/BGAdw0xzqTwIHSfgi3oZ2SsAK4uwBzB
CQBzjIsXL4qvf/3rFSnlghBi1fO8O5IkeU21WsXq6iqOHTuGOI4Paf82+r1U81rg2tq/ifpvt9sx
5/yPkyS5TkRbvu8frKysTKLFL7vzzjsrOzs7C6bYD4DzSql31ut1b3V1FSdPnuwRcsx9DqOlT1rD
77ct79xRrznM3IeZQ7/zRh07b/xhjh2H/Imoo+1POG3PxtcA/Cdosl7HYWLj6JKbAPCX0Ol+g0zw
VQA/BS1QtKGJPwEghy0ShN6sAOMK+DR0IaKXDjHOJLACfe/rcFaAuYUTAOYUjDF27tw5L4qiahAE
y4yxtSRJvq1SqSyYXHj7ZZethAcMRzZ23j/nHJubmx3TPxH9PRF9hTG2KaXcXVxcnIjp3/b7M8ZO
cM7PSinfWa1WT5hKf2beeULOuBp+0XH99mWvm3fOOFaFYeZedq79tg9aH+W8Ya43aF+/c5IkQaPR
QLPZLDxvAlDQGv37AFyF9vPfhI66t33bDJrYGLQA4AH4HQBnAbxgwDXOAfhxAP8vtBBg4gFoyHgA
SudiXAE70ELAH6ZzqJQcZ1J4I4C/wmFhyfUImBO4yMz5BW82m76UsgZgRQhxijH2zdVqteP7N++F
Is3f1uqLSCO7GKLd2tpCo9FAHMd7jLE/I6IbURRt+77fNAV/Rr0xxhi7cOGCt7OzU4miqK6UOgbg
jFLqrZ7nvdyY/iuVSscdUXRv9v3k3V/eOf2EgGHJP+8Z2hjUerhovYzgMi3yL7qXSQsNg/YVbW+1
Wtja2sKNGzfQaDSmSf4HAN4N4D0AngRwGVoA2IXWsmPonhcmz93Wvm9Am+B/DZqEB+G10H7z09BZ
AqO2DzYFgtroFgj6KnRA4KxxBjrOYRXAInTJYgHXI2Bu4CwAcwjGGEs7/gXVanUpbYTzTb7vH7e1
fyLq5P33M4tnt2W32wvnHOvr69jf30e73QYRfRTAFSnlTSHEQb1en4Tpn1+7ds1vtVoLQRCscc7P
KKUuMMbeurCwgNXVVayuriKO457Mhrx7HFdLHvaZDTP+MIQ/ynUHndNve3bcYc8btF5m/zDkr5RC
o9HAwcHBpIP6inAJmvz/Fdo8v4Uu8UfoEr+ZJzHGjBDQgCY6H5rE3w3gP2BwZsAPAngCWlPuCQoE
hjKbGyuAEUY2oQMNL2JwnYJJ40EA/4iuFaAN1ylwbuAEgPkEbzQaXqr9L1UqlTUAb6hWq1haWsLx
48c7Vf8MypBQ9lizbhNBHMfY2dlBs9lEHMdPc84/RkRbUsrdWq3Wunbt2li1/lPTv3fjxo2qEGJZ
KXWSc34XEb2zVqv52Z4G6TkDyX9S5DmKsFBWoBg0z1Hureyx/eZa9jrDXKvfeYP22dvDMESj0TDC
aO5xU8A/Qgf7XYb2YWfr2+dG6KdCgF2YxwgBDwH4fWgzfz+raw26SNBVaPI27gA5givA7hWwDZ2x
8KF0DrPE86CbFG1AuyTs6oAz+0Id8uFcAHOGtPCPaLfbAed8UQixRkQXhRB31ev1jmacHttDjlky
H0T+dq6/MbVvbW3h4OAAYRiCMfZnSZKsSym3PM9rLC4ujlXr35j+b968GcRxXCeiY4yx00mS/JtK
pXLa1DWwXRajpvoNehb9yHzYawwas2hOo1y37LWy49rPtGgOg65TtJ6Hccm/2Wzixo0b2NzcNHEo
ucdNGBGA/wJd3OdxAM8gJ4it3+8/3WeT701oC8JfQwsWg3AXdGe9cV0BBC08tKCtAFsA/i69p1nj
zeh1A7hWwXMCZwGYP7DNzU0/SZKq53mLnPM1InpjEASo1+udqn9ExUVwsuvZbfYL3M77T5Kko/1L
Kb/KOX+IMXYzDMO9er3eunz58rhtftm1a9f8tJ3xWhr1/yoA32RM/7VaLbe9bz8tdBiSLHoORdco
S5aT1uBHGatoDmVIetA8Bt1DEcp+J2Zbo9HA/v5+J/NjhliHNtU/Aq0tb6LX5N/TsS8lY7Nw9CpT
5uYiaMuBD23+fx+A+6B94/3wbdDVBU2goZ0eOIwVIC8g8C+gCxXNEi8GcDd6rQCmU6DDEcJZAOYM
Fy9eFGEY+kKIuhBiBcB5zvkLqtUqVlZWOtqcafhjMEjjKioJbBYT+X9wcIAoihRj7MNJktxIkmTH
87zm4uKi8UeOBBP132g0AiHEEhEdZ4ydVUr9cLVa5SsrK52Ohka4yStqlNWkhyX/o+jqV3Z+ZbT5
vG32PWXvL7vPXrL3nvcc7I6Q/cYe5lnmfSd7e3u4du0adnZ2joL8HwbwvwL4J2jfvynwc4DUDJ9D
/hya2GvQmu0ydOrbMrpaO6AtAXvQ5PcMgPdCk18/+NCm+tPQPvtOAN2YAYE3odMCvz7EGJOAgA5w
XIG+lyqcFWAu4ASAOQJjjG1tbYk4jgMhRJ1zvkpED1YqFZ4t/JMeD2Cw5tZvvzH9h2HYSftLkuQr
jLEveJ63I6Xcq9VqJu1vHDss393d9YUQdSJaA3AqSZK3+75/ul6vdyoaGuEm7x76ZTPY6EeUeccU
EX2/cYsEkHHJf9DYRcRqE3W/772I3Ptdb9A9ZMfrd669bixO165dw97e3qyC+2zE0I1z/m/oPP9n
0Fu9LkTG5J8SsIAm5Dq0afsENFmfTtdXoKsBetBCcxPaD78O4HPQBXIG4TyA7wVwMr3GArRgMOw7
28Qk2AGBHx5yjEngAoDj6LZAdv0B5gDOBTBf4AcHB76Uspbm/p9gjL0iCAIsLS3B931IKUdq95u3
bl7+nPNOs58oihTn/ENJkmwQ0Y7nec3l5eV4Y2NjnLQ/fv78eX9ra6tKRMtCiBMAXsw5f4NpZ1yr
1XoC/8wchyHR7Dl5x5Ul6H7bhiX0omPLCC5F1y8ax35+WW1fCAHO+SFBKs+SVDSuLYDav8N+zyeL
JEmwv7+PRqNM35ypYRs6ve8z6DX5G+LvMfkDHfL3oLX7OrS2vwpN+NX0U0JH8t+E1sAltKBh4gFq
0BH5L4AOkOuHNwH4FLQboSOQDNMxEOg0CzIVArcB/AuAx0pcf5JYA/CN0AGOC9DPwwUDHjGcADAn
MMF/Tz/9dCCEqEsplznnr/Q8b2VhYQErKys9Hf+IBtf9L0P+QFcTa7VakFJ+kXP+qOd5O+12e39p
aSl84oknRk77SwP/xJNPPlkRQixCmzRPEdEPVatVb3FxESdPnuwUNSoio7L3N0nyLzvWuGOX3Vd0
jHGXJEmCKIoQxzGklD0aPmMMnHN4nodqtQohRKHGbV+HMYY4jhFFUcdCY8YzYwohIIToNGvKE24A
nWGyv78/rTK9w6Coql82t78DxhhHV/NfhCa0k9Ba/88C+CZ00/w+Cx3NH6Kb9maX6F2AdgX8z9AC
QRFqAH4Uup6AyUIw1fSGKXlo0hPtgMAPAfiVIcaYBL4JwN9AP79ddAsDOQHgiOAEgPkB297e9pIk
CarV6iIRrSqlXmuC/9bW1hBF0UTI3zbZGt+/0f4ZYx9JkBfo+wAAIABJREFUkmSTiHYnof0DYOvr
614YhjXP81YYYyeJ6AHP8+6r1WpYW1uDlLJjiShzH+No1WW3FWnf/a5fZpxh55RHqPb3H4Yh4jju
LEqpDvmb75gxtscY2xdCrBPRPhGdrFQq95tCS9nfk03+6fiPxnF8M47jY0qp40TUaS5jrAC2IGCE
AfNbDcMQ+/v7k+7GNwoGVfWLkZPlkiH/JWgh9gx0xP4vAnh55jrHkUbuQ/u5TaGgJrR7oQpdnOcv
oHsB9MNLoTXnHXRjEpLUClD2/zLPCvAItCD0DSXHmASeD+A50G6WBXQzK1ww4BHBCQBzAtP1z/O8
BSJaZoyd45x/g6n8l9WQsy4AYHjyB7RJd29vz/j+HxdCfMVo/4uLi2Nr//fff7935cqVwPO8RQDH
GGNnAXxPpVLB0tISlpaWDjX6KZr7oG1ln0e/5zNo3EHkP+jZD3Nd2z8PdDX9KIp6iF9KaZN+SERP
Q+ewP8UYe4xzvg1NRotSygWl1KullPd7ntd3DlJKtNttKKUuEdFnAbQZY/sApFLqHBHdqZS6G8A9
AJ7DOYe9+L7fSSmdAxwA+F3oVLhr6EakN9DV0ovI30NX8z8OXeP/HgC/BOCFOdf6m/STrMWOyDfd
+v4C2jf+3AFzfwd0oOJueh+mX8AofQKMFeAmtDA0SwGAQ5cH/iq0ABCg++ydFeAI4ASAOUBa+U8k
SVIRQhjf4oO+7wtj/s+SwLjkb4L/bt68aSL/wRj7uKX9t1ZWVuLNzc2xtP/t7W0viiKj/R9XSr3F
9/21xcVFrK6u5nYzLLqPshp+v3PGGTfvmGFJvcxxtoAGoKNhNxqNQ8Sfkv46EX0VwKOc8y8AOCCi
Buc8VEq1pZSSMRaQtiqdZYyRUgphGKJarRZaGCx3AgHYJaKrRLRLRG0ieoyIqoyxKmNsAcBJpdTL
lVLPB/A8xtjq3t4e5gSXoEvyfhklqvoZZMh/CTrA7w5owv4PAO7NudbXoevfm3r+CgARdYoEmfoA
W9ACxfsA/I/o3zr4DHQ8gF1TP0orD45iBTDFgT4D4K3QvQhmhVeiNxugAf2snABwBHACwHyApZX/
qkEQLDHd+OdlQRBgcXER1Wq1J0DONtmav81nnrKeNSXb5LK7u4t2u40kSS5zzj8nhNgFcOB53kS0
/8uXLwdCiCUAa0KIu5RSbzRWjSAIcv3QZTTxftvzov3t55AdYxjyL6vhlz3HPtdegK6Vp9lsIgzD
rH9/G8AjnPNPMcaeJKI9ImokSdJkjLU452EcxxFjLAIAz/NqSqmQc15VShGAjlUp7z445z1CBoAt
IroOYEsp1QLAiMhnjAVKqQA6gv4rnPN6GIZL0Bry66E13DqODiNV9bPIv4pe8n8eNPmfz7lWG8Bv
obj7nSHhFrp1+v81nePrBtzHm6AtC9uwXAHoWhjKwLYCmLTAvwfwwyXPnwSOQZckvgYd41CBcwMc
GZwAMAe4ePGiePzxx30hxIKUss45f6HnecdrtRqWl5cPacl5ZXHLrNsEwxjDzs5OR/snor8loq0k
SXYZY83V1dV4a2trLO1/c3PT9zxvIY7jZcbYCSnl9wVBUDX9DOygRnt+NsqSfxnSngb5DyOc5BGt
2Wanz5nv15TANQF4SZJIAF8kok8xxh4hoh2l1B4RNRhjTSJqMcZCxljEOY+r1WrieV6ilOJhGNYB
VIhoXyklGWOd31We9m8C/tJFQpPmHmNsu1arHTDGKEkSTynlKaV8pVQQx3EF+qW+AB249nnoYLlv
gQ4Ay9OYp4UIuvzuf4X2929Ak6cx+ScoqGppkX8NXfI/C23u/5V0PQ9/Ck3oW7BI2lzDsgJki/P8
EYCXQVv+inAMwHekx5uAxWGj6LNWgB1ol8h3Qn9Ps8KroQUP4wZwwYBHBCcAHDEs838ghFjgnC8r
pb6xVqvBzo8HBvuf+x2T1f4559jb20O73UYcxzeFEJ8mbfpvCCHCcfL+jfb/zDPPBES0KIQ4xjm/
j4heYxc0KrJklLmnsmQ8afIf9pn3Gyf7nRhTf7PZRKvV6pj7pZQtIvos5/yjRPS0IX7O+YFSqsk5
b3HOo1A7203BJtNERgEQ9XrdU0qFRJRkr22n8pm5ZeoDEHQxnDAIgvbe3l4jHd9UwDPtb03zGyMI
1KFNvVehifhe6Cp3r8F0W9NeB/Ab0H7z6+it6mdy+3OF25T8TeW+ZXTJ/yXQPv/Teeel1/owdGCh
ETQOVbuzhAATkHcT2nryEehmQP3wIICPo2vFmIQVYBM61fC7Sp4/CbwE3TLHpjTwWD1GHEaDEwCO
Hsb8H1Sr1UXO+SqAF5ncf2OCNdHW2ej/Ig0zb5/9kt/b27Mjsz+jlNqQUu4AaC4tLcXb29tja/9J
klSFEMuMsRNKqbcFQeAb33+2n8E0NPEy5D+p6+aNnXds3mIH9xmtP45jJEnSAvAJxthHieiaUmqb
tA/+gDHW5Jy3wzC0+8d3OsfZwltKahTHMYQQ6VQOCwBZ2PO2BDVKz+/4n9P8eFMdzwgDFeiXexVd
QWADOgDsQwC+H9of3M/3PQoeBvCbAJ5CN8WvJ4WuSLBljJm519BL/i8H8Mso7qS3Di1wmHoC++jW
Esi7lqnQZwLyNqEFpNeh2LoAaN/5m9PrmZoFk7ACfBxauBjUrXBSqEF/98+g6wYI4dwAM4cTAI4Y
Fy9eFI899ljF87xakiSLQoiXCCFWjJ/cvKANigi/LOkopeB5nh35H3PO/04ptSOEaHDO21euXJmI
9i+EWBJCrDHGngvgFaboj2ll3C+VcdD9FO0bZtsktfnsvrz1IvIH0MmPD8MQSZLERPSPnPMPSykv
EdE2gG2l1D7nvOH7frvRaBxqF1vmOyPqHlb0yRg7FJth9jUajUPXSAckACrVbmPoF3oLWps+gCas
HWhC3gLwNHQE+vcCeMWgeZdADK1FfwiaWA6V80Wxyd8IL4b8V6DJ/05oovqFdFseImjyv4Sued7E
F+R+H5YVIEQ3K+AGdFbATw+4zzcA+Ev0WgHMtYaxApjqgHvQVpIvQJvmZ4WL0ILHAropk84NMGM4
AeBowba2toSUshIEQR3AEhG9ygT/1ev1Tu5/mSh5s15EPOalHsex7ft/FMAVItqTUjZWV1ej3d3d
sSP/02ZGS4yx41LK76rVamJhYQFLS0uI47hj7s67p7JkO8o5kyD/QYRftC27cM4RhiEODg46Wr9S
6iuMsT8A8DUp5SaAm0qpPSFEI47jJoAoDENjWi5dEa7RaJCd9mdgrEv9hBUgP+00DwOEgQbSWAJo
0tuGrpr3UgDfh9Er021D+/sfhybSG+hq/sYPX2Tyz9b1X4Eu8HMndP79u6CtF0X4I2irwzoypv9+
3w0RKcaYHRB4E8A/QLtI+qUFLkOb6ydtBfgkZisAvBDaolJHtzSwcwPMGE4AOFp0zP+MsTrnfEVK
+cJKpYKFhYWe3P8iK0CRpmbWbfI3Guf29jZarZYxw38qNS0fCCHCtbW15Nq1ayP/E1qR/6aT4XnO
+QWT929r/3nkUlbDz24vQ8p57+NJjF00TnYM+7sSQmB/f78T4Z8kSUhEf84Y+4iU8jp01P2OEOIg
juNmHMcm91uipLbfD2Y+prS0jWxMAOecRVE0jIZprkFIS9emc4/QFQYOoAnaWAa+Ah3p/t0YPmvg
IWgttp2O3Uqvk1vVzyBD/gvoJf9vAfBz6F+p7zPQ2vh1dK0Nh/oH9IFdp38H2hXw59CxBv3wBuh+
AjehhYeOhaPENQH9PdrX3oO2AFzG7FICjRvgErQA4NwARwDXjOEIcfHiRRFFkZ+a/+tJkryMc75s
/P/ZKHmgtzhMEflntbes1mmKs0gpb3DOHyaivSRJGkEQRI8++mjZl9chMMb49va2F8dxlTG2RERr
Sqk3+77v1+v1Qy6NbPT/MOQ/ble/orFtYanM2P3GscezvyspJW7evIm9vT00m03Ecfw4Ef1vRPT+
JEkeJ6KnGWNXgyDYbLfbRqvs1Kcfh/ztbAOlVGERJillJ/UwiqKxXsqkYXema0AT/wZ0gOAlaEvA
H0F35fvXIS/xbdCEHaRLBd1mM4xlbw495F+BJv9VAKegq/t9K4D/Fv3J/zJ0euFVaOI2RFxobcgi
/R7tCn03oZsFfXnAqYvQsQBr6G2uM0x3vTwrwGeGOH8SeBX0/G03gOsQOEM4AeDowLa2tkzxn1ra
IvfllUoFtVoNCwsLnQPzCD+PmOztRZ8HBwem7C+I6HNSym0i2hdCtNOWvyO/7C9cuCBarZavlKoB
WBFC3MEYe3WlUkG9Xu9JO8tLZRxE/v2eQz8Bogz5DyL2YYUI82n3XGBW18W0qE+slPpzxtj/TrrS
3lOMsSu+798Iw3D74OCgU/VtXOI3U4PWTiWRrvQXRRHa7XbnO5FSYn19HZubm51ATXSzCsa1OhhB
IEZvQZobSCsXQmui/xeAP4bWUMviTQC+B9p3b4ixhrSDni0E5JD/GnR0/13QqXb/Dv2zFBoAfh1d
v7+paz9KQRvbH2/q9P85Bv8fvi6d8zKs+xziukYAMHEIe9CpecM883HxPHQ7J5psACcAzBDOBXB0
YK1WS/i+HxCRSf+7z5j/7fr4ZVLl7PU8bVkpBSGE7W+WQohPKqX2kiRp1mq18NKlS2MV/jl//ryI
oqgaBMESgDUp5bf6vh9Uq9WORcPcU9Hc7b/73VuZ+y5rURhl7H7Hm7+z5G+Er9Tkf4kx9jtE9AWl
1HUi2uKc70ZRdBBFkTFfT4L0ga5PPgEQKaUiM78kSTrxByY2JOeSUbp0KtuNNRnqcQ2YxjYRuib8
JoD3Q3es+xkUR99n8UA6znutuZr5xun1AK1p+ui28z0Fbfr+LuiiOP0yExR09b4vottLoOOHH/b7
IjpUIXAbwJeg6/S/oM+pi9CugKvoxh6MEgtgUgL30/v5EnTxplmgBp0S+DR6WwQ7N8CM4ASAI8ID
DzzAH3nkET8NlqtLKe/xPO+U0ZaLtH0bZUjMNj8zxmzt/0kiukJE+5zzVhAEY2n/6LYyrjLGljzP
WyOib/J9H/V6vRNZnpf2N4w5vczx5u8yFoVhrttvLPuatqXCBDvu7u52nr2U8p855+9VSl1G6j/2
fX+/2Wz2VI+bEPkbKMZYnCRJE5poO0KmUsrMq+hcQ8zj/kZ6YAkCxiedoKuVttNlCzoQ7+6Sw74p
nevvwcqQQFfjZejV/I3Z/23QNfcHadF/DV2Rz5QU7nxnY3xf2aj8m+k1+gkAgHZ7fBS9dQ5MnEjZ
65rnbSwQ/4TZCQCATrH8O3TjAARcb4CZwbkAjggbGxs8SRLf87wqY2xRKfVqIQRsbbkfiojH3pcl
QeNzToMLH4au734ghAiXlpZGTsFhjLF7773XC8Mw8DxvUQixppR6Lef8hMloyFYzLGtyH4W0i8g/
b9xhxi7alze2Lexsb2+buAuplPpLAL8qpXw8SZKnAFyPomir2WzuYbLm/p4pA5BRFLUZYw3oXgEd
4TBtA93v/ANYAW6Y8MuZeuMDTLe669DpfF8C8H9A/17L4q3QhH4W2iVg3AF2XQLT0e850AV4fhCD
34dfhtb+r+FwlsHIz8QIQuhaAXYA/DO0W6Qf7oIm62V0zejDvtPtYMB96C6Bu0OOMQ5ejO73YwQA
hxnBWQCOBmx3d1copXzGWI1zvkhEd/u+j1qt1mM2zkMRgdnrNhEZ879lfo6FEP8kpTyI47hVr9fH
qvsPgO3v73tJkgSe5y0qpVYBvN64M4IgONTLIHs/eZ9F+wedM6yloOyxZtsgocUOdDT+/iiKYmjT
9N8BuKKUWvd9f7fVatnd3Sat9XemmY7fFkLsSCnfwzn/kziOl5RSdRx+8drlao1GuoPeynOTnaA2
hRtN2LgGTBphBOA/AvhRAN9eYjgO3Wb3OvTzltCafxv6PpfR1fx/BLoU7iBsQvv9r6DX71866G8A
Rq3T/0YAn4Z2CZgaBMbyUQad3wa6NQm+CG1dmAXWoL+HZ9CNA+Aob8VwGANOADgasHa77XmeZ7SR
Nc75eUOY/Rrk5K33IzWzbrrJpeb/x5VSN0gH/7Wq1eqwrUV7cOHCBfHEE0/4nufVASxzzu8B8Nxs
8F/e/PPmPOhessfNgvwHHZtH/pbZPySi3ySiTxDRFQAbvu/v2Cb/KRG/DQkgjKJoPwgCCsOwhW7w
mHnpGhiN3BBSA91MhKm9mNNnQFZ+vC0IJNAC1Ba0qX6QpuhDF9XZSsfx0C1MtAZtHfgJ6LiBQWhD
k7+pM7ADrTFPzCWSCkB5dfrfguIiRIDOp78Tui5ADQUliPtdGt0YDGMF+CxmJwAAOh3wEWjrjAlm
dALADOAEgCNA2vzH5P9Xieilvu/7QRCgXq+X1vCz+7Lb7X2m7n/q9/2CUmoPQFMIEa2trSVXr14d
2fx//vx5EcdxkAoAK0T0rb7vc+POsOsZDEP+w3T1KxpnFuRvPu1YCyvSvwXg3UT0yZT8b/i+v9to
NDrNXKZN/pZ2HQOgMAwT6Je9B02kHL3R14Qu+Rpy6LS3ncF8VRoXYBYzFwXgz9J5/BsMFgIWAfw8
gP8TmhyNAHAcwDuhGxSVwQfQrTVg8v2nIbhlrQBb0AV6+tXp96G7Lj4OrUwYtwRDeUuNsbyY+gxf
grZw9BM8JolvQLcgkKsKOEM4AeAIsLu7y6WUvud5gRCirpR6ged5qFarqFariKKosEqevV5EVGbd
kJJpMGPM/5zzTydJcpAkSater0ePPvroONI2s4L/6mnw30uz2Qz93Bn9PgftKzqm3/FFQtKgY4vO
t8lfCIHt7e2O5g/g11PyvwxgI4qinSiKOgF1M9D8zVwNqdqBX8xaDp2CXgIeqvLgBOZrR8fbgXwK
uukOgxYCBvm8T0O7Dv4Imhgr0O6BV5acyiehSwwbv/+wxX5Ko8AK8LfQqYl+n1NfBeCD6DbX8TEc
gRorgAkG3IOuxVBWQBoXd0O7ZYwFwNQDcALAlOEEgNmDNZtNkQoApmPaeSMAFLVoza4PIjWblDjn
ncp/RHQJwE3OeYNz3h7X/J/W/fc9z1sQQiwrpS4KIdZsawaQH89QZOkYhsyHPb5fdsWwgkL2OTPG
sLu7i2aziSiKYiJ6LxH9gzH7R1FkTMcz0aSzSK9nTOpzD0sIMM+JrPUPQxPG95cY6gKAJ6F9298H
XXq4DJ4A8F/Q2+RnqGI/I8DWxveg0/y+hP79Es4CuD+dZw1dIWXUyoAH0BaPWQkANeiaAE+iW8TJ
1QOYAVwWwOzBoigSRFRRSlXTZjl3+L7f4//PC5grIrq8ynX2ervdtiO9vwLgQCnVFEJECwsL41T+
Y7u7uyJJkoBzXieiZSJ6lQlmDIKgR/vPE1KK7m2S5J8l6ryx+hF8WfJvNptG81dE9H7G2N+m5H/D
Jn/ShXicdlMC6XOy0+R20C0c9CcAPlZyqLcC+LcoT/67AH4NOjjtBrppdqMU+xkGRhs3VoBd6Ha9
g/DN0NH0xgowbFU9u0BTA1pYag1x/rh4AbqZGtmYFIcpwT3kGeOBBx7gcRx7nucFjLFakiQvFEJw
UwGwSGM227NknyU+m5jMvlarhSiKkCQJOOefA9BIkqTt+370xBNPJGPcDmu3255SKpBSLgghjnHO
7ze5/6buf9595N3DpMi/7JjDzClvfPsZm6Y+aZDlRwF8VErZMfujGzF+S2jf84QBQsD7UC5FsALg
3pKXlADeA926+AZ0ZHwn6G+awlvOve5B39/mgFNfgvGq6hnBw65K+Ngwcx8T96A792GrGjqMCPeQ
Z4yNjQ0upfSEEAFjrKaUus/zPARBgEqlckhjtokmr/Z/P23awDL/3yCiZ5RSB5zzdqVSGdv8n/Yy
WPA8b1lKeVEIUQ2CAAsLC4WkXaRVZ+c+DPmXsSrkrZcRIvK224KaUsrur/AItL+5E/CHtIiOI//R
kSFGu4XuFeh2vINy5ofBn0Gn1tnFfqbi9y+A0cZNmd4d6BLJ/bACbd1YRG80fVnYbgCT+fHoULMe
D8+BFgCycQAOU4QTAGaLTv4/57wKYIEx9hwjANj+/36a7CCCsteFEGi1WkYbf4wxts85b3POo1qt
NjIhZcz/C0S0SEQXfN9HtVrtmXPe3LLzzju+6FjbCjLM+YPWi55rdp+9mBK/7XYbSZKsc87fo5S6
IqVc9zxvt9FoDJuW5VAASwiIobXUbej0t6ehhYDGBC7zELRrYepBf0VIr2MCIE0L5U+WOPXV6DbX
GccNYIIBHxri3HGxDF0PwGQCuDiAGcAJADNGGIZCKeVLKaue5y0xxs4Z0szTYPtpqTbsv6WUHWtB
GpBmCvF8UUp5oJRqCSHi48ePj/NSY+m9VJRStTSW4QWe56FWq+V2Muw377LkP+r5Rc+1nxBRdHyW
/NOOfi3G2G8opS4xxq57nmfy/Gca7X+7wyJHYwkwDXQeh46EHwdXoQUJu8PfJIv9DINsat6T0PEI
/fAi9FbVG5ZEs6WB19NlVjBxAHY3R4cpwj3gGeKBBx4QSZIIz/MCIgqSJHku5zzIkibQn+AHmaZt
YjMtXaWUMef8y0qpZpIk7UqlEj/00EMjWwAuXLggoijyfd+vCSGWlFIvFkJUTfpfP7N99u9hrRt5
55cRlvqNXTS/fs82juNOfAURfUgp9Xkiuk5E22mFv1kV+XlWwRICTNBaE1oY+BKAfxxx2AZ00N8l
TKnYz5DI+uT3oAN4+2EFwPPRzakfJw7ABAPOMg7gXuh5u0DAGcE94Blif3+fJUniEVFFCFEjovtM
/f8i0gQGk5m9ze73biLT07auV4hol3PeZoxFlUplrJruu7u7PEmSipSyqpRaIKKXeZ6HSqXS0fqz
sQzZexpE3NljB52bPbaMhl8kMBQ9Z7Odc277/R9ljH2EiNaJaCsMw33M2Gz8bELazte09LWLGDEA
/zLCkArAH0Dnvq8j013vKL7D9Jp2MKBJzRuECzhcVGcY2G6AFrRlZVZ4DnotAC4OYMpwdQBmiN3d
Xa6U8oQQFSIKANzteR58389tlmNXzutnzjaf2WNN//nU//80Y6zBOW8LIeJx0/9OnTrlKaUqQggT
APg8U8ugqJFR2XvJnjNIq887t9+xZc7rJxjY5J8kyQHn/LeVUteIaMv3/f0oiqadK/6sRUr+HDpQ
LID2dy9Ba793AvjxEYb9awCfgWXyT69Rge6iOP7ERwNHl8ATaDfAoAp9z0fXDTBKUR3bDdCCFopm
hVPQQYwuE2BGcALADNFut7lSyvN9P+Cc15RSJ4QQneh/oEv8Zt3+HLTNrJsxwjA0GioAfE1K2SSi
kHOerKysjExOb3jDG8TnP/95z/f9KhEtKKWewxg7ValUemIZjAAzjCAz6H4HjVP2/GGvaQtVSZLY
pv+PENHjADaFEDvNZnMWueLPSmTIvwZNhCehu/pdgK7tXx9y2C9DB9gZd5gPLVT4OPrATdO62OT2
c+jI/Nf2Oecu6OqHl9GbDlj292jHWLSgGx9tQD/naYNDVwV8HK4i4EzgBIDZgYVhKIjIU0pVPM9b
JKJTQggEQdCJbM+zAAxLcGbdmP+llIpz/tU4jltSynBhYSEZx/9vWhkrpQIhxIJS6oLv+zDZDKb2
/yTIfxjhp+h59LvOMC4Bcz+mqVIa8PdXADaVUtthGB6p2fh2Rob8F6DJ/xS01v966MY/1RGG3ko/
jUChoAl3XlI2PWiteA16XoMEAA4tDH0ZvemAw1YFtLMBnsFsBAAAeC66FgATB3DUgthtCycAzAjv
eMc7+Mc//nHh+36FiPwkSc4KIXzf9zsV8wxnmI5yZcnfrNsL5xztdtvk/28AuMkYazPGorT878gE
1Wg0uJTSJ6JACFFH6srICjK26XRY8i1LzMPuL3t9g2zKYRzHCMMQcRwrxtgHiehGkiSblUrlIK39
7/z+E4ZF/hX0kv85AN8GrflXRhz+1QD+KV33AaxCC3Hz8h1yaCJfST+fgdbMa33O+Qb0FtUxzXXK
whYAWtAlkS8MO/ERcSf0vE38gnMDTBFOAJgRNjY2mJRSKKV8z/OqRHQ35xxGAIjjuG8DoOzfeSRp
by/w/0dElEzA/y+IyBdC1Djni0qp8yaWIZvJYArl5M2z6B6HIf+y1oMy182el91mmiqlQtUjAB5W
Sm0IIfZT07/z+08YKfkLdDX/VXTJ/80AfgT9G+UMQgXAT2K2ZW/HxaDAvueiGwg4iimd0JsNMCj7
YJI4jcMWAIcpwQkAM8KNGze4Ukp4nmeCl+4SQsD3/VKm7bwqgPY6kc4AMBprkiQm/Q8AniaitlIq
5JzH4/j/AfAoiowbo5r6/5c5551YBttfnpfaOIxLo8x5Ra6ComPLXNe2xph1E1ORJIlkjH1YKbVB
RLu+7zfDMIwwP2bj2wIW+RvNfxWaIM4B+G4AP4jho9zzsJYutwuOQcdFPI2uJj1sIKCJA2in4wyy
OkwKp9FbDMhkecyLRea2gpOuZoRGo8GVUh4RmSqAp2zSBA6nzdnEbqNf85+s9i+lBGPsqSRJ2nEc
R0II+dBDD40sAFy4cIEnSeJ5nlcFsEBE9zPGIIQ4ZPI3BYlswSTv3rLrZbbZY+c9g7xr5I2btz/7
CRzqqPgQEX2ViG5yzvcbjUYLzvQ/UWTIvw5N0GegU8XeDuCHMBnyv13xIhwm0rIwcQB2NsC1SU+w
AIvQ8QYuFXAGcBaAGSGKIk5EgnNegbYAnDIWgDxCNyij3dpEBRxK/5MAnmKMhYyxyPM8iTGCakwq
IxH5RFQlons9z+sQvhCi0Pyenb+9XmThGEWbL3NMkcafd6wJ/LO0/48opbaIaM/3/VYYhq7U7wTR
h/zPQRP/W49udrcM7sN4RXVMOqCxAqxDuxZmgXsAPIJeC4DDFOAEgNmAJUnClVKd3HnG2ErWBWAw
iLTKHGvS/4hoi3PeSAWAJC0ANDLa7TYnIpEKABWZewJpAAAgAElEQVSl1BlD/s1ms5MGWDS3suQ9
LKEXHVM0Xr/jDUwgY7PZ7JRUJqIvAvgaEe1wzg8ajUYbTvufGCzyD9BL/ndB5/g/eHSzu6VwFl0t
ehwBwFRbvDrR2fXHWegYANcUaMpwAsBswJIkEQA8IvKI6BznnNsWAKC/tj+I/HsuxhjiODbpeDcA
tDnnMREllUpl5BS1NACQExEnIkZEFSI6KaVEGIZoNBqQUqJarcLzPHDOczMBxil5XHTfWY09e0xR
RkJ2n7GmSCmRJEkn6t/qp/AxpdRNp/1PHin5e9DEtQjtyz4NTf4/DeB1Ywz/ZQAvHHeOtxDuQJc8
7WWYQECTDRABeGryUyzEMTgXwEzgBIAZ4IEHHuAPP/ww9zzP55wHRHQHY6wnAyCLsuRvf9qugNT8
DwDXiCiUUoaMMVmv1ydCVowxmSTJGQDc5P0rpRCGIQ4ODg6lAfabe79jym4fZV8/AcM8T6VUJ5aC
iC4xxj4HYCvV/l3a34RgkX+ALvkbzf/nALxmjOH/DsAnAPyHdOxnAyrQz1BhtAA6EwhoCwAKs4kb
W0OvAOBi1aYEJwDMAPv7+0xKKXzf9wBUiOh01vxvCLOfRmxvywoI9t8m+j/VtC8rpcI4jpNqtSof
ffTRsVwAQghKyT9SSt1pz0FKiTiOC4m/3z1N8vhRz8meZwtVaW2Gjyml1gHsRlF0lI1ibiswxkzJ
2wC6jK0h/7sBvAvAK8YY/isA/gb6e/oMdN2AZwvOIS1MNeL5dhzAAYCbAE5MZmp9sYbeNEBnAZgS
nAAwA7RaLUZEXCnlMcY8AGtCCHied6gCoI1+PvS848xnWv3PkNZlKWXEGIuFEGM1AAKAa9euycXF
xUhK2SCihxhjv4o051gp5RORKKP9F4BKHDMUxhAEmP6gmIhMRbQ/JaINz/P24zgOofP+nfY/Bizy
r0Jr58ehzdfPBfDz0NHso2IDwO9Al8VtQkeyPwNNLnZ63O0C0zzIdPL71/RzFEHVuADsokCbmJ0A
4CwAM4ATAGaANAVQVCoVjzEWKKVWTBGgLMmX6QNgw44fMLBM1ooxts4YixhjSZoBMC5hqSAIIqXU
AYBPKKUeYYzVOec1IvLRsebmY5CgU3TMoUkoNTHizVzfvjhxzhOlVAtAgzG2H8fxXpIknZK/k5rD
sxEp+Ruz/xK65H8vgF+Crmg3KtoAfh3aArABTYQMOhYgQDc6/nYCoVcA2IXV1XDE8Uw6YJSONwvU
ACyjGwToagFMCbfbP8BcQkrJAHAiMhG5y8YCYGDIf9ggwOximtWkloXdtPxvwhiTvu+PVaOeiIgx
pra2tqK1tTXGGFNSylApVZFSekQkADDT2fA2AJFOo0yEEFEYhi1oTSiC8/2PBYv8q+iS/1no9LVf
xngpZwpa838IwBXoev+m0p/5HzQ18m8nC0A2cC+EFgaMBWDY32s2DmBzYjMdjDPotQA4AWAKcALA
DCClZGnkvBBCeFLKFc45hBCFLoBBgkBRqpsRAFIS3ku1/5gxJjnnk/gHUgCS7e1tAhAfP368nSSJ
UErx1Gyei4ODg1vxn5fSxbwIzaLgtP+RkUP+J6DJ//kAfgU68G8c/BV0i99r0Nr/LjQZEjSZ2Mvt
BkP05reaYPTfq20BSKAzimaFk3BxAFOHEwCmD5Ykicmd95RSVQALjLFO7X87ADDPCjAoWt1eAHQs
AAC2lVIxY0wyxlS1Wh2btIwVAKkgsLW1FZn7HHfsOQVZnyZG4VYUZuYCKfn76JL/SWjyvx+a/M+M
eYnPA/gD6Lx1Q/7ZFs0s83k7gTLrhNE1Z1v4jTFbAeAUDlsAHCYMJwDMAEop4wIQRLRmCN9UzQMO
uwD6xQAM4p84jjsCABHFRggIgmAixGURoCNCh9LIkP8yuuT/Umiz/7gBZleh/f5XoMl/D9r0H6eu
nNsOZeJlxkBWAJhVOWBAB4Q6AWDKcALA9MGklDz1jwsiWjMFcvIIP7tt2LRA04An/ftmav5XqQXA
EbbDzGG18/XQDfAy5H8BwC9i/GY8DQC/Cp2vvg5gB13N37lrRoMtACTQqYCzagq0DE3+TgCYIm5H
H9hc4YEHHuBExCqVimCMeUS0YrR/U0MfKDbr2yjS/O3jjfZvuQCSKIoSzrkapwmQg8MosMjftPNd
Qbed72ugzf7jkr8E8FsAvgTgOoBtaLJywZrjI5sOeDCj6y6g6/93AsCU4CwAM0AaIGfynZeM/98m
fftvs81Gkfk/mwZoOuWlf+8qpZI0AHDUimAODiMhQ/41aPI/CeBOAN8MXeGvPoFL/RmAT0KbqLfg
yH+SyFoBGtDf4bRRh9P+pw4nAEwZ+/v7jIiY53mCMSaIaNH2/xvytzFsASA7k8AqAQzO+Y6UUjLG
pBDCCQAOM0Mfzf9OAG8A8DPQsQDj4jMAPgjt/98EsA+d+pYQkbN4jQ8TRGisAI0ZXbeGrgvA9DFw
mDCcADBlmCqARMSFEEIptWBSAMvk+Wf3DQoSzNQE2GOMSQCKMebI32EmsMi/gsNm/28D8BPpvnHx
FLTp30T8m6A/R/6Tg7EAGCtAq//hE0MVXQuAswJMCU4AmA0YAJZmAVRtASDr6y+qBDhIWDAw1gAi
ijnnoUkB5JyTM4c6TBtWO1+j+a+iS/7fCeBH033jYhs66O8SdHqane7nyH9yyNbCmJUFIEAv+TsB
YApwAsCUEYYhI906lwPgjLFq1gJgFwIaRPj9AgHtT8ZYUyllioCQEMKRv8NUkSH/OjT5n4Ym/+8G
8IPp/nERA3g3dFnfdegmNZ2St07QnSiyFoDmjK7roysEOAFgSnBZALMBA8C5dvb7nPNOBkA/0/+g
9byMAWu9acz/0DXt3UvRYWqwyL8CncO9hm4737cD+CFMhvwB4P0APgsd8b8FTf6uNfP0YFsA9md4
3QDpuzP92wkBE4azAEwZSZIwSkvk6iJ6LChq/Zse03e9bKwA0hKgpgbABG7FwSEXGfKvQ5P/aWjy
/yEAb53g5T4B4C/Rjfg3QX+O/KcD2wVA0M96VqjDWQCmCicAzAaMiHiaBSAADAwCLFsJMOtGsCwA
pvMfAYDnee7l6DBxWOQfoEv+RvP/MQDfPsHLfQ3Ab6M36M9F/E8fthAQz/C6FXTJ3wkAU4ATAGYL
BkD0a/yT3T6C5m9gap+PUwvcwaEQKfl7yDf7/zSA103wchvQQX/P4HDQn/t9Tx92OuCscDt2bJwr
OAFgykiSxG48woioYmvrQG8971HN/jkxAIoxRi79z2EasMg/gCb/Y+iS/89BV/mbFNoAfg3A4+iW
+W0gjfh3pv+pgjJLOMNre+i1ALiWwBOGEwBmgDQGINeUNSgQcNC+IjcCY6yjGTHGyLkAnr1Iybpo
sZF92RN076ee307a1MeY/ZfQJf+7AbwLwCsmOH0F4HcBPAwd9HcTrtLfrEHW5yyf9yRqRTj0gRMA
jghKqUPlfw3K5P7nZQTkwJn/n4WwCN/kUYucJRtclc337ixWNolKjzfkvwjgOIA7ANwD4OcBvHjC
t/MxAB9Hb5lfF/E/e5jfx6wKAQHO/z91OAFghjDZANbfeccc2pc9ztT/N/sK3oOzNNU5HDEypO9Z
SwXal2ovps2qnWJlk38CbV6PoTVts278vx50wJ/R/O8F8AsAXjDh2/oCgN9Dt8yvq/R39DgqocsJ
AVOAEwBmjLziP/b2ovUBAX+HxnN4dsAquyvQJfwgXarQNdXNehVaAKigVwgAugFeCTTpR9BCZNta
jFupAt2u9RQ0+f8SgOdO+NauQvv9r0AHAO7Ckb+Dw0ThBIAZIhuQl1O9L1ejLyL/vCJA1r7ACQS3
LzLEb6qmVaE187zlNICXQpP2iXSYs5lhW9Aldq9DE+/XoYn4ADriPoQWAALoKn93Q5v975rw7TWg
I/6fQjfoz5X5nQ8c1UvFuXumACcAzAFMPIBt2jcoS/7Z41M4/9ltCCsIzxB/DToYbwm68Y5pvvNy
AC8C8DxoAWAUbECX3P0StEleQVsA7gTwTmgXwCQhAfzn9HrXoQUSU+bX+f2PDuZdUpvhNV0a85Th
BIAZINX87ahqAIc1/yzKFgMCtBCR0fh9pORPRMxKR3S4RWFp/Sb9bgE6EG8F2h9/HMBLADwITf6T
iKI+mS6vh47A/xfodLx3YDp94T8E4O/hgv7mCT2pzDO8bjTDaz0r4QSAKcNKvyMAxBiLgK7WD+T7
7weRf78gwXQbJ92EyBH/bYBMo50aNPGvQhP/KWjifzsmH4hn4xiAN6XLNPDPAP4Ymvw30S3z6/z+
R4cs+QczvHaCw2mpDhOEEwBmCKVt/DJL3tlOgPY+e31QhkAmwNBYABgAdunSJffPc4vCMvlXoLX+
ZWht/xR0+t2PAXjlkU1wMngKwHvQDfpzEf/zAzsdb1INncrAxHy4d9eU4ASA2YBMUx4iSgyZZ9P5
bGTjAcoUBsqsmwhvW4J3uMWQKbpjtP6T0Ln3b4I2xS8f2QQng13ooL9L0GV+XdDffMFOMfVneN0I
TvufKpwAMGV4nmeX4yUiiogISZKgUqkc0uzz4gHKBALa8QTpGB5jzLkBbmFY5F/F4XK7P4HJ1to/
KsQAfgPAV6Aj/u2gP1fm9+hhkz+D/i3OCg10LQDudzAFOAFgNiBoD4AiolgpBaVUbiR/GfIv+U6s
EpGpBOeyAW4xZLrs2RX3ngfgV6Dz728HfADAP8EF/c0zbCFgllkAJu3UWIHc72HCcALAlBEEAZmm
PEopCaBNRJBS9uT95+XsD0rzy9tnjVNjjHkZIcDhFoBF/qbL3jFo8r8fwH8H4NzRzW6i+CSAv0CX
/PfhyH/eYJO/gK4pMQvE0L8FZwGYIvjgQxwmAILuzicBtJVSSJJE78iJ7C+T419UIdC4AABUiEik
ixMAbi0YX+sCtM//DIDnA/gfcPuQ/9cAvBe9QX9tALEL+psrZHtKzMoFYMjfCQBThBMApoxqtUqM
MZJSSqWUJKKmEQAMaRt3ANDf35+3nv3bEgA4dH54p/ELc6UB5x6p39+DNrWuQAf8nQfwyzhcue9W
xSaA/wTgGfSW+e10sHSYKxiL1CwtAG3oolC2EOAwYTgBYMpYWloixpiCtgAoIwCYwj2Dovqzfw8K
BOSc22mFq5YFwFkB5hw5fn9j+v8JTL7W/lGhDeDdAB6DC/q7FWBbADzo3+Us0EK3I6WzAEwJTgCY
AdIYANNpbSebAmgwjNk/b4ysEEBEa0II0/TFCQDzj6zp/zSABwB88xHOaZJQAP4QwCPQ6X43oYP+
XJnf+YVt/p+lANBA1wLgfhdTghMApoxPfOITinOuoiiSSqkE2twJKWXnmDziN9uz+/u5CmwBIO0t
cIyIPM/zvMXFRbvzm8OcIdX+PWgf6xJ0w577APzwUc5rwvg4gH+AdgEYzd8F/c037PLTPmZXc6IJ
XQnQuQCmCJcFMH2QEEIxxqRSKvE8b8f4/IvaAfecXKIPQPZ4IYSJBThORD4AFwg4/zBlfhcArEFX
+ftvoOMAbgc8AU3+++jtLihd0N/cIttquo7ZpQHuoesCcALAlOAsADNAWghIAZCMsW1AB/4V1QIw
yCv0UxQPYK8bCwCANc/zfCLyiMhZAOYUlu+/im6Z3weg2/feLjgLfX/2S90sDvOJrPY/yyDUA2gL
gBMApghnAZg+yPd9xRiTjLGEc96WUjaJaMG4AQZVAMz7u8g9oJSC53nGAnBMKVVB1wLgBL75hO37
X4E2/3/PlK+5C22C34Ym5hq05WFaGl4NunLho9DvHTsuxb3c5xO2BcCHtkrNCjfgBICpwwkAMwDn
vFMHgHQvgF0jAGTdAIMaA+X5/LPbLAvAEmPMN24AOAvA3CET+V+HDv57I3Tu/6SxDuCzAD4P4DJS
Ezz078LEH7wQwIsBvBaTaSds4zUA/gTAVej79aAJxlkB5hPmt+mlyywFgA3otFATB+AEgCnACQAz
QNoPQEkp47Qd8K6U8o4kSeD7fk81wKI0vyz6FQvyPM8IACtEVOWc+0opAYAzxpgLuJor2OS7CK2F
Pzjha9wE8JfQPvhtaD98C2nqXXqMcUE8DV2a968BfC+AV0xwHhUA3w4dD1BP5xGmgrH7Tc4fbO2/
Am2ZmhWuw1kApg4nAMwA9Xpdcc6lUkoyxmIi2lVKIY7jnoZARgCwBYFBPv/ssSYIME0F5ER0hoge
IyJjdnUm1/mCMf/XoKP/Xwjd7GdSeAjA70N32tuENv2bADyjXQHdF30NWhDZSs95NbQgMCn/7zdC
pwLegBY4TNc/95ucP9gWgApmF5Dagg4CjOEEgKnCCQAzQFoNUDHGEiKKAewopSCl7NHis8WBygT8
5cGuBaCUupNzXuGcV6Iocm6A+QOHfrkaAWCSHf4+CeB3oMvtmja7DehiPEa7Mj8mo+1VoIl5F/ol
3ADwFICfw2SKEa0BeHk6pyq00GHKvjrMD+zqfz60y2ZWFoBtaOuUbQFwmAJcUNgMsLS0RJxzE/0c
E9F1KSXiOD7k8x+F/LOBgLYVgIjuIqIKEYl6vW58rg5zgEzTHyMAvGBCw38amvwvQZfcvYZu/v0+
NLG3iKhFRC1oTbwBTfrb0ALDlfT8rwH41XScSeCV6KaU+XC/yXmFyQCwm1LNAttw/v+ZwP3jzQCm
GFCSJDERhZzz68YCABz25w8i/2x6YFYoUEp1agEAOMMYC4wQAPedzxOM/78CnQHwHOjqf+PiOoA/
gCbsq+jW228AiNJA1J6yu6QhoV+8beg0rG3owMErAL4O4HehNbNx8UJoQqlC37twfSrmDln//92Y
3bvDWQBmBEcGswF5nicZY4lSKmaMXSYiZVwAPQcWVP3rR/b2sWbdBAIyxk6nAoCvlPKQBgJO8V4d
ysNoWAG0NvziCY37h9Dkb8rt7iM1+w8qupMRBFrQgsMmtFDxrwA+NoH5HYMWdIwLwLmm5g/GOmUL
ALPCTfQKAM4CMCU4AWA2MLUAEillqJRqQGcCII7j7kF9qv7lCQp5vQDMp5UJcBzAIue8agUCOswH
7JdsgMn42L8CneZnzP0j1dpPBYUEWnDYh34pb0BnBxxMYJ4vhGUBgBMA5g12AaAqZlsE6Cq0AGqC
AJ0AMCU4AWBGqFQqphhQDCBUSq1LKZEkCQDkVgXsl+qX9y43AYQmBiCNAxBEdD51AZiXrfve5wP2
SzbAZMz/n4SO4Dcm/5Fr7WeEANsl8M8TmOdzoMnfh34GTgCYL9j+/yom89ssiyfRtQC4GIApwhHB
jJCmAiZpGmCbMbaRZwHIkn8W/QQCe7upCJg2BbqHMVb1PK+yuLjoXrbzA7vUagU6Qn4c7AH4ArpB
fqXM/gNA6MYFNKAFi0fHnCegLVMVdIsBud/k/MBO/zPuqVkJAAfQlibnApgBnAAwI5w8eVJxziVj
LEmLAT2tlOpYAMYh/6Lj/v/2zjRKsrO87797q9fZpZnRLiRAwkICmc1gEFgogBcw3oLAsR3Ha0zi
OOvxyUk+5Jx8SD4lcY4dJyZeYsdOjE1MDgELEIuRLQEGhMwihBDa1xmNZqaX6upa7r358NQz963b
1cuoquve6vv/nXNPVVeXqt5RV73P/31Wbwkcx/FVURQtpGk6l6apsq6rQ7HT2sERX+9xzPgPq/N/
XvQ9B2FyYAu4v387CkcYbAmsz2R1KJaEvgCr2pgEJ7DPmTwAE0Bfuglxxx13pI1GI+n1ep0sy9bj
OH7UmwFtNxVwu1DAZsmBs7OzNBoNgBdEUbQvjuP5fiKgsq6rQUTuBTjA6N/HUwxunuPqsJf1X6+H
CYsWFmYYhX3I+FeVsDplnvGVpu6EE9hnLCwDFLuEGgFNDq8E6PbDAE9kWdZNkmQ2PPkPawfsvwtv
i/eH/RwIgOPABVmWLfTzADwMIGVdLlFwLYzh9XZlglqWZVl/ouW5XhaYl2EU5hh0/UuQVocwMXUf
8MIJvveTmADooBLAXUfKe3Jk8/PzSRRFvU6nsx5FUTPLspO9Xo92u21P2CSzP0wQDB8vUvQkBNUA
cZZl16dpupCm6dyhQ4fUEKh6jOPvkZEb/d0Sd/66yYivI4NfTYqVKfuAqyb4/g8hD8DEkBGYIAsL
C54I2MmybB14NqwEGNbgZytvQPHnokDIsozZ2VnvCHhto9HYNzMzM58kifIAqkEWXKOeqGGjW32c
RjYMVzSwkMUodJiMYBHnR7E75fH+NQlSrO20CwAlAO4yMgIT5MEHH0ziOO7FcdxNkqSVZdkj21UC
FNmsRHDYc8M8gCiKXgDsi+N4oS8AlAdQDTJs42uP4bWOYKc2b64zlqZPURS5oPCmMN4adhR8EqGS
vKpFWJWyCNwwwfc+iYWxXADo9L/LSABMlmxmZqbX6/XacRy3G43Gg2Ei4Hbx/a2SAcPnhI/PzMx4
NcAVcRwfStN0MegHIAFQLm78Eyx5b3nE17sS8wIsYkJgXCWfofFfxObCj1qyuETu4pUIqA7+t17A
/tbXTPC9HyMfU60SwAkgATBZ0n4iYCeKojbwYJZlbZ8J4Ie1Ysx/Kxf/TkoH+wJgNk3T66Mo2pem
6fzBgwc9CUuUhxu/HrbpLY34esexlq0HsM17DpgZxQvQP/17Pfh+rFTxVSOuE6xiQaVe1SLM/l/A
/t7XTvD9H8SE8FhKWMX2yABMmFOnTvXiOO52u921KIpWsyx7vNfr0enYjJVhSYCbJQBulyvgr+dh
gCzLbgT2NxqNRYUBKkFYXtfBjOKovBk7nR/CvAHPe9hOMK3Qjf/h/mt/9xjWeRL7N4cz30W5FGdT
XMzk4v9gbaxDD4A+E7uMBMBkyYAkjuNuFEU+E+CxJEnodDrnjPiwtsCweX7Ads+Zm5vzuQAvweYC
LKZp6mEAUR7u/u9gp54nxvCar8bKto5iBnsf/ZG75yMCCsb/AJZfcBS4CbhkDOv8JoPZ3vIAlI+7
/13wvYrJ2YhlrJFV2MdCn4ldRgJg8qSNRqMXx3Eny7JWFEXf9kTAMA9gM6M+7HdbvlmaEkWRhwEu
Al6Qpum+NE09RqzPQHm4B6CDnXzuHcNrzgHvAi7FTm9HsM18x56Agtvf58BfjIUXfnAMa2xh/d59
s1est3yK2f/7gesn+P6PYZUw66gCYGJo85882fLycrfX67WjKFqP4/gbaZqmwyoBtmv9u5VIKP43
MzMzNBoN0jR9dRRFB7IsW9i/f/88+gyUSRj/bwEPMHqLXYAbge8DrsBO6xdisfsFYDaKoqHegMjw
GvBFLIxwDBMTlwM/0X+tUXkAy/Y+t9mPqWOheP6E8f99mPdokvH/h8lbWKsCYEKoE+DkyYCk3wug
lWXZ2SzLnu71epd7/D/cC4e1Cd6pKHA8D6AfBrgujuMDcRzvS5LEk8R62oBLw0MALSwJ8D7Gk2T3
o9iG+gnyk91S/7EO0IuiKEy+C+cSeALYBVjG/xXATwKvHMO6AL6GDRZqoc2+KoTZ//uBl2EicFJ4
/F8JgBNEAmDyZEDSaDS6aZq24jhuAo8kSXJ5u91mbm5u8MnbtPvdyvhHUXQuBDA/P8/MzAydTudq
4GgURfuzLAvDAKN2dhPnSb/FrguANWyQz18zHgHQwIz2AnA7dqp7jnxYULHVajHb/zB2+r8SeA/w
hjGsif77fq6/Dk/40mevXEL3/z4s7DMusbcTQu+X4v8TRAKgHNJGo9HNsqyTJMlaFEX3J0lyU6fT
YX5+fqASYKtBQTvJBfC8gmA88Gyapq+NouihJEkWDxw4ML+6urqONuGySMk9AC4A3sN4XO0N4N1Y
LfcHgUeBMwy639PguR7/PdR//xv7axlH0p/zVWzgS5P8tKfNvlzc/e+tfw8BL5/g+z+CJQEq/j9h
JADKIV1eXu7Oz8+vx3G81mg0/iZN01632z3399hqMJD/fth9/3nYY14OmCTJK6Iouk1hgErgiYDr
mGE+g52Q3zHG93gV5tK9G/hLrN+6u1sTBg2AZ3+/AXjpGNfg3A6cJRchiv+XT0wu/g5gn5XDE3z/
b5EnACopdIJIAJRDBvTiOG7HcbyWZdmZLMse6Xa71/R6vXOnfhcBG/7jHVYEFPsFeBig2+1eCxyP
ouipJEkWUBigNIIwQJtcANyG1fOPcwb7HPD6/rWEiQB/P7BT/iEs038ckwmH8U0s/h/mIugzVy7F
5L+DwHdNeA1fZrACQPH/CSEBUA4ZkMZxfC4PoD8X4JpOp8PCwsKGhkChKAhvz73gFjMB/PEwDJAk
yeuBh7IsW9y3b9/C2tpaO4qiVKexUvAwwBpmHJ8APg28c5fe7zCTjfGC/Rs/BJzG3L0t5P6vAi4A
wsTPSbr/l7DQlFcAKAFwgqgErDySZrPZieO4DaxGUfSlNE3PdQSEzVv/7uTxYYRhAMwAHI6i6EDQ
E0BdAcvBwwAtzDg+hxnLZ8tc1Jj5G+ykd5p84Ivc/+UTJv8dBF7BZN3/92KfByWEloAEQHlkgE8F
XIui6IE0TU92Op2B0/5mXQH99+HtsN+FpGnK3NwcMzMzAC+KouiyvgBYpN8tbrz/RLET+kbQvQBN
zC3/JPC77I0NcRX4Q0zQnMVOe3L1lk9Y+eG1/+No83w+3E0uAJQAOGG04ZeHtwXuZFnWjKJoJcuy
B5Ikod3OJ8NulwS4lfH322IlwezsLDMzM40sy26OouhwmqaLi4uLC2g2QJmEXoAlzFjeDXy8zEWN
iT8Bvo15NnT6rw4RedOng1jPh5dN8P1b5D0hFP8vAQmA8siAZGZmphPH8XqSJCtRFN3jcwFg+CAg
fzy8HfbczZID0zRlfn7ewwCvjuP4gjiOD6ZpuoC8AKXRN4beE8C9AM9gxvOhEpc2KndhzYhOotN/
lShWfhwCvgcLB0yKB8gTQlUSWgLa7MslXV5e7vR6vRawGsfxV9I0XfK5AM6wOP9Osv83+10URd4Z
8KI0TV8JHErTdJ+3BpYXoBz6IqCHbYYr2FNxqokAACAASURBVHTAp4D3YbkB08ZDwO8AT6PYf9UI
k/982NPrJryGL7KxMZU+FxNEAqBcMqDXaDTaaZo2kyRZAu7rdrv4bICi8R+WBBje30lzoEIy4E19
L8CBJEmUDFg+GXZC9oqAk8DXgf+CuUmnhaeAX8MmvD2L/VtaQC/LMp3+y6XY+e8Q1vTpigmuoQV8
ibwfhBIAS0ACoFy8LXCn0Wi0sC/DF3q9Hu12e0Pp37n/aBshMOzn4u+CZMAboii6HDicJInPj9fn
oiQKoYBV7OT8DPB54DeZDhHwDPAfsAYvJ7Bwhlz/1WHY6f9NE17Dfdhn2+P/cv+XgDb68klXVlba
/TDAShzHX0vT9GwYBihWAxTZrgFQMRnQX6/vBZhN0/QW4FCj0TiwuLi4iHUGlBegJAIRUAwF3AH8
OiYMqsqjwL/DyrueJk/86yDXf1Xwzn9++r8E8wBMkruR+790JADKpxgGOJtl2b3dbve8qgH8/rAc
gWFNhDwZcGZmhiiKvjuO44uSJDmUJIlKAitA303uLYKXMTf6k1gr33+PNQuqGndhxv8+TLCcQnH/
qjHs9P9Wdq/74zDc/a+BUCWjTb5k/LQ3MzPTTtN0DViJoujzYRhgqwZAxfv+c/j4VvtuPxnwgjRN
X99oNI6kabp/3759C8gLUDp9EdAlLw08iRn+u4F/iw0OqgLLwG8DvwHcz3DjL9d/NfCxvz706Rhw
04TX8DUsLKSBUCWjVsDVIF1eXu4sLCy0sK6A30jT9Llut3t0u6S+7VoDDyOcEDg3N0en0yFJklui
KPqLOI5PJUkStmqVMi+RLMvSKIq6/iP29+hinoH/hA3t+UlsIy+D+7CGRd/CBMpzmCBokrv9Zfyr
wbDT/5ux9r+T5AvYZ8TL/+T+LwkJgGrgYYD1NE1Xsyw7m2XZPb1e763tdpu5ubkNswEG/uMdGP/N
+gnEcewDgq7MsuzVjUbj2W63e3b//v1rzWazo/kA5ROIAO8Y6PkBPkL4a8APADczOSHwCDa06K/I
Db+PGj7X1U2fnUpRPP1fiNX+T5LT5PF/uf9LRgKgAmSZTYRrNpvtubm5ZpZlS41G41O9Xu+Wdrvd
mJub8+cB+Ql+2Ljg860GcC9At9ul0+m8LYqiL8Rx/Fyv1/MvaIK+oKUTiAAXAF1MBDSx09RJ4M+x
eO6bgct2aSn3AR/F+vo/17/Okid0nRvoIuNfKYqn/wuwuv9Jlv6Bxf6XyMv/5P4vEQmA6pACnTiO
W41GYwV4Isuy+3u93vVJkjwvY79d+MBfs9FoMDs7S6/XuzbLsusajcZz3W53qe8F6MoLUA1cKDIY
CghFwGlMCHwUeC028Ok7gOMjvG0KPAw8CHwWG+l7tn8tkxt+b+Uql381CU//h7HT/1smvIYU+AsG
u//J/V8iEgDVIQN6MzMz7Xa7vTozM3MW+Gyv17u+3W6zuLg4tKQPRssNKOQCxN1u9+3AN/peAFfp
8gJUBE8ajaIoxTZU7xzokwTPYgl4z2AjhQ8Cl2JT3q4l9wwcY2Pb19X+ayRYF79vAl/FXPsr/d+v
YILDXf1tcjeuhGI1CU//B7HT/yuAl0x4HfcDj5GLRvWFKBkJgIrQP92lq6ur6/Pz82vAUn9E8Ls6
nc6Rffv2+fO2e52h9zfDvQBxHLsX4EasOdBzSZIs79+/vyUvQPXo/y16fSHQw4xwCzPOS9hJz6/H
sTyBeczoz2Hf/Rg7CXo2tnsV3LOw3n/N4uVGv4vc/dNA8fR/FHhnCeu4CxOoXh0i93/JSABUixTo
NhqNVpqmK1EUnUrT9Mu9Xu9vtdtt79wHMJADMKxj4Pl4BYAwFyDudrs/FEXRvbOzs0vNZnMFeQEq
S9/dnvZDA2641zAjP0tu8Of7P89i3/sGg2XAYYJhr/9anf7VDn4+Z/SR4Z8Ghp3+X4N5gybJGaxs
Vdn/FUICoEJ4jHdtbW19bm6uCZztJwO+udPpxLOzszvqBng+iYDhcwIvwEuB72y1Wqcxxd4C5AWo
MIXQgHsEfN57o3Ab96+of/nfNA0uLwH1W7+y/tvpczAdhD3/j2Chnx8sYR2eNOrJxS4iRYlIAFSP
FOjGcbyWZdky8GiWZfd1Op0bFhYWNpz6YeuT/WbCYLPnuheg2Wy+E4v/niWo6ca+uKKi9A2zn+bp
Vw5E5AY/NPxho6csuE0LtzL404kLwAXysr/XAy+a8DoSbCS0Z//L/V8RJACqRwZ0Z2Zm1tvt9mqa
pmeAT/d6vRs2SwbczvAP+3mrqoJWq0WWZddhrsIzmNsu9AJIuU8JRUEgaoOLvTlgP3b6Pw68o4S1
fBXrG+HZ/x30eawEagVcMfobdrq6urreaDSaSZKcieP47izLHu10Ojtq87vTxkDDHltaWiJJzoX6
fwTbNC7ANpE5IFaLYCEqT8TGxL+3AleWsJaPkTeJUu1/hZAAqCYp1hmwlWXZcpqmp4E7er0e6+vr
A0l/RSGwk7K/4nOjKCKKItrtNuvrA9NmrwK+D9s8DmObySyDrmMhRLWIsNj/PHnTn8uA7y9hLQ8A
38BO/x5K9NCSKBkJgAriJV7NZnM9juMmsBTH8V1pmp7qdDobBEDw3xVfZ+D+Vs9NkoTl5eVhy3k7
cDm2iRzANpWGvABCVJZw3K8n/v0olgMwaT6BNajy5D/V/lcICYDq4smALWApSZJnsyy7q9fr0Wq1
zj1pmGE/H2HgPy8tLW1WLXCIPBRwBNtU5tBnR4gqUkz8O4p1g7y5hLU8gw3+CWv/VfpXIbSJVxT3
ArRarVaapivAmTiOP5EkyWqn0yGOY3/eyPkAa2trdDqdrZZzM7aJHMM2FR8XrM+PENVhs8S/d7Ox
6+Mk+BR2+j+XRIxO/5VCG3i1SYFOo9FYy7JsKUmSp4Ev9Ho92u32pqEAZyfGv9frsbKyst065oBb
gYswN6JCAUJUD+/4tw/L2TmOlf3dWMJazgCfYTD5T6f/iiEBUGH65Xa9VqvVyrJsJYqis1EU/b8k
SVrDBMDzSQY8e/bsjhoFYZvIzQyGAmbRZ0iIKuCJf97x7yiWu/OuktbzaeBZ8s5/XdRJtHJo864+
PiWwmWXZ2TRNnwQ+v5UXYCfGH6DZbNLtds9nLe8CXoBtLgoFCFEN3Pi76/8CzFt3K3BxCetZYjD5
T6V/FUUbd/XJgN76+nqr3xnwTBRFHyp6AYb+h0NCA/5zt9tldXX1fNdyGPhJbFPxqgD1BhCiXLzm
P3T9v5JyEv8APoklAKrxT8WRAKg43uMdaPdLAs+kafoEcNdmXoDNDH/oIVheXt6p67/IdwFvwE4Y
RwgaBD2vf6AQYhSKw36OYTX/P4V5BSbNaTaW/qnvf0XRpj0duBdgLU3TpX5joA+nabo8rC/AdmWA
z8P1HxIDPw5cgW02B1EoQIiJ0/e6ecOf0PX/Y9j3sww+DjzNxsY/ooJow54CAi9Ap9ForDUajTPY
jPc73AsQPHfgftH4d7tdms3mqEs6BvwdLBRwFFUFCFEGYdb/Eez7+ArgLSWt5xnM/e+lfx77lwCo
KBIA00MGdPtegGXgdBRFt6Vpeqbb7e6oJHCbhj/ny03A95CXBnooQCJAiF2m722bwdpzH8Li/lcC
P005Nf8Afw6cYHCCqIx/hZEAmBJ8SBDQbjQaTeBMlmVPAx/qdrub5gL4z2Cu/15vbNN8Y8wLcC22
+fisgBk0K0CIXaPg+veSv0uwBN2yXP/fwur+dfqfIiQApgvvDriWpulymqanoij6TJZlD4Qx/WHG
P0mScbj+ixwGfh64FHUJFGLXCYx/WPJ3MeaNe0NJy0qAPwFOMXj6V91/xdEmPUUEXoDOzMxMM03T
M0mSnAQ+1Ov10q28ACNk/W/HS7FBI5dgoYCDKB9AiN2iGPe/CPPC/QTl7edfAu4FnmPw9K+6/4oj
ATBleHfAtbW1VqPRWMG+dPekaXp3p9MhTdMBEQDQarW26/U/Km/H6o4vYbA/gESAEGOiEPf3ev/L
MC/coZKW1QI+QH76965/cv1PARIA04l7AdayLDubZdnJKIo+kCRJq1gWmCTJ82n4c77MAb8IvJC8
P4BaBQsxJvpCOqz3P4qF3t4DXFfi0m4HHsJi/5r4N2Voc55CvCyw2Wy2Go3GKvbleyjLsk92u92B
RL+VlRXSdCJi/DjwS1j/8YGkQOUDCPH8CYz/POZdc+N/C/C9JS7tGeDD6PQ/tWhjnl5SrCywmWXZ
WeBUFEUfTpLkGc8FaLfbu+36L3IDVhngSYFqEiTECAxJ+rsQS/p7Odbtr8zv1QcwEXAaS/zT6X/K
0KY8pYQtgmdmZlaB59I0fQr4416vl3Y6nd3I+t8Jb8MakYQiQEmBQpwn/e/LsKS/q4D3YoKgLL4E
fI584p+3/JXxnyIkAKabDEsIXMuybAn7Mn4xy7K/9oTAEoixjOSXY0mB6hQoxPMjNP6HMeN/OZZv
c1mJ61oG/hdwko1lfxIAU4QEwBQTtgienZ31UMCJOI7f32q1Tpe4tP3AP8TKk7w8cD8SAULsiE06
/V2Ouf1fVeLSAD4IPIzF/lX2N8VIAEw5LgJWV1fXg7LAR7Ms+9OSl3Yx8CvA1eTjg89VBkgECDGc
wPgvMGj8vx8LsZXJvcCnMG+jEv+mHAmAvUEKdDwhsNVqnQD+Cvhyyet6EeYJuILB8sA5JAKE2EDB
+Iflfm/EEmzLpAX8IdbvX2V/ewAJgD1AOCdgdna2iX05TwB/hLnoyuRGzG0ZioBF1CNAiAGG9Pg/
hsX6Xw38AvadKZOPYD3/T2HjftXvf8qZKXsBdWeMh+AU6DWbzTXs73oKeBAr1fn5cb3J8+RtmCj5
IHZaSOmfGPr/fvUMF3Vns1r/64FfptyMfzDD/2Es8e8M5vrXtL8pRwJgb5Fi8bg17Eu6iMXrXga8
rsR1AbwLW9dtmPF3l6Hf10Yi6kpo/EO3/3dgeTQXlrc0wFz9v43V/D+HXP97BgmAvcW53gDYl/Q5
TAT8ARaPP17e0mhgoYB14JPkXgDfQJRIJOpI8eR/IWb8X4wZ/7LG+4a8H3gAS/xbwnIBusj4Tz2K
we49Uiwut47F/08BjwG/R/mu9lngZ7GEJs8J8JbBs5hIUGKgqAvD3P6XYcb/n2CivWw+B3wayyk6
Q17zfy6MJ6YXeQD2Jin2JfVQwDxwN/Ax4B0lrgssu/m92OZxZ/B4RH6y0OYi9joxgwl/fvJ/EfCP
gZeUt7RznAD+J7nrfwW5/vcUEgB7k3NVAZhiP42dsj+AbSzXlrc06K/lH2DrvKv/WHjylwgQexk3
/gsMJvxdjbn9X1raynK6mNfwMfJ2v8r632MoBLB3CUMBK1go4CngdzBRUDaLWI+Am4ErGT5GWOEA
sdcI6/wPkJf6vRj459hArSrwUcxreIK84Y+y/vcYEgB7m4y8KuAspuTvA36f8vMBIPcEvBUTARdj
ImA//WZBSASIvcOwDn+XAdcAvwpcV97SBvgKg5P+POtfXrk9hkIAe5tzswLIQwFzwF9i7say8wHA
1vML/duPY5ukG/4IDRkR049P9Qs7/B0jL/X7p9iEvyrwDPA+zFt4CvMeyvW/R5EA2PuEpYErmHt9
HvgT7NR9Y3lLO8cs8DPY5vgRchEQk2cda9iImEbCkb6LDHb4ux7L9i9zsl9IC/gt4FHykj/v9a/v
3h5EAqAeFEsDZ7ET9/uAf4O53sumgfU63wf8GfbZbGCb52r/Od5FUIhpwFv7uvE/TG78vxP4R5Tb
myMkxUb8foXc9d9ECbl7GgmA+hB2CfRNaR4TAb+KbVBlEwM/im2Sv8dGERCOHdWGJKqMG/85LKfl
MHnM/41Y2OtAaavbyCf7l7r91QgJgPpQzAdwEXAPpvx/juokhb4Jq4v+TewzGgqBdXQqEdUmrPHf
jyW2XoSN9H0H8B7KH+wTch+2ByjuXzMkAOpFsVXwDLYRfQI7nfxweUvbwA3AvwZ+A1ujC4FlLFap
5EBRNcJkv7C1rxv/dwNvpzpCG+AJ7Dv2JIOtfmX8a4AEQP0o9gdwEfAB4BLKHxoUcgXwL7Ewxd2Y
O3WGPDnJXZTaqETZhPF+z/Q/iuXXXIlN5KzSdwtMTP868DCD9f6ay1ETJADqiYuAFrm7cgb471is
sir1yGAnqH+BVS18DBMBs9hm5XFKP63IGyDKwL9Dc1gS6yHM+F+CZfr/ElZ2WyXWgf+Guf/Den95
1mpElGX6O+8m/Xn3VSRMUvJ2pJdjbYL/NdWYQlbkTmyy4ePYXHJPVvIZAtq4xCRxl7+39Q2T/S7F
kv3+HiYIqkSCjfe9HWv1exLzqlU+7i97NV4kAGpMZOokHEhyDDP8LwP+FeXPIR/GQ1hI4H7yjOVl
8lalqhIQk6Do8vd4v2f6vxv4/v5zqsb7gQ9ixv8Z8pBaL8uyyhp/MX4kAGpM3zvhI0k9bnkcEwGv
xVzv+8ta3xYsYVPKPgs8jWUuhyEBVQmI3cI7VM6Qu/zDeP9VwC9SjQZbw7gd+B/kxv8MQdxf9qBe
SADUmCA84W7MRcxdeREmAr4H+GVMHFSNBPgMdpp5AnNjnsESG8MqAZ1oxLjwU78LZi/x83j/64Cf
xjxpVeSzwH/FjP/T2PfFm/0kIBd73VASoIDcSK6TxzVjLOY+iw3sqVLdMthG/BZsitrvA1/DTmPP
YR6CJnmCoHIDxCiEsf458pa+F5DH+38CuIVquvwBvoSFzp5AGf+ijzwANWZIgmLYs/ww5gm4Engb
VsZUNRHgrAMfAm7D3JqnsNONJwiG3gB94MX5EFbJhIl+Xt9/PdZE6+qS1rcTvgL8GvnJf9OMf9mD
eiEPgAjxdsGQxzpjrEXoPOberOIJZwHrrnYDlhvwELZRnyZPcPIOggoLiJ1QbOqzD0v0uwBz8V+M
Jfn9MNUMkTn3Yo1+HkflfqKAPAA1ZosSxXCAyRHyZiY/hLk6q9TJrEgL+Cg2VfAEg94Abx6ksIDY
jDDJz78DHuv3U//LscFVLyppjTvlW8B/BB7ETv7b9viXPagXEgA1ZgsBEI4w3UcuAq4A/jZwK9UW
AWCxzvdjHQSfxTa/s1hugMICYhie++Klfd7Ux2P9V2LlfW+gmp6wkAcwt/8D5MZ/hW0G/Mge1AsJ
gBqzTZOirUTAOzFPQNU3wRT4IiYEHsG8AaexvgGeJKiwgCi6+z3J7wjm7r8ISzj9YSz+X3W+iRn/
h9h48vc+GUORPagXEgA1ZgddCoeJAC8R/D6sy1lVEwNDmsCfY0mCJxnsGxCGBVIkBOpEMbs/TPI7
ip36Xwb8ONYhcxr4Ktbf/xE2jvbd0viDBEDdkACoMTtsUzxMBHizoDcDfx/bPKeBR4E/xrKinyVP
EgzDAuFcAX059iah4Q/d/V7adxT7fN8K3MR0iFywUr/fJG/y4wl/OzL+IAFQNyQAasx5zCkoigDv
d3458CbgvZjbdBpIgc8Df4plRntugLcTXicXAh4r1ZdkbxC6+mcZdPd7ad9x4GbgRzAxMC3cifX3
H5btvyPjDxIAdUMCoMac56CiUAR4nwDve/56rGPggTEvcTdZxtqifpw8N2AJS5RaY9AjICEw3RQN
/wL2GT6AJfldiJ36b8AMf5WmYe6ET2HNsB7HKl+86mXLhL9hyB7UCwmAGvM8JhWGG6mLgGOYCPhO
4J9RzQFCW3EKOz19nHzzXCL3CLgQCKcN6kszHXhWfxjj9xO/Z/dfiH12v5fq9u/fjBT4v8CfMdjh
zxNcz7vUVfagXkgA1JgRRhV7ZzTfTI9h7VCvA36FandF24xl4A7gY+RDUlwINLHQQNhDQOWD1SRs
YOUDezYz/K8BfoDpSfAL6WBNr24HniQf6dtkhCY/sgf1QgKgxowgAGCwXvoA+UCUFwK/BLxy1PWV
RBMbmnIbdqo6g52qVhhMFgzLB1U5UD7hDIvQ8HsHv8Pkg3u+G+vid3UZCx0DS8BvAX8NPIUltHrH
y9BTdd7IHtQLCYAaM6IAgMHaaZ+H7r0CfgqbITCtrGMb7EewrGoXAqvkQsD7CChPoBzC075n9BcN
/yFyw/9m4K1YyGpaeQLL9L+XfBS2h6tGHoMte1AvJABqzBgEAOSb7zxWQ30B1ivgcqxxyruofsOg
rehg3QRvw1qqniVPFgyFQNErIDGwe4RGP8zoH2b4j2FT+m7BxOk08y3gPwMPk9f4r5DPuRg5LCV7
UC8kAGrMmAQA5HPSfWhKWCHwJuBnsQ15mkmAe4C/xJqtDBMCnicQegUkBsZDaPTD076X8u0nN/yH
sc/eLVgd/zSV823GHcAfYN6okww2+Okyps+Y7EG9kACoMWMUAJCLAO8VcAg7fV2CjUx9L9Mbcy3y
FNZi+A7MDetCwDsLFr0CEgPnj384hxn90M3vDXz8xP9q4I3YZ25aGvhsRQf431iVylOY8Q8z/b1x
1ViQPagXEgA1ZswCADb2CvDkQJ8m+LPYIJW9QgeLxd4J/A0bhYA3FtpMDPjGrS+hUYzpu9EPY/uL
5G5+T+67HIvvvwYTnXuFZ7Fkv3swl3+Y7NcBkizLlIAqnjcSADVmFwQAbBys4jPUPSTwDiwvYFra
B++UJUwEfAH4BpaY5QmD7hUIQwShGCh6B+rypQwNfhjT9yz+0MUfuvkPYmWnr8dq919M9adTni9f
B97HYLx/Gfscncv01/4tRkECoMbskgBwwuRAnyHgIYHXYKWC09Y0aKecxvIEvohNZvNeAi4GXAiE
YmCYd2AvhQwitjb4nsznJ32/9pMb/ouB1wGvAK5h7xl9sL/5x7AJlk8z2NlvQ7Kf9m8xChIANWaX
BQDkeQFz2AnO265ejPUL+Hmmt1/ATjkD3Id5Be5hcAph6BUohgn8Cj0ERS9BFb+8UXAbFy5364cG
3zP4/XIXv7v5r8SM/kuAFzHdFSXbcQZr7nMXeYnflvF+7d9iFCQAaswEBAAM5gV40yAPCVyKjRW+
tf+7vU4Xc+k+gJUWPkqeK+BiwIcR+dUjd/luJgiGCQP/Yo/zCx4a92FXzMYYfvGUP8fwk74b/gsx
t/51/WuveomK3AP8HjbG9wSDLn/v7Lch3q/9W4yCBECNmZAAgNxAeF7Afswb4N0Drwd+Djvh1Yll
bIDLI1io4JvYhr+ZZyAMFRTFwGaiIKwND7/sW33xoyH3h7nw3cNTPOGH9flhEp/H9N3o7yNvIf1i
7LR/5Rbr2ousAx/Asvw90a/o8t+0s5/2bzEKEgA1ZoICwAk7tnlvdh/BeinwHqx74F52825FFxME
fj2M1X0XxUAYKnADEXoIthIEsLUQiIbcDovdF136Rde+n/Tdtb+ACb4XAlf1ryuxLP668hDwu1iI
yE/9YT9/d/lvuklr/xajIAFQY0oQADAYEnBvgLdqvQSr4/4Zpr9r27hIMOPwFBYXfgKrBX+S4Z6B
Yqhgq/yBYh5BaOzDn7eK44elem74vTTvCqzy4+L+Ne3NoMZFF/gE8Kfkp/7TWAlpmOW/bYmf9m8x
ChIANaYkAeCEVQKhN+AizHDcCtzM3mjmslucxk6LJ7BwwhL5KTLBQgvFoUVF4x8amWHx/DCmH2N/
n8P9n6/GRMBl5F34Lqa+Hpyd8BDwR1iVSPHU71UhO27pq/1bjIIEQI0pWQDAYPdAL/k6TN486EZs
qNDVJa1vr9DC4spFUuwE6rgRLzLH3mqwUwbr2GCpj5Cf+n3K5LnGPpxnVz/t32IUJABqTAUEAAwm
CM6Rt3a9gLxvwA9iDYTqUCkg9h5fx8r7vo0Zfj/1e0+IcJrkeaH9W4yCBECNqYgAcEJvgOcGHCYP
C1wL/F3ghrIWKMR5sgT8GfBpLG/D6/pXycv7eozQ00H7txiFmbIXIESfjMEM9h62Qbaw+OgKlgD3
JuDHsMoBIapIF/gsVt73GGb4T2N5GmvkTX2e16lfiHEhD0CNqZgHIMS9Ad43wKcLXoDlB1yKhQW+
F0sgFKIqfBUz/PeTZ/d7Nz9v8uSGX+N7RalIANSYCgsAyHMDvJWwJwm6EDiG1ZLfirWKVea5KJMn
gP+DzX84hcX5Q3d/2Mp3bJuu9m8xCgoBiKpSLFXzkMA6dppaxWKsT2OdBG8FXlrKSkWdWQJuA27H
Tvwe5/fs/rC0T6N7RaWQB6DGVNwDUMQb0YRhAZ8H790Evwt4J/VrKSwmTxNL7vso1pTJT/we5x+7
u38Y2r/FKEgA1JgpEwAwGBbwagEvG3QhcAx4LSYEripnmWIP0wI+g9XzP82g4W+Sd/Ibu7t/GNq/
xShIANSYKRQATtidzpsIeTfBI5gQOAq8HusfULcBM2L8tIC/wgz/k+TJfV7PH5b1TSy7X/u3GAUJ
gBozxQLACYWAJwq6EHCPwFHgjVjFgDwC4nxpAp/DDP8TDDf8YYLfROP82r/FKEgA1Jg9IAAcFwI+
ic5HzR4krxq4EHgV8BbgZf3nC7EZzwJ3YkN7nsFaKS8x6Or3YUzhjIWJov1bjIIEQI3ZQwLACYWA
z573ZMFDWHjgAuAa4AewyYNzpaxUVJVHsOS+O7HT/hnM6K8waPhDV39pm6j2bzEKEgA1Zg8KAGeY
R2AR6yPgeQJHsJG1bwNuot5z6etOgvXr/yTwFXI3/zJWbhpm9VfC8Dvav8UoSADUmD0sAJxQCHj5
4CKD4QH3CtwEvAH4DhQeqAungC8AfwE8Th7bXyFv4BMa/tJc/Zuh/VuMggRAjamBAHDCZEEXAu4V
OECeNHgYqxh4C/AaLG9A7C262Gn/TuDL5EbfT/vesrfN4IjeSjbx0f4tRkECoMbUSAA4YR+BME/A
vQKhGDiC5Qi8CbgO5QpMO08Ad2M1/E+z0eh71z7v3OeGv9IbpPZvMQoSADWmhgLAcSEQ9hKYJ08a
3E8+d+AQ1lzodVinwWv6zxfV5xnstH8Hltzn7n1P6PPYvp/2w1K+qdgYtX+LUZAAqDE1FgAhxfCA
iwEvJQw9AweBizAx8CrgWjSEqGo8ZGMKMQAABXpJREFUC3wNuAv4NnkGf3jS99p9L+MLT/tTtSFq
/xajIAFQYyQABhjmFfAKAvcMuHfAywovwnIFXgG8sP87MXkeAh7EEvq+RX7K9wz+YUZ/6k77w9D+
LUZBAqDGSABsSpgr4GJgjsFug2GowD0E12Ni4MWo6+Busoyd7r8O3IOd+lfZeMofZvSnIra/U7R/
i1GQAKgxEgA7wr0CYTlhKAZcEHifAQ8ZHMPEwEux6YTHJr3wPUQLK9N7GEvk+zaDxj40+F62Fybz
Ta2Lfzu0f4tRkACoMRIA580wMVD0DoSiIAwbHMfEwDVYqeGVKJlwM05jBv8B4JuY4V8j78TnyXtu
8MNT/p43+iHav8UoSADUGAmAkQjFQBgq8MurCjyHYJFBb8E+LGTwYuCy/nUx9UsqPA2cwDL2Hwbu
w1z6xVO9G3q/7bLRtR926KvFxqb9W4yCBECNkQAYGxEb8wZCD0HoJZhnUBwUrxcAV2Ntii/GEg2P
T+xfsns0sc57J7Bxug/3rxU2Gni/7yd7N/RequdXLU75W6H9W4yCBECNkQDYNcKKgrDEMLzmGBQG
oUAoioU54BKsZfELyVsYH8fCC1XIL1jHTvOnMaN+AjvJn8Fi9l1yox4a9tB9Hxp7P9mHLv2iwa/9
5qX9W4yCBECNkQCYGEVBEIqCojiYLVzFx+YKj/n9BuYxONS/f1X/ffazeUvjQ1jCYshTmzy3ixn1
FDPyS5hBfoTBk3mXjQZ8q6vHxlN9eGXsoaz9caP9W4yCBECNkQAoDf8fHzM8l6B4DRMKxd9tdoWi
Iypc/piTFa60cN+vopFOGDTeoTEfZtiLP4evrdP9eaD9W4zCTNkLEKKG+K6dFB4vGudQIITGvDHk
saJ3ofiYv27xfQhui8Z3mCAIRUC6xWOb3c8Kt+H/DyHEBJEAEKI6hMY3FAehod7qJB/eLz5WfB0Y
FAH+/pvdFr0CRe/AsPvFSwhRISQAhKg+oSHebCztZsY9GvKc4v3N3m/Y+/tt0VMghJgylAMghBBC
1JB4+6cIIYQQYq8hASCEEELUEAkAIYQQooZIAAghhBA1RAJACCGEqCESAEIIIUQNkQAQQgghaogE
gBBCCFFDJACEEEKIGiIBIIQQQtQQCQAhhBCihkgACCGEEDVEAkAIIYSoIRIAQgghRA2RABBCCCFq
iASAEEIIUUMkAIQQQogaIgEghBBC1BAJACGEEKKGSAAIIYQQNUQCQAghhKghEgBCCCFEDZEAEEII
IWqIBIAQQghRQyQAhBBCiBoiASCEEELUEAkAIYQQooZIAAghhBA1RAJACCGEqCESAEIIIUQNkQAQ
QgghaogEgBBCCFFDJACEEEKIGiIBIIQQQtQQCQAhhBCihkgACCGEEDVEAkAIIYSoIRIAQgghRA2R
ABBCCCFqiASAEEIIUUMkAIQQQogaIgEghBBC1BAJACGEEKKGSAAIIYQQNUQCQAghhKghEgBCCCFE
DZEAEEIIIWqIBIAQQghRQyQAhBBCiBoiASCEEELUEAkAIYQQooZIAAghhBA1RAJACCGEqCESAEII
IUQNkQAQQgghaogEgBBCCFFDJACEEEKIGiIBIIQQQtQQCQAhhBCihkgACCGEEDVEAkAIIYSoIRIA
QgghRA2RABBCCCFqiASAEEIIUUMkAIQQQogaIgEghBBC1BAJACGEEKKGSAAIIYQQNUQCQAghhKgh
EgBCCCFEDZEAEEIIIWqIBIAQQghRQyQAhBBCiBoiASCEEELUEAkAIYQQooZIAAghhBA1RAJACCGE
qCESAEIIIUQNkQAQQgghaogEgBBCCFFDJACEEEKIGiIBIIQQQtQQCQAhhBCihkgACCGEEDVEAkAI
IYSoIf8fL4wfsLphpR0AAAAASUVORK5CYII=
"
height="43.714287"
width="43.714287" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 69 KiB

View file

@ -25,16 +25,7 @@
id="metadata11"><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><defs
id="defs9"><filter
inkscape:collect="always"
id="filter3785"
x="-0.13714286"
width="1.2742857"
y="-0.96000003"
height="2.9200001"><feGaussianBlur
inkscape:collect="always"
stdDeviation="1.7378048"
id="feGaussianBlur3787" /></filter><radialGradient
id="defs9"><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2305"
id="radialGradient2311"
@ -45,9 +36,8 @@
r="14"
gradientTransform="matrix(1,0,0,0.267857,0,27.63839)"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
id="linearGradient2305"><stop
style="stop-color:#000000;stop-opacity:1;"
style="stop-color:#595959;stop-opacity:1;"
offset="0"
id="stop2307" /><stop
style="stop-color:#000000;stop-opacity:0;"
@ -76,7 +66,7 @@
id="namedview7"
showgrid="false"
inkscape:zoom="6.675088"
inkscape:cx="15.760113"
inkscape:cx="-10.606581"
inkscape:cy="22.890176"
inkscape:window-x="0"
inkscape:window-y="27"
@ -91,7 +81,8 @@
sodipodi:rx="14"
sodipodi:ry="3.75"
d="m 8,37.75 a 14,3.75 0 1 1 -28,0 14,3.75 0 1 1 28,0 z"
transform="matrix(1.535714,0,0,1.51296,29.034195,-15.256481)" /><g
transform="matrix(1.2681948,0,0,1.0735151,26.979648,4.3812391)" />
<g
id="g3"
style="fill:#555753"
transform="matrix(0.56980085,-0.08926081,0.08926081,0.56980085,-7.4328135,-0.07503521)">
@ -100,5 +91,4 @@
id="path5"
style="fill:#555753"
inkscape:connector-curvature="0" />
</g>
</svg>
</g></svg>

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -3,10 +3,21 @@ apt-get install postfix
# http://www.postfix.org/VIRTUAL_README.html#virtual_mailbox
# https://help.ubuntu.com/community/PostfixVirtualMailBoxClamSmtpHowto
# http://wiki2.dovecot.org/HowTo/VirtualUserFlatFilesPostfix
# http://www.mailscanner.info/ubuntu.html
root@web:~# apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-sieve
apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-sieve
cat > /etc/apt/sources.list.d/mailscanner.list << 'EOF'
deb http://apt.baruwa.org/debian wheezy main
deb-src http://apt.baruwa.org/debian wheezy main
EOF
wget -O - http://apt.baruwa.org/baruwa-apt-keys.gpg | apt-key add -
apt-get update
apt-get install mailscanner