iruby 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,300 @@
1
+ module IRuby
2
+ class Session
3
+ DELIM = '<IDS|MSG>'
4
+
5
+ def initialize(username, key, sign_scheme)
6
+ @username = username
7
+ @session = SecureRandom.uuid
8
+ @msg_id = 0
9
+
10
+ raise 'Unknown signature scheme' unless sign_scheme =~ /\Ahmac-(.*)\Z/
11
+ @digest = OpenSSL::Digest::Digest.new($1)
12
+ @key = key
13
+ end
14
+
15
+ # Sign a message with HMAC digest. If no auth, return b''.
16
+
17
+ # Parameters
18
+ # ----------
19
+ # msg_list : list
20
+ # The [p_header,p_parent,p_content] part of the message list.
21
+ def sign(msg_list)
22
+ return '' unless @key
23
+ hmac = OpenSSL::HMAC.new(@key, @digest)
24
+ msg_list.each do |m|
25
+ hmac.update(m)
26
+ end
27
+ hmac.hexdigest
28
+ end
29
+
30
+ def msg_header
31
+ h = {
32
+ msg_id: @msg_id,
33
+ username: @username,
34
+ session: @session
35
+ }
36
+ @msg_id += 1
37
+ h
38
+ end
39
+
40
+ def msg(msg_type, content=nil, parent=nil)
41
+ msg = {}
42
+ msg['header'] = msg_header
43
+ msg['parent_header'] = parent ? parent['header'] : {}
44
+ msg['metadata'] = {}
45
+ msg['header']['msg_type'] = msg_type
46
+ msg['content'] = content || {}
47
+ return msg
48
+ end
49
+
50
+ # Build and send a message via stream or socket.
51
+ #
52
+ # The message format used by this function internally is as follows:
53
+ #
54
+ # [ident1,ident2,...,DELIM,HMAC,p_header,p_parent,p_content,
55
+ # buffer1,buffer2,...]
56
+ #
57
+ # The serialize/unserialize methods convert the nested message dict into this
58
+ # format.
59
+ #
60
+ # Parameters
61
+ # ----------
62
+ #
63
+ # stream : zmq.Socket or ZMQStream
64
+ # The socket-like object used to send the data.
65
+ # msg_or_type : str or Message/dict
66
+ # Normally, msg_or_type will be a msg_type unless a message is being
67
+ # sent more than once. If a header is supplied, this can be set to
68
+ # None and the msg_type will be pulled from the header.
69
+ #
70
+ # content : dict or None
71
+ # The content of the message (ignored if msg_or_type is a message).
72
+ # header : dict or None
73
+ # The header dict for the message (ignores if msg_to_type is a message).
74
+ # parent : Message or dict or None
75
+ # The parent or parent header describing the parent of this message
76
+ # (ignored if msg_or_type is a message).
77
+ # ident : bytes or list of bytes
78
+ # The zmq.IDENTITY routing path.
79
+ # subheader : dict or None
80
+ # Extra header keys for this message's header (ignored if msg_or_type
81
+ # is a message).
82
+ # buffers : list or None
83
+ # The already-serialized buffers to be appended to the message.
84
+ # track : bool
85
+ # Whether to track. Only for use with Sockets, because ZMQStream
86
+ # objects cannot track messages.
87
+ #
88
+ # Returns
89
+ # -------
90
+ # msg : dict
91
+ # The constructed message.
92
+ # (msg,tracker) : (dict, MessageTracker)
93
+ # if track=True, then a 2-tuple will be returned,
94
+ # the first element being the constructed
95
+ # message, and the second being the MessageTracker
96
+ def send(stream, msg_or_type, content=nil, parent=nil, ident=nil, buffers=nil, subheader=nil, track=false, header=nil)
97
+ if !stream.is_a?(ZMQ::Socket)
98
+ raise "stream must be Socket or ZMQSocket, not %r"%stream.class
99
+ end
100
+
101
+ if msg_or_type.is_a?(Hash)
102
+ msg = msg_or_type
103
+ else
104
+ msg = self.msg(msg_or_type, content, parent)
105
+ end
106
+
107
+ buffers ||= []
108
+ to_send = self.serialize(msg, ident)
109
+ flag = 0
110
+ if buffers.any?
111
+ flag = ZMQ::SNDMORE
112
+ _track = false
113
+ else
114
+ _track=track
115
+ end
116
+ if track
117
+ to_send.each_with_index do |part, i|
118
+ if i == to_send.length - 1
119
+ flag = 0
120
+ else
121
+ flag = ZMQ::SNDMORE
122
+ end
123
+ stream.send_string(part, flag)
124
+ end
125
+ else
126
+ to_send.each_with_index do |part, i|
127
+ if i == to_send.length - 1
128
+ flag = 0
129
+ else
130
+ flag = ZMQ::SNDMORE
131
+ end
132
+ stream.send_string(part, flag)
133
+ end
134
+ end
135
+ # STDOUT.puts '-'*30
136
+ # STDOUT.puts "SENDING"
137
+ # STDOUT.puts to_send
138
+ # STDOUT.puts to_send.length
139
+ # STDOUT.puts '-'*30
140
+
141
+ #buffers.each do |b|
142
+ #stream.send(b, flag, copy=False)
143
+ #end
144
+ #if buffers:
145
+ #if track:
146
+ #tracker = stream.send(buffers[-1], copy=False, track=track)
147
+ #else:
148
+ #tracker = stream.send(buffers[-1], copy=False)
149
+
150
+ # omsg = Message(msg)
151
+ #if self.debug:
152
+ #pprint.pprint(msg)
153
+ #pprint.pprint(to_send)
154
+ #pprint.pprint(buffers)
155
+
156
+ #msg['tracker'] = tracker
157
+
158
+ return msg
159
+ end
160
+
161
+ def recv(socket, mode=ZMQ::NOBLOCK)
162
+ begin
163
+ msg = []
164
+ frame = ""
165
+ rc = socket.recv_string(frame, mode)
166
+ ZMQ::Util.error_check("zmq_msg_send", rc)
167
+
168
+ msg << frame
169
+ while socket.more_parts?
170
+ begin
171
+ frame = ""
172
+ rc = socket.recv_string(frame, mode)
173
+ ZMQ::Util.error_check("zmq_msg_send", rc)
174
+ msg << frame
175
+ rescue
176
+ end
177
+ end
178
+ # Skip everything before DELIM, then munge the three json objects into the
179
+ # one the rest of my code expects
180
+ i = msg.index(DELIM)
181
+ idents = msg[0..i-1]
182
+ msg_list = msg[i+1..-1]
183
+ end
184
+ return idents, unserialize(msg_list)
185
+ end
186
+
187
+ # Serialize the message components to bytes.
188
+ #
189
+ # This is roughly the inverse of unserialize. The serialize/unserialize
190
+ # methods work with full message lists, whereas pack/unpack work with
191
+ # the individual message parts in the message list.
192
+ #
193
+ # Parameters
194
+ # ----------
195
+ # msg : dict or Message
196
+ # The nexted message dict as returned by the self.msg method.
197
+ #
198
+ # Returns
199
+ # -------
200
+ # msg_list : list
201
+ # The list of bytes objects to be sent with the format:
202
+ # [ident1,ident2,...,DELIM,HMAC,p_header,p_parent,p_content,
203
+ # buffer1,buffer2,...]. In this list, the p_* entities are
204
+ # the packed or serialized versions, so if JSON is used, these
205
+ # are utf8 encoded JSON strings.
206
+ def serialize(msg, ident=nil)
207
+ content = msg.fetch('content', {})
208
+ if content.nil?
209
+ content = {}.to_json
210
+ elsif content.is_a?(Hash)
211
+ content = content.to_json
212
+ #elsif isinstance(content, bytes):
213
+ # content is already packed, as in a relayed message
214
+ #pass
215
+ #elsif isinstance(content, unicode):
216
+ # should be bytes, but JSON often spits out unicode
217
+ #content = content.encode('utf8')
218
+ else
219
+ raise "Content incorrect type: %s"%type(content)
220
+ end
221
+
222
+ real_message = [MultiJson.dump(msg['header']),
223
+ MultiJson.dump(msg['parent_header']),
224
+ MultiJson.dump(msg['metadata']),
225
+ MultiJson.dump(msg['content']),
226
+ ]
227
+
228
+ to_send = []
229
+
230
+ if ident.is_a?(Array)
231
+ # accept list of idents
232
+ to_send += ident
233
+ elsif !ident.nil?
234
+ to_send << ident
235
+ end
236
+ to_send << DELIM
237
+
238
+ signature = self.sign(real_message)
239
+ to_send << signature
240
+
241
+ to_send += real_message
242
+ # STDOUT.puts to_send
243
+ # STDOUT.puts to_send.length
244
+
245
+ return to_send
246
+ end
247
+
248
+ # Unserialize a msg_list to a nested message dict.
249
+ # This is roughly the inverse of serialize. The serialize/unserialize
250
+ # methods work with full message lists, whereas pack/unpack work with
251
+ # the individual message parts in the message list.
252
+
253
+ # Parameters:
254
+ # -----------
255
+ # msg_list : list of bytes or Message objects
256
+ # The list of message parts of the form [HMAC,p_header,p_parent,
257
+ # p_content,buffer1,buffer2,...].
258
+ # content : bool (True)
259
+ # Whether to unpack the content dict (True), or leave it packed
260
+ # (False).
261
+ # copy : bool (True)
262
+ # Whether to return the bytes (True), or the non-copying Message
263
+ # object in each place (False).
264
+
265
+ # Returns
266
+ # -------
267
+ # msg : dict
268
+ # The nested message dict with top-level keys [header, parent_header,
269
+ # content, buffers].
270
+ def unserialize(msg_list, content=true, copy=true)
271
+ minlen = 5
272
+ message = {}
273
+ unless copy
274
+ minlen.times do |i|
275
+ msg_list[i] = msg_list[i].bytes
276
+ end
277
+ end
278
+ unless msg_list.length >= minlen
279
+ raise "malformed message, must have at least %i elements"%minlen
280
+ end
281
+
282
+ raise "Invalid signature" unless self.sign(msg_list[1..-1]) == msg_list[0]
283
+
284
+ header = msg_list[1]
285
+ message['header'] = MultiJson.load(header)
286
+ message['msg_id'] = header['msg_id']
287
+ message['msg_type'] = header['msg_type']
288
+ message['parent_header'] = MultiJson.load(msg_list[2])
289
+ message['metadata'] = MultiJson.load(msg_list[3])
290
+ if content
291
+ message['content'] = MultiJson.load(msg_list[4])
292
+ else
293
+ message['content'] = msg_list[4]
294
+ end
295
+
296
+ message['buffers'] = msg_list[4..-1]
297
+ return message
298
+ end
299
+ end
300
+ end
@@ -0,0 +1,3 @@
1
+ module IRuby
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,768 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
4
+ xmlns:cc="http://creativecommons.org/ns#"
5
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
+ xmlns:svg="http://www.w3.org/2000/svg"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ xmlns:xlink="http://www.w3.org/1999/xlink"
9
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
10
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
11
+ xml:space="preserve"
12
+ width="1408.3538"
13
+ height="148.04994"
14
+ style="fill-rule:evenodd"
15
+ viewBox="0 0 1408.3538 148.04846"
16
+ id="svg2"
17
+ version="1.1"
18
+ inkscape:version="0.48.4 r9939"
19
+ sodipodi:docname="ipynblogo.svg"
20
+ inkscape:export-filename="ipynblogo.png"
21
+ inkscape:export-xdpi="39.83239"
22
+ inkscape:export-ydpi="39.83239"><metadata
23
+ id="metadata121"><rdf:RDF><cc:Work
24
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
25
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
26
+ pagecolor="#ffffff"
27
+ bordercolor="#666666"
28
+ borderopacity="1"
29
+ objecttolerance="10"
30
+ gridtolerance="10"
31
+ guidetolerance="10"
32
+ inkscape:pageopacity="0"
33
+ inkscape:pageshadow="2"
34
+ inkscape:window-width="1276"
35
+ inkscape:window-height="992"
36
+ id="namedview119"
37
+ showgrid="false"
38
+ showguides="true"
39
+ inkscape:guide-bbox="true"
40
+ inkscape:zoom="0.26229415"
41
+ inkscape:cx="822.946"
42
+ inkscape:cy="63.610685"
43
+ inkscape:window-x="0"
44
+ inkscape:window-y="14"
45
+ inkscape:window-maximized="0"
46
+ inkscape:current-layer="svg2"
47
+ showborder="true"
48
+ fit-margin-top="0"
49
+ fit-margin-left="0"
50
+ fit-margin-right="0"
51
+ fit-margin-bottom="0" /><defs
52
+ id="defs4"><font
53
+ id="FontID0"
54
+ font-variant="normal"
55
+ font-weight="400"
56
+ horiz-origin-x="0"
57
+ horiz-origin-y="0"
58
+ horiz-adv-x="90"
59
+ vert-origin-x="45"
60
+ vert-origin-y="90"
61
+ vert-adv-y="90"
62
+ style="font-variant:normal;font-weight:400"><font-face
63
+ font-family="Droid Sans Mono"
64
+ id="font-face7" /><missing-glyph
65
+ id="missing-glyph9"><path
66
+ d="M0 0z"
67
+ id="path11" /></missing-glyph><glyph
68
+ unicode=" "
69
+ horiz-adv-x="600"
70
+ id="glyph13" /><glyph
71
+ unicode=":"
72
+ horiz-adv-x="600"
73
+ id="glyph15"><path
74
+ d="M299.831 549.838c41.3387,0 62.0033,-22.6678 62.0033,-67.8333 0,-45.3356 -20.6646,-68.0034 -62.0033,-68.0034 -41.3293,0 -61.9939,22.6678 -61.9939,68.0034 0,45.1655 20.6646,67.8333 61.9939,67.8333zm0 -427.834c41.3387,0 62.0033,-22.5072 62.0033,-67.8333 0,-45.5057 -20.6646,-68.3341 -62.0033,-68.3341 -41.3293,0 -61.9939,22.8284 -61.9939,68.3341 0,45.3261 20.6646,67.8333 61.9939,67.8333z"
75
+ id="path17" /></glyph><glyph
76
+ unicode="C"
77
+ horiz-adv-x="600"
78
+ id="glyph19"><path
79
+ d="M548.841 98.1632l0 -79.1712c-47.5084,-19.1621 -105.845,-28.8282 -174.84,-28.8282 -100.488,0 -177.504,32.0029 -230.994,95.8388 -53.3477,63.6657 -79.9932,154.317 -79.9932,271.841 0,112.648 29.14,201.826 87.3065,267.646 58.3366,65.6783 138.018,98.6734 238.846,98.6734 71.6594,0 133.993,-14.0031 187,-42.0092l-38.0124 -76.1664c-50.1446,25.3416 -99.8072,38.0124 -148.988,38.0124 -69.987,0 -125.829,-25.8235 -167.498,-77.3286 -41.669,-51.6753 -62.5035,-121.492 -62.5035,-209.677 0,-93.486 19.5022,-164.664 58.6768,-213.646 39.0045,-49.0107 96.1506,-73.5019 171.325,-73.5019 42.321,0 95.4986,9.496 159.675,28.3179z"
80
+ id="path21" /></glyph><glyph
81
+ unicode="I"
82
+ horiz-adv-x="600"
83
+ id="glyph23"><path
84
+ d="M488.838 0l-379.013 0 0 60.0064 144.001 9.83275 0 574.162 -144.001 9.83275 0 60.0064 379.013 0 0 -60.0064 -143.665 -9.83275 0 -574.162 143.665 -9.83275 0 -60.0064z"
85
+ id="path25" /></glyph><glyph
86
+ unicode="]"
87
+ horiz-adv-x="600"
88
+ id="glyph27"><path
89
+ d="M141.166 -85.0018l168.832 0 0 726.172 -168.832 0 0 72.6616 257.831 0 0 -871.996 -257.831 0 0 73.1624z"
90
+ id="path29" /></glyph><glyph
91
+ unicode="["
92
+ horiz-adv-x="600"
93
+ id="glyph31"><path
94
+ d="M458.997 -158.164l-257.831 0 0 871.996 257.831 0 0 -72.6616 -168.993 0 0 -726.172 168.993 0 0 -73.1624z"
95
+ id="path33" /></glyph><glyph
96
+ unicode="P"
97
+ horiz-adv-x="600"
98
+ id="glyph35"><path
99
+ d="M176.83 277.833l0 -277.833 -90.8334 0 0 713.84 197.169 0c167.334,0 251.01,-69.6797 251.01,-209.004 0,-71.1679 -22.5002,-126.834 -67.6777,-166.997 -45.0004,-40.0043 -110.499,-60.0064 -196.496,-60.0064l-93.172 0zm0 77.1738l83.0026 0c64.3292,0 110.499,11.6576 138.332,35.1676 27.8329,23.3329 41.8291,59.9887 41.8291,109.826 0,90.8334 -54.9926,136.17 -165.155,136.17l-98.0086 0 0 -281.164z"
100
+ id="path37" /></glyph><glyph
101
+ unicode="g"
102
+ horiz-adv-x="600"
103
+ id="glyph39"><path
104
+ d="M549.833 536.17l0 -55.1619 -95.6687 -13.181c21.1747,-27.666 31.6628,-62.3335 31.6628,-104.002 0,-52.4973 -17.3196,-94.1663 -51.9871,-125.319 -34.6675,-31.0108 -82.9979,-46.6863 -144.849,-46.6863 -17.8298,0 -31.8329,1.02047 -41.9808,3.00471 -32.5132,-18.17 -48.8406,-39.8265 -48.8406,-64.998 0,-27.3258 26.3337,-40.9887 78.6609,-40.9887l91.3317 0c56.6642,0 100.006,-12.5007 129.826,-37.5021 30.0187,-25.1715 45.0139,-61.0012 45.0139,-107.489 0,-122.683 -92.012,-184.024 -275.838,-184.024 -71.0074,0 -125.007,13.0109 -161.999,39.1746 -36.8218,26.3337 -55.3319,63.0138 -55.3319,110.182 0,68.9948 39.0045,112.988 117.155,131.81 -31.3226,15.3353 -46.8281,40.3368 -46.8281,75.1743 0,36.51 21.6849,67.8326 64.8279,93.8262 -28.8282,12.0188 -51.6469,32.0029 -68.3145,59.839 -16.4975,27.836 -24.8313,58.1666 -24.8313,90.9916 0,59.3571 17.3196,104.853 51.9871,137.026 34.6675,31.9746 84.0184,47.9902 148.166,47.9902 28.0061,0 52.3272,-3.17478 73.1617,-9.66608l184.676 0zm-259.822 -283.179c72.6515,0 108.991,37.332 108.991,112.166 0,77.8389 -36.6801,116.843 -110.012,116.843 -73.1617,0 -109.813,-39.4864 -109.813,-118.176 0,-73.9838 36.9919,-110.834 110.834,-110.834zm47.8202 -244.146l-91.6719 0c-75.0043,0 -112.336,-32.3431 -112.336,-96.6892 0,-56.6642 44.0218,-84.9821 132.349,-84.9821 128.494,0 192.84,36.3399 192.84,108.821 0,28.6864 -8.19207,48.0186 -24.5195,57.8264 -16.1574,10.0062 -48.5005,15.0235 -96.6608,15.0235z"
105
+ id="path41" /></glyph><glyph
106
+ unicode="m"
107
+ horiz-adv-x="600"
108
+ id="glyph43"><path
109
+ d="M477.011 0l0 345.173c0,47.48 -4.33698,80.6735 -12.8409,99.1553 -8.67396,18.5101 -23.1589,27.836 -43.3415,27.836 -28.3179,0 -48.8406,-13.4928 -61.6532,-40.5068 -12.8409,-26.9857 -19.3322,-72.3114 -19.3322,-135.835l0 -295.822 -78.6893 0 0 345.173c0,84.6703 -20.3243,126.991 -61.0012,126.991 -27.3258,0 -46.8281,-13.0109 -58.4784,-38.8344 -11.8487,-25.8235 -17.6881,-77.6688 -17.6881,-155.508l0 -277.822 -78.9727 0 0 536.17 61.9933 0 13.1527 -72.3397 4.84721 0c21.8266,54.68 54.4815,82.0058 98.1632,82.0058 53.0075,0 87.675,-29.5085 104.002,-88.8372l2.83463 0c24.8313,59.3288 60.491,88.8372 106.979,88.8372 41.669,0 72.0279,-14.9952 90.8498,-45.1556 18.8219,-30.0187 28.3179,-80.3334 28.3179,-150.519l0 -350.162 -79.1428 0z"
110
+ id="path45" /></glyph><glyph
111
+ unicode="i"
112
+ horiz-adv-x="600"
113
+ id="glyph47"><path
114
+ d="M309.173 756.846c34.4974,0 51.6469,-18.5101 51.6469,-55.6721 0,-18.8503 -5.15902,-32.9951 -15.307,-42.1793 -10.3464,-9.32593 -22.5069,-14.0031 -36.3399,-14.0031 -34.8376,0 -52.3272,18.6802 -52.3272,56.1823 0,37.162 17.4897,55.6721 52.3272,55.6721zm-45.0139 -291.003l-131.328 10.148 0 60.1791 220.166 0 0 -466.325 171.835 -9.83616 0 -60.0091 -428.652 0 0 60.0091 167.98 9.83616 0 395.998z"
115
+ id="path49" /></glyph><glyph
116
+ unicode="c"
117
+ horiz-adv-x="600"
118
+ id="glyph51"><path
119
+ d="M518 517.178l-30.1604 -77.1869c-48.8406,18.5101 -92.4939,27.836 -130.846,27.836 -120.84,0 -181.161,-67.3224 -181.161,-201.655 0,-132.179 58.6768,-198.339 176.172,-198.339 51.165,0 103.322,10.1763 156.84,30.3305l0 -78.1507c-43.6816,-19.8424 -97.171,-29.8486 -160.667,-29.8486 -83.6782,0 -148.676,23.6691 -194.852,71.1775 -46.1477,47.3383 -69.335,115.313 -69.335,203.838 0,91.4734 23.6691,161.149 70.8373,208.997 47.1682,47.8202 113.498,71.6594 199.161,71.6594 58.0248,0 112.676,-9.496 164.012,-28.6581z"
120
+ id="path53" /></glyph><glyph
121
+ unicode="a"
122
+ horiz-adv-x="600"
123
+ id="glyph55"><path
124
+ d="M436.986 0l-17.9999 74.1539 -3.99683 0c-25.0014,-31.4927 -50.6548,-53.3193 -77.1586,-65.65 -26.3337,-12.1606 -60.3209,-18.34 -101.99,-18.34 -53.0075,0 -94.6766,14.0031 -124.667,42.0092 -30.1604,28.0061 -45.184,67.3224 -45.184,117.665 0,108.169 82.9979,164.834 249.022,169.993l98.9852 3.34486 0 33.8171c0,76.8468 -39.6564,115.171 -118.998,115.171 -47.9902,0 -101.338,-13.3228 -160.156,-39.9966l-30.8408 66.8405c63.8358,31.3226 126.169,46.8281 187,46.8281 73.8421,0 127.331,-14.1731 160.497,-42.3493 32.9951,-28.3179 49.4926,-73.8137 49.4926,-136.317l0 -367.169 -64.0059 0zm-23.8109 262.175l-79.1712 -3.34486c-63.8358,-2.66455 -108.991,-12.6708 -135.835,-29.9904 -26.6738,-17.518 -39.9966,-44.1635 -39.9966,-79.8515 0,-57.9965 32.6549,-86.9947 97.6529,-86.9947 47.8485,0 86.0026,13.3511 114.519,39.8265 28.488,26.5038 42.8312,63.8358 42.8312,112.024l0 48.3304z"
125
+ id="path57" /></glyph><glyph
126
+ unicode="e"
127
+ horiz-adv-x="600"
128
+ id="glyph59"><path
129
+ d="M535.178 251.006l-377.998 0c2.66455,-122.172 58.6484,-183.174 167.98,-183.174 63.4957,0 123.675,12.3306 180.679,37.162l0 -78.1507c-53.9997,-24.3495 -113.328,-36.6801 -177.674,-36.6801 -79.8231,0 -143.659,24.3495 -191.507,72.9917 -47.8202,48.6706 -71.6594,115.681 -71.6594,201.003 0,86.6829 21.9967,155.168 66.1602,205.851 44.0218,50.6548 103.01,75.8263 177.023,75.8263 68.9948,0 123.987,-21.6566 165.145,-65.3382 41.1871,-43.6533 61.8516,-101.82 61.8516,-174.33l0 -55.1619zm-376.013 72.1696l279.834 0c0,99.3254 -44.3336,148.988 -132.831,148.988 -89.4892,0 -138.5,-49.6627 -147.004,-148.988z"
130
+ id="path61" /></glyph><glyph
131
+ unicode="n"
132
+ horiz-adv-x="600"
133
+ id="glyph63"><path
134
+ d="M433.173 0l0 345.174c0,84.668 -38.835,126.993 -116.345,126.993 -99.8335,0 -149.83,-64.8253 -149.83,-194.334l0 -277.833 -88.8314 0 0 536.16 71.664 0 13.3407 -72.3195 4.83665 0c33.4845,54.6559 88.1582,81.9928 163.986,81.9928 126.674,0 190.011,-65.1619 190.011,-195.663l0 -350.17 -88.8314 0z"
135
+ id="path65" /></glyph><glyph
136
+ unicode="o"
137
+ horiz-adv-x="600"
138
+ id="glyph67"><path
139
+ d="M297.835 -9.83275c-70.3352,0 -128.162,25.3348 -173.499,76.0045 -45.4964,50.6697 -68.1738,118.17 -68.1738,202.82 0,85.6778 22.0041,153.178 66.1718,202.679 44.1677,49.5004 103.501,74.162 178.495,74.162 70.8313,0 129.013,-25.1577 174.332,-75.6679 45.1775,-50.3331 67.8371,-117.497 67.8371,-201.173 0,-86.1562 -22.323,-154.33 -67.0045,-203.99 -44.4866,-49.837 -103.997,-74.8352 -178.159,-74.8352zm2.00198 73.8254c100.826,0 151.336,68.3332 151.336,205 0,135.515 -50.8469,203.175 -152.346,203.175 -100.666,0 -150.822,-67.66 -150.822,-203.175 0,-136.666 50.4925,-205 151.832,-205z"
140
+ id="path69" /></glyph><glyph
141
+ unicode="h"
142
+ horiz-adv-x="600"
143
+ id="glyph71"><path
144
+ d="M433.173 0l0 345.174c0,84.668 -38.835,126.993 -116.345,126.993 -99.8335,0 -149.83,-64.8253 -149.83,-194.334l0 -277.833 -88.8314 0 0 759.833 88.8314 0 0 -225.657 -3.8268 -70.3352 4.83665 0c33.4845,54.6559 88.1582,81.9928 163.986,81.9928 126.674,0 190.011,-65.1619 190.011,-195.663l0 -350.17 -88.8314 0z"
145
+ id="path73" /></glyph><glyph
146
+ unicode="u"
147
+ horiz-adv-x="600"
148
+ id="glyph75"><path
149
+ d="M450.167 0l-13.181 71.8295 -4.81887 0c-34.1573,-54.5099 -88.4971,-81.6656 -163.161,-81.6656 -127.161,0 -190.827,65.3382 -190.827,195.844l0 350.162 88.8089 0 0 -345.173c0,-84.6703 38.3525,-126.991 115.171,-126.991 52.4973,0 90.6797,14.9952 114.831,45.1556 24.0093,30.0187 36.1699,79.6814 36.1699,148.676l0 278.332 88.8372 0 0 -536.17 -71.8295 0z"
150
+ id="path77" /></glyph><glyph
151
+ unicode="p"
152
+ horiz-adv-x="600"
153
+ id="glyph79"><path
154
+ d="M165.996 67.8326l-5.83933 0c3.85509,-42.0092 5.83933,-68.3429 5.83933,-79.0011l0 -229.01 -88.8372 0 0 776.348 71.8295 0 13.181 -72.3397 3.82675 0c35.8297,54.68 88.1569,82.0058 157.18,82.0058 65.4799,0 116.815,-24.3495 154.147,-72.9917 37.1903,-48.6706 55.8422,-116.503 55.8422,-203.838 0,-87.8451 -18.6519,-156.33 -56.154,-205.34 -37.332,-49.0107 -88.6672,-73.5019 -153.835,-73.5019 -67.3508,0 -119.678,25.9935 -157.18,77.6688zm0 221.158l0 -19.9841c0,-73.8421 11.3385,-126.509 34.0155,-157.832 22.4786,-31.5211 58.6484,-47.1682 108.169,-47.1682 88.4971,0 132.831,68.6547 132.831,205.992 0,134.843 -44.6737,202.166 -133.851,202.166 -49.4926,0 -84.9821,-14.3432 -106.667,-43.0013 -21.6566,-28.6581 -33.1651,-75.3161 -34.4974,-140.172z"
155
+ id="path81" /></glyph><glyph
156
+ unicode="v"
157
+ horiz-adv-x="600"
158
+ id="glyph83"><path
159
+ d="M243.154 0l-203.158 536.17 91.8419 0 117.155 -318.329c27.666,-75.3444 43.9934,-128.182 48.8406,-158.682l3.00471 0c2.15432,14.1731 18.6519,67.1807 49.3225,158.682l116.673 318.329 92.3238 0 -203.158 -536.17 -112.847 0z"
160
+ id="path85" /></glyph><glyph
161
+ unicode="r"
162
+ horiz-adv-x="600"
163
+ id="glyph87"><path
164
+ d="M517.178 524.009l-24.0093 -81.1837c-39.9966,14.6834 -76.5066,21.9967 -109.332,21.9967 -53.1776,0 -93.9963,-14.9952 -122.824,-45.1556 -28.8565,-30.1604 -43.1714,-73.672 -43.1714,-130.676l0 -288.99 -89.0073 0 0 536.17 72.3397 0 10.6582 -98.1632 3.99683 0c24.6613,38.6643 51.3351,66.3303 79.5113,82.9979 28.3179,16.6676 63.1555,24.8313 104.484,24.8313 38.5226,0 77.4987,-7.34169 117.354,-21.8266z"
165
+ id="path89" /></glyph><glyph
166
+ unicode="t"
167
+ horiz-adv-x="600"
168
+ id="glyph91"><path
169
+ d="M497.998 73.1699l0 -67.3411c-42.3251,-10.3288 -83.3392,-15.6615 -122.989,-15.6615 -117.834,0 -176.848,56.0024 -176.848,168.007l0 310.999 -130.324 0 0 45.9925 130.324 23.8289 37.6657 140.174 51.3429 0 0 -143.009 213.823 0 0 -66.9867 -213.823 0 0 -310.999c0,-63.5143 31.1636,-95.174 93.6681,-95.174 30.3309,0 69.3253,3.33073 117.16,10.1694z"
170
+ id="path93" /></glyph><glyph
171
+ unicode="y"
172
+ horiz-adv-x="600"
173
+ id="glyph95"><path
174
+ d="M40.0043 536.16l91.8255 0 128.003 -319.325c26.6636,-66.8273 41.1736,-114.007 43.335,-141.663l2.99412 0c7.51187,36.4964 22.1636,83.9948 44.0082,142.655l116.664 318.333 92.3393 0 -232 -605.999c-21.8447,-56.6579 -47.1795,-99.1602 -76.1817,-127.666 -28.9845,-28.4884 -68.9887,-42.6618 -120.154,-42.6618 -28.0101,0 -55.3292,2.67522 -82.0105,8.16739l0 70.8313c20.1793,-3.8268 42.3429,-5.82879 66.3312,-5.82879 31.3408,0 55.6835,6.66147 73.0104,20.0021 17.5041,13.3229 33.0062,36.3369 46.6657,68.8293l28.329 73.3293 -223.159 540.996z"
175
+ id="path97" /></glyph></font><style
176
+ type="text/css"
177
+ id="style99">
178
+
179
+ @font-face { font-family:&quot;Droid Sans Mono&quot;;src:url(&quot;#FontID0&quot;) format(svg)}
180
+ .fil2 {fill:black}
181
+ .fil0 {fill:#2B2828}
182
+ .fil1 {fill:#3465A4}
183
+ .fnt1 {font-weight:normal;font-size:41.6669;font-family:'Droid Sans Mono'}
184
+ .fnt0 {font-weight:normal;font-size:66.6661;font-family:'Droid Sans Mono'}
185
+ .fnt3 {font-weight:normal;font-size:125;font-family:'Droid Sans Mono'}
186
+ .fnt2 {font-weight:normal;font-size:150;font-family:'Droid Sans Mono'}
187
+
188
+ </style><linearGradient
189
+ y2="141.7533"
190
+ x2="132.27631"
191
+ y1="215.5488"
192
+ x1="174.0737"
193
+ gradientUnits="userSpaceOnUse"
194
+ id="linearGradient3448"
195
+ xlink:href="#XMLID_17_-9"
196
+ inkscape:collect="always" /><linearGradient
197
+ id="XMLID_17_-9"
198
+ gradientUnits="userSpaceOnUse"
199
+ x1="174.0737"
200
+ y1="215.5488"
201
+ x2="132.27631"
202
+ y2="141.7533"><stop
203
+ offset="0"
204
+ style="stop-color:#FB7655"
205
+ id="stop3272-4" /><stop
206
+ offset="0"
207
+ style="stop-color:#FB7655"
208
+ id="stop3274-5" /><stop
209
+ offset="0.41"
210
+ style="stop-color:#E42B1E"
211
+ id="stop3276-1" /><stop
212
+ offset="0.99"
213
+ style="stop-color:#990000"
214
+ id="stop3278-0" /><stop
215
+ offset="1"
216
+ style="stop-color:#990000"
217
+ id="stop3280-3" /></linearGradient><linearGradient
218
+ id="XMLID_18_-7"
219
+ gradientUnits="userSpaceOnUse"
220
+ x1="194.895"
221
+ y1="153.5576"
222
+ x2="141.0276"
223
+ y2="117.4093"><stop
224
+ offset="0"
225
+ style="stop-color:#871101"
226
+ id="stop3285-8" /><stop
227
+ offset="0"
228
+ style="stop-color:#871101"
229
+ id="stop3287-8" /><stop
230
+ offset="0.99"
231
+ style="stop-color:#911209"
232
+ id="stop3289-6" /><stop
233
+ offset="1"
234
+ style="stop-color:#911209"
235
+ id="stop3291-0" /></linearGradient><linearGradient
236
+ id="XMLID_19_-4"
237
+ gradientUnits="userSpaceOnUse"
238
+ x1="151.79539"
239
+ y1="217.7852"
240
+ x2="97.929703"
241
+ y2="181.638"><stop
242
+ offset="0"
243
+ style="stop-color:#871101"
244
+ id="stop3296-6" /><stop
245
+ offset="0"
246
+ style="stop-color:#871101"
247
+ id="stop3298-7" /><stop
248
+ offset="0.99"
249
+ style="stop-color:#911209"
250
+ id="stop3300-6" /><stop
251
+ offset="1"
252
+ style="stop-color:#911209"
253
+ id="stop3302-0" /></linearGradient><linearGradient
254
+ id="XMLID_20_-9"
255
+ gradientUnits="userSpaceOnUse"
256
+ x1="38.696301"
257
+ y1="127.3906"
258
+ x2="47.046902"
259
+ y2="181.66141"><stop
260
+ offset="0"
261
+ style="stop-color:#FFFFFF"
262
+ id="stop3307-7" /><stop
263
+ offset="0"
264
+ style="stop-color:#FFFFFF"
265
+ id="stop3309-5" /><stop
266
+ offset="0.23"
267
+ style="stop-color:#E57252"
268
+ id="stop3311-9" /><stop
269
+ offset="0.46"
270
+ style="stop-color:#DE3B20"
271
+ id="stop3313-7" /><stop
272
+ offset="0.99"
273
+ style="stop-color:#A60003"
274
+ id="stop3315-8" /><stop
275
+ offset="1"
276
+ style="stop-color:#A60003"
277
+ id="stop3317-5" /></linearGradient><linearGradient
278
+ id="XMLID_21_-3"
279
+ gradientUnits="userSpaceOnUse"
280
+ x1="96.132797"
281
+ y1="76.715302"
282
+ x2="99.209602"
283
+ y2="132.1021"><stop
284
+ offset="0"
285
+ style="stop-color:#FFFFFF"
286
+ id="stop3322-3" /><stop
287
+ offset="0"
288
+ style="stop-color:#FFFFFF"
289
+ id="stop3324-8" /><stop
290
+ offset="0.23"
291
+ style="stop-color:#E4714E"
292
+ id="stop3326-3" /><stop
293
+ offset="0.56"
294
+ style="stop-color:#BE1A0D"
295
+ id="stop3328-7" /><stop
296
+ offset="0.99"
297
+ style="stop-color:#A80D00"
298
+ id="stop3330-9" /><stop
299
+ offset="1"
300
+ style="stop-color:#A80D00"
301
+ id="stop3332-3" /></linearGradient><linearGradient
302
+ id="XMLID_22_-7"
303
+ gradientUnits="userSpaceOnUse"
304
+ x1="147.103"
305
+ y1="25.521"
306
+ x2="156.3141"
307
+ y2="65.216202"><stop
308
+ offset="0"
309
+ style="stop-color:#FFFFFF"
310
+ id="stop3337-8" /><stop
311
+ offset="0"
312
+ style="stop-color:#FFFFFF"
313
+ id="stop3339-7" /><stop
314
+ offset="0.18"
315
+ style="stop-color:#E46342"
316
+ id="stop3341-4" /><stop
317
+ offset="0.4"
318
+ style="stop-color:#C82410"
319
+ id="stop3343-1" /><stop
320
+ offset="0.99"
321
+ style="stop-color:#A80D00"
322
+ id="stop3345-9" /><stop
323
+ offset="1"
324
+ style="stop-color:#A80D00"
325
+ id="stop3347-0" /></linearGradient><linearGradient
326
+ id="XMLID_23_-9"
327
+ gradientUnits="userSpaceOnUse"
328
+ x1="118.9761"
329
+ y1="11.5415"
330
+ x2="158.66859"
331
+ y2="-8.3048"><stop
332
+ offset="0"
333
+ style="stop-color:#FFFFFF"
334
+ id="stop3352-8" /><stop
335
+ offset="0"
336
+ style="stop-color:#FFFFFF"
337
+ id="stop3354-8" /><stop
338
+ offset="0.54"
339
+ style="stop-color:#C81F11"
340
+ id="stop3356-5" /><stop
341
+ offset="0.99"
342
+ style="stop-color:#BF0905"
343
+ id="stop3358-8" /><stop
344
+ offset="1"
345
+ style="stop-color:#BF0905"
346
+ id="stop3360-4" /></linearGradient><linearGradient
347
+ id="XMLID_24_-3"
348
+ gradientUnits="userSpaceOnUse"
349
+ x1="3.9033"
350
+ y1="113.5547"
351
+ x2="7.1701999"
352
+ y2="146.2628"><stop
353
+ offset="0"
354
+ style="stop-color:#FFFFFF"
355
+ id="stop3365-7" /><stop
356
+ offset="0"
357
+ style="stop-color:#FFFFFF"
358
+ id="stop3367-1" /><stop
359
+ offset="0.31"
360
+ style="stop-color:#DE4024"
361
+ id="stop3369-3" /><stop
362
+ offset="0.99"
363
+ style="stop-color:#BF190B"
364
+ id="stop3371-8" /><stop
365
+ offset="1"
366
+ style="stop-color:#BF190B"
367
+ id="stop3373-0" /></linearGradient><linearGradient
368
+ id="XMLID_25_-9"
369
+ gradientUnits="userSpaceOnUse"
370
+ x1="-18.5557"
371
+ y1="155.10451"
372
+ x2="135.0152"
373
+ y2="-2.8092999"><stop
374
+ offset="0"
375
+ style="stop-color:#BD0012"
376
+ id="stop3380-7" /><stop
377
+ offset="0"
378
+ style="stop-color:#BD0012"
379
+ id="stop3382-9" /><stop
380
+ offset="0.07"
381
+ style="stop-color:#FFFFFF"
382
+ id="stop3384-9" /><stop
383
+ offset="0.17"
384
+ style="stop-color:#FFFFFF"
385
+ id="stop3386-3" /><stop
386
+ offset="0.27"
387
+ style="stop-color:#C82F1C"
388
+ id="stop3388-2" /><stop
389
+ offset="0.33"
390
+ style="stop-color:#820C01"
391
+ id="stop3390-4" /><stop
392
+ offset="0.46"
393
+ style="stop-color:#A31601"
394
+ id="stop3392-3" /><stop
395
+ offset="0.72"
396
+ style="stop-color:#B31301"
397
+ id="stop3394-7" /><stop
398
+ offset="0.99"
399
+ style="stop-color:#E82609"
400
+ id="stop3396-1" /><stop
401
+ offset="1"
402
+ style="stop-color:#E82609"
403
+ id="stop3398-2" /></linearGradient><linearGradient
404
+ id="XMLID_26_-2"
405
+ gradientUnits="userSpaceOnUse"
406
+ x1="99.074699"
407
+ y1="171.0332"
408
+ x2="52.817699"
409
+ y2="159.61659"><stop
410
+ offset="0"
411
+ style="stop-color:#8C0C01"
412
+ id="stop3403-0" /><stop
413
+ offset="0"
414
+ style="stop-color:#8C0C01"
415
+ id="stop3405-2" /><stop
416
+ offset="0.54"
417
+ style="stop-color:#990C00"
418
+ id="stop3407-1" /><stop
419
+ offset="0.99"
420
+ style="stop-color:#A80D0E"
421
+ id="stop3409-7" /><stop
422
+ offset="1"
423
+ style="stop-color:#A80D0E"
424
+ id="stop3411-5" /></linearGradient><linearGradient
425
+ id="XMLID_27_-1"
426
+ gradientUnits="userSpaceOnUse"
427
+ x1="178.52589"
428
+ y1="115.5146"
429
+ x2="137.43269"
430
+ y2="78.683998"><stop
431
+ offset="0"
432
+ style="stop-color:#7E110B"
433
+ id="stop3416-7" /><stop
434
+ offset="0"
435
+ style="stop-color:#7E110B"
436
+ id="stop3418-4" /><stop
437
+ offset="0.99"
438
+ style="stop-color:#9E0C00"
439
+ id="stop3420-1" /><stop
440
+ offset="1"
441
+ style="stop-color:#9E0C00"
442
+ id="stop3422-7" /></linearGradient><linearGradient
443
+ id="XMLID_28_-1"
444
+ gradientUnits="userSpaceOnUse"
445
+ x1="193.6235"
446
+ y1="47.937"
447
+ x2="173.15421"
448
+ y2="26.053801"><stop
449
+ offset="0"
450
+ style="stop-color:#79130D"
451
+ id="stop3427-1" /><stop
452
+ offset="0"
453
+ style="stop-color:#79130D"
454
+ id="stop3429-1" /><stop
455
+ offset="0.99"
456
+ style="stop-color:#9E120B"
457
+ id="stop3431-7" /><stop
458
+ offset="1"
459
+ style="stop-color:#9E120B"
460
+ id="stop3433-0" /></linearGradient><radialGradient
461
+ id="XMLID_29_-4"
462
+ cx="143.8315"
463
+ cy="79.388199"
464
+ r="50.357601"
465
+ gradientUnits="userSpaceOnUse"><stop
466
+ offset="0"
467
+ style="stop-color:#A80D00"
468
+ id="stop3440-0" /><stop
469
+ offset="0"
470
+ style="stop-color:#A80D00"
471
+ id="stop3442-8" /><stop
472
+ offset="0.99"
473
+ style="stop-color:#7E0E08"
474
+ id="stop3444-5" /><stop
475
+ offset="1"
476
+ style="stop-color:#7E0E08"
477
+ id="stop3446-1" /></radialGradient><radialGradient
478
+ id="XMLID_30_-6"
479
+ cx="74.0923"
480
+ cy="145.75101"
481
+ r="66.943703"
482
+ gradientUnits="userSpaceOnUse"><stop
483
+ offset="0"
484
+ style="stop-color:#A30C00"
485
+ id="stop3451-6" /><stop
486
+ offset="0"
487
+ style="stop-color:#A30C00"
488
+ id="stop3453-2" /><stop
489
+ offset="0.99"
490
+ style="stop-color:#800E08"
491
+ id="stop3455-1" /><stop
492
+ offset="1"
493
+ style="stop-color:#800E08"
494
+ id="stop3457-9" /></radialGradient><linearGradient
495
+ id="XMLID_31_-6"
496
+ gradientUnits="userSpaceOnUse"
497
+ x1="26.669901"
498
+ y1="197.33591"
499
+ x2="9.9886999"
500
+ y2="140.742"><stop
501
+ offset="0"
502
+ style="stop-color:#8B2114"
503
+ id="stop3462-4" /><stop
504
+ offset="0"
505
+ style="stop-color:#8B2114"
506
+ id="stop3464-8" /><stop
507
+ offset="0.43"
508
+ style="stop-color:#9E100A"
509
+ id="stop3466-0" /><stop
510
+ offset="0.99"
511
+ style="stop-color:#B3100C"
512
+ id="stop3468-8" /><stop
513
+ offset="1"
514
+ style="stop-color:#B3100C"
515
+ id="stop3470-1" /></linearGradient><linearGradient
516
+ id="XMLID_32_-0"
517
+ gradientUnits="userSpaceOnUse"
518
+ x1="154.6411"
519
+ y1="9.7979002"
520
+ x2="192.039"
521
+ y2="26.305901"><stop
522
+ offset="0"
523
+ style="stop-color:#B31000"
524
+ id="stop3475-2" /><stop
525
+ offset="0"
526
+ style="stop-color:#B31000"
527
+ id="stop3477-2" /><stop
528
+ offset="0.44"
529
+ style="stop-color:#910F08"
530
+ id="stop3479-9" /><stop
531
+ offset="0.99"
532
+ style="stop-color:#791C12"
533
+ id="stop3481-7" /><stop
534
+ offset="1"
535
+ style="stop-color:#791C12"
536
+ id="stop3483-5" /></linearGradient><linearGradient
537
+ y2="141.7533"
538
+ x2="132.27631"
539
+ y1="215.5488"
540
+ x1="174.0737"
541
+ gradientUnits="userSpaceOnUse"
542
+ id="linearGradient6236"
543
+ xlink:href="#XMLID_17_-9"
544
+ inkscape:collect="always" /><linearGradient
545
+ inkscape:collect="always"
546
+ xlink:href="#XMLID_25_-9"
547
+ id="linearGradient6479"
548
+ gradientUnits="userSpaceOnUse"
549
+ x1="-18.5557"
550
+ y1="155.10451"
551
+ x2="135.0152"
552
+ y2="-2.8092999"
553
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
554
+ inkscape:collect="always"
555
+ xlink:href="#XMLID_26_-2"
556
+ id="linearGradient6481"
557
+ gradientUnits="userSpaceOnUse"
558
+ x1="99.074699"
559
+ y1="171.0332"
560
+ x2="52.817699"
561
+ y2="159.61659"
562
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
563
+ inkscape:collect="always"
564
+ xlink:href="#XMLID_27_-1"
565
+ id="linearGradient6483"
566
+ gradientUnits="userSpaceOnUse"
567
+ x1="178.52589"
568
+ y1="115.5146"
569
+ x2="137.43269"
570
+ y2="78.683998"
571
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
572
+ inkscape:collect="always"
573
+ xlink:href="#XMLID_28_-1"
574
+ id="linearGradient6485"
575
+ gradientUnits="userSpaceOnUse"
576
+ x1="193.6235"
577
+ y1="47.937"
578
+ x2="173.15421"
579
+ y2="26.053801"
580
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><radialGradient
581
+ inkscape:collect="always"
582
+ xlink:href="#XMLID_29_-4"
583
+ id="radialGradient6487"
584
+ gradientUnits="userSpaceOnUse"
585
+ cx="143.8315"
586
+ cy="79.388199"
587
+ r="50.357601"
588
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><radialGradient
589
+ inkscape:collect="always"
590
+ xlink:href="#XMLID_30_-6"
591
+ id="radialGradient6489"
592
+ gradientUnits="userSpaceOnUse"
593
+ cx="74.0923"
594
+ cy="145.75101"
595
+ r="66.943703"
596
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
597
+ inkscape:collect="always"
598
+ xlink:href="#XMLID_31_-6"
599
+ id="linearGradient6491"
600
+ gradientUnits="userSpaceOnUse"
601
+ x1="26.669901"
602
+ y1="197.33591"
603
+ x2="9.9886999"
604
+ y2="140.742"
605
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
606
+ inkscape:collect="always"
607
+ xlink:href="#XMLID_32_-0"
608
+ id="linearGradient6493"
609
+ gradientUnits="userSpaceOnUse"
610
+ x1="154.6411"
611
+ y1="9.7979002"
612
+ x2="192.039"
613
+ y2="26.305901"
614
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
615
+ inkscape:collect="always"
616
+ xlink:href="#XMLID_18_-7"
617
+ id="linearGradient6495"
618
+ gradientUnits="userSpaceOnUse"
619
+ x1="194.895"
620
+ y1="153.5576"
621
+ x2="141.0276"
622
+ y2="117.4093" /><linearGradient
623
+ inkscape:collect="always"
624
+ xlink:href="#XMLID_19_-4"
625
+ id="linearGradient6497"
626
+ gradientUnits="userSpaceOnUse"
627
+ x1="151.79539"
628
+ y1="217.7852"
629
+ x2="97.929703"
630
+ y2="181.638" /><linearGradient
631
+ inkscape:collect="always"
632
+ xlink:href="#XMLID_20_-9"
633
+ id="linearGradient6499"
634
+ gradientUnits="userSpaceOnUse"
635
+ x1="38.696301"
636
+ y1="127.3906"
637
+ x2="47.046902"
638
+ y2="181.66141" /><linearGradient
639
+ inkscape:collect="always"
640
+ xlink:href="#XMLID_21_-3"
641
+ id="linearGradient6501"
642
+ gradientUnits="userSpaceOnUse"
643
+ x1="96.132797"
644
+ y1="76.715302"
645
+ x2="99.209602"
646
+ y2="132.1021" /><linearGradient
647
+ inkscape:collect="always"
648
+ xlink:href="#XMLID_22_-7"
649
+ id="linearGradient6503"
650
+ gradientUnits="userSpaceOnUse"
651
+ x1="147.103"
652
+ y1="25.521"
653
+ x2="156.3141"
654
+ y2="65.216202" /><linearGradient
655
+ inkscape:collect="always"
656
+ xlink:href="#XMLID_23_-9"
657
+ id="linearGradient6505"
658
+ gradientUnits="userSpaceOnUse"
659
+ x1="118.9761"
660
+ y1="11.5415"
661
+ x2="158.66859"
662
+ y2="-8.3048" /><linearGradient
663
+ inkscape:collect="always"
664
+ xlink:href="#XMLID_24_-3"
665
+ id="linearGradient6507"
666
+ gradientUnits="userSpaceOnUse"
667
+ x1="3.9033"
668
+ y1="113.5547"
669
+ x2="7.1701999"
670
+ y2="146.2628" /></defs><text
671
+ style="font-size:150px;font-weight:normal;fill:#000000;font-family:Droid Sans Mono"
672
+ id="text109"
673
+ class="fil2 fnt2"
674
+ y="116.84798"
675
+ x="179.64279">IRuby: <tspan
676
+ style="fill:#800000"
677
+ id="tspan6534">Notebook</tspan></text>
678
+ <polygon
679
+ style="fill:url(#linearGradient6236);fill-rule:evenodd"
680
+ clip-rule="evenodd"
681
+ points="198.13,39.95 153.5,130.41 40.38,197.58 186.849,187.641 "
682
+ id="polygon3282"
683
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
684
+ style="fill:url(#linearGradient6495);fill-rule:evenodd"
685
+ clip-rule="evenodd"
686
+ points="174.5,100.65 140.209,145.93 187.089,187.54 "
687
+ id="polygon3293"
688
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
689
+ style="fill:url(#linearGradient6497);fill-rule:evenodd"
690
+ clip-rule="evenodd"
691
+ points="95.03,180.3 40.87,197.391 187.259,187.54 "
692
+ id="polygon3304"
693
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
694
+ style="fill:url(#linearGradient6499);fill-rule:evenodd"
695
+ clip-rule="evenodd"
696
+ points="64.04,121.93 13.34,132.771 41,197.41 "
697
+ id="polygon3319"
698
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
699
+ style="fill:url(#linearGradient6501);fill-rule:evenodd"
700
+ clip-rule="evenodd"
701
+ points="119,63.14 58.33,120.01 140.2,146.18 "
702
+ id="polygon3334"
703
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
704
+ style="fill:url(#linearGradient6503);fill-rule:evenodd"
705
+ clip-rule="evenodd"
706
+ points="135.97,17.47 120,69.1 193.32,64.31 "
707
+ id="polygon3349"
708
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
709
+ style="fill:url(#linearGradient6505);fill-rule:evenodd"
710
+ clip-rule="evenodd"
711
+ points="132.77,19.41 111.49,0.52 166.5,0.77 "
712
+ id="polygon3362"
713
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
714
+ style="fill:url(#linearGradient6507);fill-rule:evenodd"
715
+ clip-rule="evenodd"
716
+ points="14.13,132.32 2.7,101.62 0,158.09 "
717
+ id="polygon3375"
718
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><path
719
+ style="fill:#ffffff;fill-rule:evenodd"
720
+ inkscape:connector-curvature="0"
721
+ clip-rule="evenodd"
722
+ d="M 1.41207,73.259327 9.78257,97.002459 46.15425,88.842299 87.67923,50.250629 99.39795,13.02808 80.94572,-8e-4 49.57451,11.739741 c -9.88375,9.193 -29.06313,27.382481 -29.7546,27.724581 -0.6842,0.34938 -12.66495,22.993412 -18.40784,33.795005 z"
723
+ id="path3377" /><path
724
+ style="fill:url(#linearGradient6479);fill-rule:evenodd"
725
+ inkscape:connector-curvature="0"
726
+ clip-rule="evenodd"
727
+ d="M 30.80346,30.606145 C 52.22469,9.366884 79.84008,-3.181593 90.43786,7.510822 101.02911,18.203238 89.79734,44.188202 68.37612,65.420173 46.95491,86.652139 19.68161,99.892099 9.0911,89.199679 -1.50669,78.514549 9.38224,51.838115 30.80346,30.606145 z"
728
+ id="path3400" /><path
729
+ style="fill:url(#linearGradient6481);fill-rule:evenodd"
730
+ inkscape:connector-curvature="0"
731
+ clip-rule="evenodd"
732
+ d="m 29.84268,143.66622 16.6391,-55.114331 55.25991,17.752751 c -19.98003,18.73537 -42.20191,34.57383 -71.89901,37.36158 z"
733
+ id="path3413" /><path
734
+ style="fill:url(#linearGradient6483);fill-rule:evenodd"
735
+ inkscape:connector-curvature="0"
736
+ clip-rule="evenodd"
737
+ d="m 87.75203,50.142169 14.18618,56.191581 c 16.69007,-17.548951 31.66963,-36.415343 39.00584,-59.750855 l -53.19202,3.559274 z"
738
+ id="path3424" /><path
739
+ style="fill:url(#linearGradient6485);fill-rule:evenodd"
740
+ inkscape:connector-curvature="0"
741
+ clip-rule="evenodd"
742
+ d="M 140.7992,46.866756 C 146.47659,29.732691 147.78676,5.152522 121.01496,0.588769 L 99.04784,12.722372 140.7992,46.866756 z"
743
+ id="path3435" /><path
744
+ style="fill:#9e1209;fill-rule:evenodd"
745
+ inkscape:connector-curvature="0"
746
+ clip-rule="evenodd"
747
+ d="m 0,114.82071 c 0.7861,28.27849 21.1883,28.69992 29.87907,28.94813 L 9.80442,96.885989 0,114.82071 z"
748
+ id="path3437" /><path
749
+ style="fill:url(#radialGradient6487);fill-rule:evenodd"
750
+ inkscape:connector-curvature="0"
751
+ clip-rule="evenodd"
752
+ d="m 87.83136,50.229523 c 12.82508,7.882825 38.67248,23.714005 39.19654,24.005157 0.81449,0.458556 11.14369,-17.417938 13.48744,-27.520772 l -52.68398,3.515615 z"
753
+ id="path3448" /><path
754
+ style="fill:url(#radialGradient6489);fill-rule:evenodd"
755
+ inkscape:connector-curvature="0"
756
+ clip-rule="evenodd"
757
+ d="m 46.45995,88.551889 22.24371,42.915221 c 13.15262,-7.13313 23.45198,-15.82391 32.88517,-25.13336 L 46.45995,88.551889 z"
758
+ id="path3459" /><path
759
+ style="fill:url(#linearGradient6491);fill-rule:evenodd"
760
+ inkscape:connector-curvature="0"
761
+ clip-rule="evenodd"
762
+ d="M 9.71706,96.944229 6.56538,134.47322 c 5.9467,8.12302 14.12797,8.82906 22.70955,8.19581 C 23.06621,127.21634 10.6633,96.318259 9.71706,96.944229 z"
763
+ id="path3472" /><path
764
+ style="fill:url(#linearGradient6493);fill-rule:evenodd"
765
+ inkscape:connector-curvature="0"
766
+ clip-rule="evenodd"
767
+ d="m 98.91756,12.816992 44.18899,6.20146 C 140.74825,9.024795 133.50594,2.575855 121.16126,0.559655 l -22.2437,12.257337 z"
768
+ id="path3485" /></svg>