Commit e84c01cf by Őry Máté

Merge branch 'release-13.04.1' into releases

Conflicts:
	one/locale/hu/LC_MESSAGES/django.po
	one/locale/hu/LC_MESSAGES/djangojs.po
	school/locale/hu/LC_MESSAGES/django.po
parents f6fdeffe 3c786fcb
......@@ -14,7 +14,15 @@
<a id="master"></a>
<section>
<h3 id="release-13.03.2"><a href="#13.03.2">13.03.2 (2013. március 21.)</a></h3>
<h3 id="release-13.04.1"><a href="#release-13.04.1">13.04.1 (2013. április 4.)</a></h3>
<ul>
<li>Hálózati beállítások új felületen.</li>
<li>Rövidebb IPv6-os gépnév.</li>
<li>Hibajavítások.</li>
</ul>
</section>
<section>
<h3 id="release-13.03.2"><a href="#release-13.03.2">13.03.2 (2013. március 21.)</a></h3>
<ul>
<li>Súgó.</li>
<li>Változáslista.</li>
......@@ -26,7 +34,7 @@
</section>
<section>
<h3 id="release-13.03.1"><a href="#13.03.1">13.03.1 (2013. március 7.)</a></h3>
<h3 id="release-13.03.1"><a href="#release-13.03.1">13.03.1 (2013. március 7.)</a></h3>
<ul>
<li>Határidős felfüggesztés élesítve.</li>
<li>Csatlakozási adatoknál IP cím helyett DNS név jelenik meg.</li>
......@@ -50,7 +58,7 @@
</section>
<section>
<h3 id="release-13.02.2"><a href="#13.02.2">13.02.2 (2013. február 21.)</a></h3>
<h3 id="release-13.02.2"><a href="#release-13.02.2">13.02.2 (2013. február 21.)</a></h3>
<ul>
<li>Felhasználói kvóták megvalósítása.</li>
<li>Publikus kulcsok kezelése.</li>
......
......@@ -37,7 +37,7 @@ urlpatterns = patterns('',
url(r'^vm/renew/(?P<which>(suspend|delete))/(?P<iid>\d+)/$',
'one.views.vm_renew', ),
url(r'^vm/port_add/(?P<iid>\d+)/$', 'one.views.vm_port_add', ),
url(r'^vm/port_del/(?P<iid>\d+)/(?P<proto>tcp|udp)/(?P<public>\d+)/$',
url(r'^vm/port_del/(?P<iid>\d+)/(?P<proto>tcp|udp)/(?P<private>\d+)/$',
'one.views.vm_port_del', ),
url(r'^ajax/shareEdit/(?P<id>\d+)/$', 'one.views.ajax_share_edit_wizard',
name='ajax_share_edit_wizard'),
......
......@@ -10,6 +10,7 @@ from django.core.validators import MinValueValidator, MaxValueValidator
from cloud.settings import firewall_settings as settings
from django.db.models.signals import post_save
import re
import random
class Rule(models.Model):
CHOICES_type = (('host', 'host'), ('firewall', 'firewall'),
......@@ -174,15 +175,30 @@ class Host(models.Model):
def enable_net(self):
self.groups.add(Group.objects.get(name="netezhet"))
def add_port(self, proto, public, private = 0):
def add_port(self, proto, public=None, private=None):
proto = "tcp" if proto == "tcp" else "udp"
if self.shared_ip:
if public < 1024:
raise ValidationError(_("Only ports above 1024 can be used."))
for host in Host.objects.filter(pub_ipv4=self.pub_ipv4):
if host.rules.filter(nat=True, proto=proto, dport=public):
used_ports = Rule.objects.filter(host__pub_ipv4=self.pub_ipv4,
nat=True, proto=proto).values_list('dport', flat=True)
if public is None:
public = random.randint(1024, 21000)
if public in used_ports:
for i in range(1024, 21000) + range(24000, 65535):
if i not in used_ports:
public = i
break
else:
raise ValidationError(_("Port %s %s is already in use.") %
(proto, public))
else:
if public < 1024:
raise ValidationError(_("Only ports above 1024 can be used."))
if public in used_ports:
raise ValidationError(_("Port %s %s is already in use.") %
(proto, public))
rule = Rule(direction='1', owner=self.owner, dport=public,
proto=proto, nat=True, accept=True, r_type="host",
nat_dport=private, host=self, foreign_network=VlanGroup.
......@@ -199,15 +215,58 @@ class Host(models.Model):
rule.full_clean()
rule.save()
def del_port(self, proto, public):
self.rules.filter(owner=self.owner, proto=proto, host=self,
dport=public).delete()
def del_port(self, proto, private):
if self.shared_ip:
self.rules.filter(owner=self.owner, proto=proto, host=self,
nat_dport=private).delete()
else:
self.rules.filter(owner=self.owner, proto=proto, host=self,
dport=private).delete()
def get_hostname(self, proto):
try:
if proto == 'ipv6':
res = self.record_set.filter(type='AAAA')
elif proto == 'ipv4':
if self.shared_ip:
res = Record.objects.filter(type='A',
address=self.pub_ipv4)
else:
res = self.record_set.filter(type='A')
return unicode(res[0].get_data()['name'])
except:
raise
if self.shared_ip:
return self.pub_ipv4
else:
return self.ipv4
def list_ports(self):
return [{'proto': rule.proto,
'public': rule.dport,
'private': rule.nat_dport} for rule in
self.rules.filter(owner=self.owner)]
retval = []
for rule in self.rules.filter(owner=self.owner):
private = rule.nat_dport if self.shared_ip else rule.dport
forward = {
'proto': rule.proto,
'private': private,
}
if self.shared_ip:
public4 = rule.dport
public6 = rule.nat_dport
else:
public4 = public6 = rule.dport
if True: # ipv4
forward['ipv4'] = {
'host': self.get_hostname(proto='ipv4'),
'port': public4,
}
if self.ipv6: # ipv6
forward['ipv6'] = {
'host': self.get_hostname(proto='ipv6'),
'port': public6,
}
retval.append(forward)
return retval
def get_fqdn(self):
return self.hostname + u'.' + unicode(self.vlan.domain)
......
description "IK Cloud Django Development Server"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 30 30
exec sudo -u cloud /opt/webadmin/cloud/manage.py celery worker --loglevel=info -c 1 -Q local
......@@ -183,6 +183,7 @@ class Browser:
def load_committed_cb(self,web_view, frame):
uri = frame.get_uri()
print uri
try:
self.webview.execute_script('document.getElementsByTagName("a")[0].target="";')
except:
......@@ -193,7 +194,7 @@ class Browser:
### JS
self.post_key(self.public_key_b64)
### Parse values and do mounting ###
elif uri.startswith("https://cloud.ik.bme.hu/?"):
elif uri.startswith("https://cloud.ik.bme.hu/home/?"):
if self.mounted != True:
try:
uri, params = uri.split('?', 1)
......
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: cairo 1.10.2 (http://cairographics.org)
%%CreationDate: Sun Mar 24 10:50:26 2013
%%Pages: 1
%%BoundingBox: -167 0 256 305
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog
/cairo_eps_state save def
/dict_count countdictstack def
/op_count count 1 sub def
userdict begin
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
%!FontType1-1.1 f-0-0 1.0
11 dict begin
/FontName /f-0-0 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/FontBBox {0 -217 732 722 } readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 1 /uni004F put
dup 2 /uni0070 put
dup 3 /uni0065 put
dup 4 /uni006E put
dup 5 /uni0020 put
dup 6 /uni0076 put
dup 7 /uni0053 put
dup 8 /uni0077 put
dup 9 /uni0069 put
dup 10 /uni0074 put
dup 11 /uni0063 put
dup 12 /uni0068 put
dup 13 /uni0046 put
dup 14 /uni0072 put
dup 15 /uni0061 put
dup 16 /uni006C put
dup 17 /uni0066 put
dup 18 /uni0032 put
dup 19 /uni004E put
dup 20 /uni006F put
dup 21 /uni006B put
dup 22 /uni0073 put
dup 23 /uni0048 put
dup 24 /uni0064 put
readonly def
currentdict end
currentfile eexec
f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467
b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de
800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f
2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b
9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799
69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5
8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251caf37e69b8d0603
a7433caedec4b6cd5c2839290152acb74dd5effb7d57b8850958b3abdf0a4d39e16a6b07c2c1e8
3381600e1f450b8272b0341eeb3072bb916526a7cb9a82abadbfe1c8f6a2b6afc2b84a8807b1ec
be55674c4eb5ce1324eebb409d9dabf983d71890f87b46280def494d599f306285593d6f768825
516d58b0d49a558bd33e8b24d9be241990e9c144c9a3e1296e9d9bd12eefee68bcccf0a17ee096
c436f63bd52123610e4560a936ca992843e10f75614f4e1e7c56be71b5e61019eafb4911733e4c
15336b44c25b12d1203b1b01827836e41b036e77bdeae781592e15b8f444475a5db04d92071727
f8358495d966b9ad377d2c47fd7e38865b6a232d6645dbf4ae2afeafec93de7775a48590137600
946f400ef2e98905997574bd6b5fe9e978d07336dcc8125631c3077a2428beb3faed7e1f69cb0e
cd451b457d25db3f7464c91ddac3ae96263a99f242a74ccf177c75f7fcba02c3146ebe9c035d6c
a4f6d12d36999ef48f6f457eb2bb6bea3f7c136dd856ddae1f266404800225f94ab887145c1ed0
75c431a7f2afb7011ae7d14b7d065010f5285f709edd4756266c4a4c2d2021ed9831ab6a610494
66f0b71eb4d21d5fe0fc8e8be78c472bf63dade09a6893bf0c7043c25cf62a8bdcfe3474ba73a1
fec618e3a851e650eec0421d08d6d1877d475d4a86c4acc988682e2ca02a54d2f2ced6e6531e44
d4f21c3916c08b047148e29d4534683653986dc409aea6e5a14707b40d961e242102222ed4423e
da32801d9b53ffc07a5d201d20a13b3bed67fa06f94d65bbf73a003f145f814fcd6ad59de01d5e
ba550c9cb8ec4f065206147338ad76c823728cdaa15ef08ae5bcc366940ed136f05cd25ab367ea
625b2170a2c46db93c135e52833b6e87e75e5e3890d750d667d6f6c50cc14eecb3b027f1e13260
3064da993b9b536619903922b1a4d25e1764fdafa995e234eac44173eac82b0c9f3f7d9f52daa2
6ab437151991a7bc0575736182f436e51d9e2d29790366c834a8bb25d9b9ccd7dfc88b6134feca
de00289b1f7f27d9626a9436d40c7becbe1c6ebb15168d2211747771818fd33bd7c58724f475af
44360d9da68d71e044de4a4dbcd7d4784ce230b355797881b04050801d1946b4b5fb8564fccaaa
7ccbdd7de71a00a21c60b2a6e25547659b178870a5b69f805733763d3b30b95f41baa094076d6f
6cd70cf6dc484348f03297059f02a3c664f7b071d8134dc55dd2df24c017c5d1b896f8ea6ff7b6
c383e55e783ac761d72a4b16916e28a582579b1b36a2dcb49d9e302beb4e4f6450045963813c22
3bf4ef981dabc4bd35b3faa1fc1dc2e70d0a8a4b9191195d3f744876b929c6443e0e717e6d6c78
183094715c8fa012364d8d8a913c13762caa2b86e1677c63d4f4d62e06a241eb603259230c57d1
14aa231320b310e524368c1c7b950be85fee831e0d6956535c2a7c6441b5554547b615d13d1581
6f908ac3263128d401a89e2f4b80dc0a6b3945b11da17111c77618e691b8ca7de529e774349ed2
15a6f5011cc6b76cf7e35b8b94428cd60b38cd24ae388399c100b6429e998868a555e993727acb
39c8d510a2c14f9200b1df8d0f815675ea3d5ae7e307d071bb82eb723381a83d5832a5fa4e8917
fa3bb3afedf147f67d02609313345874cad1b0d20721e01641eec234059356a928ee22d2c585d5
a8dfed763c38d466d98c593d7f1ca8d7e4598397bf177a3978ab707f63ffaf974e7d185c065da8
67da19058eb194dc04feffef536b49b72b2c5c8ec1b56567339b6a543f87fa28c6f6dca0f08ec8
4a194a7517df0437225e8ea1fc5c726b04ab799ce749d5234f8bc700d8f5ee8c3c52264db504be
e28e5e370ba07600f0b48c16eeba51f12e15bfeb9a39109b0e2510545060c7d71f4c8983ade846
7481d16e8af6e1a7935bfcb519f3bb5848eece4648f1a55765b2817cd8b145206921b84cfb6624
24e8917e1f908eb4fb65c7da82872bb30d954d3bbec71c3bba66360b6242e425d26a7c661c7383
a96ba61dd1b3e85e637d93d055d1a3f87c1f2536c8d3de59e1edfb0a916ad6a392533065306560
f80bc88e49758f65d61af48efc244a16b57e7c8c12eb03c4e8b3cd06a74d88f8226b1369975f62
76618bf1ba9988dddf14c3431b485099d87c401b35bc5d12f307feb0cf426466519e6fb3e46d0b
12a1bda1126794b5eaeb79203ef9448a31a6609a2260c8c4e86ad9b508d4ab7e1e2be697bf33d0
8dd750a6bc91713e4a353121fe4f5bb6285f3dcc6a616951c1fed307cef1026470dddfdb36d0c5
c937c320f823fc456d6134142bf1675c63f675431fadd0b3cfee000cc968993ea52291ad5033d0
24ba063e611c3a5211e36c07e1951066c66e1d402189b32e552daf34c9ad87b161dbd3123bc270
a4f4681f49c91e722c091defcbfc7be71b53b26b6fee625ff7a39780b7432e4d869a19ec1b7427
9da64b323874914c4ab47b665b21184dd40eb3ceb9254fc47e726ffaaef9c5aea57dbb50a618c5
68872443aceefbb67b5d2fea44825d5094f977e0c5f2ccee6af63f4d1abee2538982c437c79bda
dd7602d2bdafa2d3a00c328fdb63b499fd1c32b85e210a37b22710938b33114de6dfc5559a3730
7ad6b71803d3730055b141e11e4a30b94adb006e613071ea00dec97c21cb0d914eec828918c143
2474bf84fe05c2e82b2b2db61d0c84ccd3bf221858864a50c501d281beda4a4587bb86a8653027
1e7bf49b40ad69d8660035f84c7c9f50230fcc5e8b2e2ff21241f38a9eedd6c1e0fe15844dc8e2
078e0969aef02cfc9943e53080903b12d3a8f9cf46986c4e62d1c8ce83d93b1a013171bd446d33
ad458c7669fa82b8508e3874bf81f9e507712b560c6f4c04f97e58d1d157ca6cf67e7ddbba13a9
b52c837e5a59d4c007e5e340b0d7919e0bfcb62e7b1640e6db2fef38e3bf2a53e91caf69ce5dc0
58810fa2cde129486c7001437bef99dceb9456752f13405f09bf48302c8fa40db8c9890cb038a3
ef7c29d54247e617f5930346984861bb8f462e706047e8590431833d60457f839a11927aa0a26c
e4754186e095c03fa260a347682e02b408ae140fc62389397410db7dda34bdb8b9551781ce222f
f93950489ce4b8973a5afe9ad2e8c9984073297d4a8d734dcf612b27d014fb19a1e4385e95fc59
66f31aad14b347fd48ba99e8207ffdabc084bc6cec2cb3a68f6ea82742bbb9f7d809530a26f498
e750cf423cbf4961bef4662bda9854375ac902cba9626db4eb362fe3b0574d5e64e7ba7e1ff553
c992cd3e3f169086355bb62c59ed675ca54893b06f8846a7ca57d4392c9eddadcad5c6e192abaa
a700d4e7385c56d2f9de3c4489ac11af7a03f010082d042b725378e59e2a7998dee93a12e21764
7ed96008a6b52e90c16604376976de7b187edceed1261f540a0be3eba806921c0b0c4b353265cc
c3ffafac813f4f8020ab4697c705c68ee1a52f65a2fc4e317470ec340000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%!FontType1-1.1 f-1-0 1.0
11 dict begin
/FontName /f-1-0 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/FontBBox {0 -235 863 727 } readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 1 /uni0056 put
dup 2 /uni004D put
dup 3 /uni0031 put
dup 4 /uni0032 put
dup 5 /uni0057 put
dup 6 /uni006F put
dup 7 /uni0072 put
dup 8 /uni006B put
dup 9 /uni0065 put
dup 10 /uni0020 put
dup 11 /uni0070 put
dup 12 /uni0069 put
dup 13 /uni0076 put
dup 14 /uni0061 put
dup 15 /uni0074 put
dup 16 /uni006D put
dup 17 /uni002D put
dup 18 /uni006E put
dup 19 /uni0075 put
dup 20 /uni006C put
dup 21 /uni0062 put
dup 22 /uni0063 put
dup 23 /uni0073 put
dup 24 /uni0066 put
dup 25 /uni0068 put
dup 26 /uni0077 put
dup 27 /uni0067 put
readonly def
currentdict end
currentfile eexec
f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467
b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de
800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f
2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b
9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799
69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5
8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251caf38b5733b65e1
ae5ed9ec42ebee256077e561ea069a72fa6ddc3792643c08a3ebdf22fefac7396401f4ef69af60
fb427726673f2a913195b4168b6da17f5c62ad9ca9234569ed4789c4938da69be46e27567df5fb
fed82edf53ce8193c8f6c52a133ff6fc1bf814ee6ff32a0a39480b1a62695ac0f349902e08b28b
30b87515ec5a046d818fba902951bdc40ce6a5dd3a66b1b7dfff5f2afd55dca5531adbcae9137d
46e3ecd4d21bc53ecc83162147486d75ed89a936a308a05a2a9104677217501b181c133376e346
0daaf5a18e4d257148779d9b6636036726b3cb8e7ba849c547b8a5cf52d9f41e192be1c279d659
6c4e350630107d9dd4ff8d8f6f4e0d844bf4229d9276b1cb66dfffc1018cce0b0fcb2fc1d0e5d3
9ca22bed275fb1e3612ac5b63e40d0d63e422bdf6ee71aaef268e1b9f2ba82c687c9766a824df4
0b2d55a13e8d867d4743c6d3877c7452636f59d55b8dc574af9d26550cf2bbdef881807a82a818
8c098e3107157ac844e6a914934db2e9659c56e8e7299024239e087ed70e3b18ea2c07fa30f063
f003357f5291a206ffe749c62d946ce8364d38ce1cb4a9538e0e955123db1a00cbe96b6fcc7011
6c8f489b02f5764d6b87891bb10430e01e152241d5ff1b2ef62efdf6d1db4266f6c3710d6fcc83
a0380bfa8374325cc0eded3e066deb024c6942485387e9168cd6a436493217ff42201c4b9fc17c
222e0944880315e05bac4f5bb918ccd6e4a340a65f82ad3377bb55f1482f1b0612a5f981d41107
cc12406a3325efa64f11512df93d3a72b2f823361fa296dee4bbd4dfc36507e1e6f60f5a9e2096
fec1a0da3be5b1f536c535168c3f2d3091cd03e726b1ea1d49c5082df09932b83331201a2e4452
d374b98820fbed50ee1dd63ccbb3418db11694598b332c5bce04ef6bc6d9c0f31f4c0dfbcbbb3f
66df05e3e5459b8933c5c4875e4b832ad010fcbb7950d45ef26a1d45a44c5087f1de96709339a4
1d9307d6fa8aa8ff83beecf39b9bfcec01eebcc9c8b24403da881a4b57f4a7f2252dd4fdaa9c8c
65ac4da459eb208bfdef142df722a33eceb88f7a7e15cad54bc8dc1bbdad102b6cdffa6fb7ea24
2bc8d86d2ee9b2b695a412f3536976fe0849a3e2bedd5507679759c14667b55278b8c601de1c21
69ee99125bbaefb70783c4543959e5324fed2629e26d96b4d44f029f4e9cd0ba43899b6d240430
4cd0f6d93e4d20d692bc2438b25096ec1171c1929c1741b62002d67c175a06818143817b062947
303ff2ec3fa02dad4981198fe6477286eb7914b7bfa386e5a243729537c1301d1b3294227a6def
73c60d90a374f5cd0a86b2889f83bff714e5aff94082faa4192063e36c60dfaf760b66c5ca0102
d2cabf56324d4a470d9855ab60fccf50838635c0af516a01d23dad80cb1eea34bdeb2f742f2fae
a4dcd7c631cc9dd905babc551c835ac7f5f9062b9cedc015445893b590dbdbd587db693ed53859
ce734fd4eef128482250d1fa86c7f5efcaf375aae07d36a2ee755a6d575be1f876e911fd31c5d6
987752e6faa8ad725cfcc84a0b6e1a9a481956770d8770971b3ff43f3000e26789555ebe49b2a7
afc30705c848cf11801cc4674c797c0aba72b0e22d08e8d93fbdb5be0b6f6e44636dabb517178c
9dfe59ce3c75e5d1e1abb56af86bc8ecd963f385681946c8c95b33ad5cc41550f15fa43a5be3a5
45fbeb4865f702c76fbf5206bd67feb1df779ecd90b000b2bbb0da204772371fdf11466f40abd9
6801a56418d2441a1a74c64e8c900abe4dea56a17a7a22e7ef632f4c73beedf3bb5281a4823586
5a4c26fa4478750315bf01428cdd7f83428c6658883e4dc25d22bf248430caa0b8efff57f71a69
23f8370ec9a7abdde13f17746b26733414221eb964e7a7ae1e73911155a4e79319a5e61e1f4739
6f4dd4246bff9133c38df45635eca056234b02f219df12278a420ebcad359ca35ec166c81ddc7d
bc0f1130409748c2241f14566c3165b430df2e686be46a783bd5e0935b9a098ac5da8bae7a80bb
8df6f0451e1557ddcbd0f3820d89e7855bcf393f57adc576f3cbe7e6c9e912b729dc47c10bfc77
fa9744c608d44c7715263dc76179282a1fcd6c705e360c0c71ad674566e61fd33ce797efafe23d
14177b64e054b313c4d01994bdf1c17dc661579a37fbf409a67769b510be7a12d24c84feee9b06
bfab2f71b46df65b83394fac039f336e15e8ee3c004081e22a127c9e31311962f32d40ae44bef2
f9ed8879ba92445c554a6e653377fb4d167a8dc798ea941dd8b3d46de19c8fa3cec568c18ddb76
27fa3be0a5a86b52f10ba88387a50d1885aa24d8020203ef294ac48e1664544fc27063c8eed829
638de0772b0918b7e6473390f0bef6649639af0523235b44c56fc612950413814114d5d942a5fc
537283cfa90832eb0661a4295c3062e220d8b218a1bf05652b8ccb66edae0e7c60ac1169c68611
7fc908e4ee0520ca8f3f16597c13b05dbb0ca7e50b05e3c63465f3304f0c0cdd9bd7e2cca23158
fec58171c620d94399ca61c0c10b23113f6a3b94c41966d6890030a64174151bda235b3e2fb439
6f7f368a138466847a130e9248992cea57226c068877f942d66fa80d02c103caeda78202b09795
a17af5a01e5da79a724731b2268b144500fa38608b4ed3838198d10d63f2c7ef3b21fe316ba2e2
4685d391512fa0b3fb18dc0ddb751d3053f7f363e150b2ae0b64d389f3c8a61b8825f121ae4f04
2f8b7ad2d45d9399dbeac6a459c3abc8d36546f4f91d6d9480e90b894b5c2ada32148e4e4b425c
96fbe9f655600b3edbc42f2c5aae0c909f4888b5c700993d0e9bb89b4a1e7ea30693848787b00e
0da2d7c6d084a75b3d61875bd158d0374a388e5858368c949bbb1a2dae9ca4da96f844d9a26209
4c1a524960a3a5e96dde86a4d91e3915de07fa3c31d87a7119b7c07aebc0784964972d941ec585
20b5f6ee7eba81aedfda62d2e348e50f6f10d1359a8df51de5268aeb6f06344bdcc0c9594fe9e9
c6f866a911e09fb0a7e7928a57d12b69b9abc8cb87a1d5de27765eb0696aafce6b58655af7175f
f9c6f10e2f376836c8c58a279e14a8f7b04196b67521376104ffe6cb13b93555a3f2a322dce5d8
e5d533388693374347c4acaf56159b724b67eb85e57c7787b69fa12358e9191c4b0db0e6107afc
47fe12eb3fac3a4a6ef73946774d8a30e65ca0ee45ac91cfaa002bf48131a637bae4e8143083ea
de945a8a231406e689a9056814c286d2a816033ff0e659b1f257576a7346b694cfa2e8e4f248cd
b9717c549f062140a660e76d624835287124609b9ddf9021b7976ee5285c64ee9558f2451b60cd
4ac52642be48a4af2c6e3ff13fc5434d0c64e22b874c1188da57894d8123fccbebef6a6aa83f8a
6563204f063d3e21293b54ebc8b2d1d4987619dbe08dd2ee3caca415d185ad0408fb6f07cc5745
9dab0011b42f33d6c2bccf30ce5283e8c2da43c732aa7f67efeb14871da8b934db317d98f96425
50cd12b5b61b904b0acfd03ba7b42870af25ac7f563843678626ac394e734e12678ca05130e081
2c23e085af0e46fbd682f72edee7cb4304151df52c76faa6573af526fccfecbbc1e345ade26ac3
b7e6c318cda32c431e6dc30791e65f6caf70b9e0730a4b0fb588cfa7b5722a06e346bf7b0070ca
fa0dd3194aa675e9a4e51949877e8f7fb576b7804178de23459060d34269530bfa0bd894cf68fe
661161aed7608b6b4a67d2741ff658616c9d8a2b10b2e34897bd11bcd1b8ad26e4c16fe8623bca
fbef473d69707ac27a0f05da69233bd2d37a3fe3a3e1afc106804a76952304e031360235e5c133
7ee4db6291eee67fcea7e0534258cc53045bfc87c177608b5b86ec87f104ab8ca98ff54b5dc936
b999b7fae912f9d17e3014b5883071cf9a1c36397a2a33080e564ad9a083e08f9782663bb113d0
4a12bbd8c8cc8ae3dd34514a65b296b2ebe0347d5532c14ac1da76fab3391d8b1dd07e616c9a05
efaec72b160000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%!FontType1-1.1 f-2-0 1.0
11 dict begin
/FontName /f-2-0 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/FontBBox {0 0 783 718 } readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 1 /uni006E put
dup 2 /uni006B put
dup 3 /uni006D put
readonly def
currentdict end
currentfile eexec
f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467
b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de
800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f
2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b
9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799
69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5
8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251ca87c5560dc92bb
34e8205b91e6fd735b4ec0f4176689808e820e598074961f6b7d313b858a002fad9cd5b7eb26be
5816d7219c0a42e3d3867b4c0c143f7d89f5a7906d9f4de81c5c3b7a6e410425cccb618988c16c
54024f707a299a545b01d0357f818f466ed9f23ab512d073f83b3caffaff61fae5190354883642
e31b7ce97eb1d208f306ad0817d1aaee5d2d915173573c7963ce9391dee269a3e703626a0fc9ba
d18f42f72c70a0bf330fe9205bb40c969c693088b66e62cbd329954b4e8eded48f9b9f4813d158
8848c14649da3cf26e32148941cb73dbdcc10ede96fd10653edae63a211c08ae22ad3d1f0d3d5c
0dd01b294bab7ff4b86e34833b24556b1518d1fc4db017476b3cf125f3aba75aee298444c91fb0
d4cdd7156fde2011e672643aa6d86b36edfcbf3754aef57a11b016167aa1ec48bc5b2ef4971874
a6ff374b94babae6fc8c55ab80ded38e8babcacd81f2f404843d76e9fbb6e26748c3c6ae0ab965
0604b75124647b0f2c5ddff371a4b25f203e05cf61dcc24e4321820b1a250eb437d7bcdc5d3413
62e72154fde11b5917144f45b17f461c93de37b26f2feedb15791f1871b71de0bd4f5b96e1db95
b3ae6c88c71050c37971976b09111a3a92e22ed89bdc7de7413ef718bf5fd140d1bb882c68de5b
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: -167 0 256 305
%%EndPageSetup
q -167 0 423 305 rectclip q
0 217.706 257 -218 re W n
0.666667 0.8 0.933333 rg
9.602 216.104 m 247.199 216.104 l 251.633 216.104 255.199 212.538
255.199 208.104 c 255.199 34.905 l 255.199 30.475 251.633 26.905
247.199 26.905 c 9.602 26.905 l 5.168 26.905 1.602 30.475 1.602 34.905
c 1.602 208.104 l 1.602 212.538 5.168 216.104 9.602 216.104 c h
9.602 216.104 m f
0.992157 0.792157 0.00392157 rg
3.2 w
0 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
199.957 119.219 m 199.957 96.879 l 165.754 96.879 l 165.754 86.277 l S Q
0.00392157 0.2 0.592157 rg
4.8 w
q 1 0 0 -1 0 217.705566 cm
104.02 79.277 m 104.02 59.676 l 56.316 59.676 l 56.316 47.277 l S Q
0.2 0.6 0 rg
3.2 w
q 1 0 0 -1 0 217.705566 cm
146.535 81.277 m 146.535 61.676 l 189.961 61.676 l 189.961 33.277 l S Q
0.992157 0.792157 0.00392157 rg
q 1 0 0 -1 0 217.705566 cm
199.957 51.879 m 199.957 68.277 l 156.703 68.277 l 156.703 78.879 l S Q
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 93.477416 260.392966 ]
makepattern setpattern
4.8 w
1 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
94.402 79.277 m 94.402 67.676 l 46.98 67.676 l 46.98 47.277 l S Q
Q q
0 217.706 257 -218 re W n
0.00392157 0.2 0.592157 rg
127.531 211.569 m 123.68 201.092 l 124.375 201.592 124.66 201.917
125.457 202.12 c 125.457 137.217 l 129.605 137.217 l 129.605 202.143 l
130.395 201.944 130.723 201.596 131.406 201.092 c h
127.531 211.569 m f
0.992157 0.792157 0.00392157 rg
3.2 w
0 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
53.355 116.105 m 53.355 96.879 l 90.355 96.879 l 90.355 86.277 l S Q
0 0.2 0.4 rg
163.309 104.612 m 236.559 104.612 l 240.992 104.612 244.559 101.042
244.559 96.612 c 244.559 46.807 l 244.559 42.374 240.992 38.807 236.559
38.807 c 163.309 38.807 l 158.875 38.807 155.309 42.374 155.309 46.807
c 155.309 96.612 l 155.309 101.042 158.875 104.612 163.309 104.612 c h
163.309 104.612 m f
18.109 104.612 m 91.359 104.612 l 95.793 104.612 99.359 101.042 99.359
96.612 c 99.359 46.807 l 99.359 42.374 95.793 38.807 91.359 38.807 c
18.109 38.807 l 13.676 38.807 10.109 42.374 10.109 46.807 c 10.109
96.612 l 10.109 101.042 13.676 104.612 18.109 104.612 c h
18.109 104.612 m f
0.2 0.6 0 rg
q 1 0 0 -1 0 217.705566 cm
87.766 153.277 m 87.766 133.676 l S Q
0.933333 0.780392 0.243137 rg
q 1 0 0 -1 0 217.705566 cm
232.566 153.277 m 232.566 133.676 l S Q
0.2 0.6 0 rg
q 1 0 0 -1 0 217.705566 cm
188.148 153.277 m 188.148 133.676 l S Q
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 93.477416 263.592966 ]
makepattern setpattern
3.2 w
1 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
167.332 144.879 m 167.332 132.477 l S Q
Q q
0 217.706 257 -218 re W n
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 93.477416 260.392966 ]
makepattern setpattern
3.2 w
1 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
142.012 85.676 m 142.012 105.277 l 171.332 105.277 l 171.332 133.676 l S Q
Q q
0 217.706 257 -218 re W n
/CairoPattern {
q
Q q
0.596078 0.00392157 0.00392157 rg
0 5149.969 5150.262 -5150.258 re f
0 g
0.363 5150 m 0.363 4306.25 l 844.113 5150 l h
1715.988 5150 m 0.363 3437.5 l 0.363 2587.5 l 2562.863 5150 l h
3431.613 5150 m 0.363 1718.75 l 0.363 868.75 l 4281.613 5150 l h
5150.363 5150 m 0.363 0 l 850.363 0 l 5150.363 4300 l h
5150.363 3431.25 m 1719.113 0 l 2569.113 0 l 5150.363 2581.25 l h
5150.363 1712.5 m 3437.863 0 l 4284.738 0 l 5150.363 865.625 l h
5150.363 1712.5 m f
Q
} bind def
<< /PatternType 1
/PaintType 1
/TilingType 1
/XStep 5150 /YStep 5150
/BBox [0 0 5150 5150]
/PaintProc { CairoPattern }
>>
[ 0.008 0 0 0.008 93.477416 260.392966 ]
makepattern setpattern
3.2 w
1 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
110.629 85.676 m 110.629 105.277 l 85.734 105.277 l 85.734 133.676 l S Q
Q q
0 217.706 257 -218 re W n
0.933333 0.780392 0.243137 rg
3.2 w
0 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 217.705566 cm
43.348 153.277 m 43.348 133.676 l S Q
0.2 0.6 0 rg
q 1 0 0 -1 0 217.705566 cm
22.148 153.277 m 22.148 133.676 l S Q
1 g
21.379 74.338 m 22.918 74.338 l 26.922 74.338 30.148 70.772 30.148
66.338 c 30.148 50.338 l 30.148 45.909 26.922 42.338 22.918 42.338 c
21.379 42.338 l 17.371 42.338 14.148 45.909 14.148 50.338 c 14.148
66.338 l 14.148 70.772 17.371 74.338 21.379 74.338 c h
21.379 74.338 m f
0 0.2 0.4 rg
0.8 w
0 j
q 1 0 0 -1 0 217.705566 cm
21.379 143.367 m 22.918 143.367 l 26.922 143.367 30.148 146.934 30.148
151.367 c 30.148 167.367 l 30.148 171.797 26.922 175.367 22.918 175.367
c 21.379 175.367 l 17.371 175.367 14.148 171.797 14.148 167.367 c
14.148 151.367 l 14.148 146.934 17.371 143.367 21.379 143.367 c h
21.379 143.367 m S Q
1 g
42.578 74.338 m 44.117 74.338 l 48.121 74.338 51.348 70.772 51.348
66.338 c 51.348 50.338 l 51.348 45.909 48.121 42.338 44.117 42.338 c
42.578 42.338 l 38.57 42.338 35.348 45.909 35.348 50.338 c 35.348
66.338 l 35.348 70.772 38.57 74.338 42.578 74.338 c h
42.578 74.338 m f
0 0.2 0.4 rg
q 1 0 0 -1 0 217.705566 cm
42.578 143.367 m 44.117 143.367 l 48.121 143.367 51.348 146.934 51.348
151.367 c 51.348 167.367 l 51.348 171.797 48.121 175.367 44.117 175.367
c 42.578 175.367 l 38.57 175.367 35.348 171.797 35.348 167.367 c 35.348
151.367 l 35.348 146.934 38.57 143.367 42.578 143.367 c h
42.578 143.367 m S Q
1 g
86.996 74.338 m 88.535 74.338 l 92.543 74.338 95.766 70.772 95.766
66.338 c 95.766 50.338 l 95.766 45.909 92.543 42.338 88.535 42.338 c
86.996 42.338 l 82.992 42.338 79.766 45.909 79.766 50.338 c 79.766