rutui 0.7 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 09bb43480dcae85b5dbebb214e1980643f4d8d88
4
- data.tar.gz: 487362e697b37a46373b331782ad477fe73117b5
3
+ metadata.gz: 32f62da721594439c18afb7d612d28eddc7e198e
4
+ data.tar.gz: bb934ac2186cde9ca57bcf1192816750d9bc5ecf
5
5
  SHA512:
6
- metadata.gz: a38da746bfe1b3ae94da639959d9b19b00af7b8104ce6d83958aaa5b48cf6a0f251a78a494a8c6ac6e4953faed6821a56cd4f31fd993109b0a3a7b1d8b55d122
7
- data.tar.gz: c8bf6ac48905283217387fe3021a7f0a9dc32c80294fb4bd6e6f6ecef2c1d6af32c14364a7181014837f16042a9dcf57936db01d531fe0c505ee25d2ff695f2b
6
+ metadata.gz: cc23bc2ab75c78fb6c71bb8d73bb7d709396c7e170e143ca8d172b3a1c9ba29938b74b1e337fa25c0e065673f6544724d7805109e2e58daa3c55fc5f4d07e9a3
7
+ data.tar.gz: 2a81a70f0b9116a48134ccd93cddd534728912cfcf28b169be75ac038ad32d97f731dced95ef34c687bd12dd19b2deaa2f82cb07d9cfee992ced92bfad85dc6e
@@ -0,0 +1 @@
1
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rutui.gemspec
4
+ gemspec
@@ -0,0 +1,79 @@
1
+ ![RuTui Logo](http://i.imgur.com/cu0yNM3.png "RuTui Logo")
2
+
3
+ # RuTui
4
+
5
+ RuTui is a lightweight, pure ruby alternative to known command line interfaces like nCurses. Most CLI/TUI Frameworks sit on an C like approach, are very limited or are just not beautiful enough to use. This lib aims to be different, to be easy, modular and just Ruby like to handle. There is built-in color support and input control which sits on top of Unix standards.
6
+
7
+ [**Take a look at the wiki**](https://github.com/b1nary/rutui/wiki)
8
+
9
+ ## Features
10
+
11
+ - Fully text based interfaces
12
+ - No dependencies (except ruby)
13
+ - 255 Colors (at least in Unix)
14
+ - FIGlet font support
15
+ - Own dynamic image format
16
+ - Sprites (with animation)
17
+ - Basic theming
18
+ - Prebuild Elements to draw
19
+ - Tables
20
+ - ...
21
+
22
+ You can use this in many different application purposes. You can create simple CLIs for your scripts, you can make awesome ASCII based data visualizations. Its also basically a small game engine.
23
+
24
+ ## Installation
25
+
26
+ ``` bash
27
+ sudo gem install rutui
28
+ ```
29
+
30
+ If you are on windows please take a look at [Ansicon](https://github.com/adoxa/ansicon).
31
+
32
+ ## Todo
33
+
34
+ * Test on windows/mac
35
+ * "Radio" object_
36
+ * "Selectbox" object_
37
+
38
+ ## Changelog
39
+
40
+ * 0.7.2
41
+ * Push version number because rubygems already took 7.1
42
+ * 0.7.1
43
+ * Merge [pull request](https://github.com/b1nary/rutui/pull/6) by @lmc (improve draw performance by a lot!)
44
+ * 0.7
45
+ * Merge [pull request](https://github.com/b1nary/rutui/pull/1) from @jaydg
46
+ * 0.6
47
+ * Fixing transparency on multiple objects
48
+ * Removing a flicker from slower devices
49
+ * Fixing figlet problems
50
+ * Added text style options (bold/italic/...)
51
+ * Added multiline text support
52
+ * Add focus pixel to textfield
53
+ * Added "Checkbox" object
54
+ * 0.5
55
+ * Fixed refactoring bugs
56
+ * Added "Dot" object
57
+ * Add color inheritance (trough -1) to objects
58
+ * Added Timeout for Screenmanager for a minimal time per operation
59
+ * 0.4
60
+ * Refactor structure
61
+ * better printing (much less flicker)
62
+ * New objects: [Tables](https://github.com/b1nary/rutui/wiki/Tables), [Textfields](https://github.com/b1nary/rutui/wiki/Textfields)
63
+ * Adding cmd.exe support (colors only trough [Ansicon](https://github.com/adoxa/ansicon))
64
+ * 0.3
65
+ * Fixes, fixes, fixes
66
+ * 0.2 (beta)
67
+ * Rolling updates
68
+ * 0.1 (alpha)
69
+ * Rolling updates
70
+
71
+ ## License
72
+ This Project is licensed under the [MIT License](http://de.wikipedia.org/wiki/MIT-Lizenz)
73
+
74
+ > Copyright (c) 2012 Roman Pramberger
75
+ > Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
76
+
77
+ > The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
78
+
79
+ > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.dirname(__FILE__) + '/../lib'
4
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
+
6
+ require 'rutui'
7
+
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.dirname(__FILE__) + '/../lib'
4
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
+
6
+ require 'rutui'
7
+
8
+ radius = ARGV[0].to_i
9
+ radius = 6 if radius.nil?
10
+
11
+ screen = RuTui::Screen.new RuTui::Pixel.new(nil,nil," ")
12
+ screen.add RuTui::Circle.new({ :x => 2, :y => 2, :radius => radius, :pixel => RuTui::Pixel.new(42,230,"%") })
13
+ screen.draw
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.dirname(__FILE__) + '/../lib'
4
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
+
6
+ require 'rutui'
7
+
8
+ 255.times do |i|
9
+ print "#{RuTui::Ansi.fg(i)}#{i}\t"
10
+ end
11
+
12
+ print RuTui::Ansi.clear_color
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Hello world deeper example for RuTui
4
+ #
5
+
6
+ lib_dir = File.dirname(__FILE__) + '/../lib'
7
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
8
+
9
+ require 'rutui'
10
+
11
+ # Switch theme
12
+ RuTui::Theme.use :light
13
+
14
+ # Create Screen
15
+ # You should remember this from the first hallo world
16
+ screen = RuTui::Screen.new
17
+
18
+ # Lets get the shells size
19
+ size = RuTui::Screen.size
20
+
21
+ # Lets create a box again, this time stick it to the middle
22
+ box = RuTui::Box.new({ :x => size[1]/2-13, :y => 4, :width => 26, :height => 5 })
23
+
24
+ # add it static
25
+ screen.add_static box
26
+
27
+ # Now lets create an text element into the box!
28
+ text = RuTui::Text.new( :x => size[1]/2-11, :y => 6, :text => "You pressed: nil (nil)" )
29
+ last = RuTui::Text.new( :x => size[1]/2-2, :y => 12, :text => "Last: nil (nil)")
30
+ lost = RuTui::Text.new( :x => size[1]/2-2, :y => 13, :text => "Last: nil (nil)")
31
+
32
+ # add the text as dynamic object
33
+ screen.add text
34
+ screen.add last
35
+ screen.add lost
36
+
37
+ # Add some info, may somebody would'nt find out else
38
+ info = RuTui::Text.new( :x => 1, :y => 1, :text => "Press any key. Use q or CTRL+C to close" )
39
+ screen.add_static info
40
+
41
+ # Create loop
42
+ # it will automatically redraw after each key input
43
+ RuTui::ScreenManager.loop({ :autodraw => true }) do |key|
44
+ break if key == :ctrl_c or key == "q" # Exit on STRG+C or "q"
45
+ lost.set_text last.get_text
46
+ last.set_text text.get_text
47
+ key_desc = key.class == Symbol ? key.to_s.sub('_', '+').capitalize : key
48
+ text.set_text "You pressed: #{key_desc} (#{key.ord unless key.class == Symbol})"
49
+ end
50
+
51
+ # this was the a little deeper hello world example ;)
52
+ print RuTui::Ansi.clear_color + RuTui::Ansi.clear
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Hello world example for RuTui
4
+ #
5
+
6
+ lib_dir = File.dirname(__FILE__) + '/../lib'
7
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
8
+
9
+ require 'rutui'
10
+
11
+ # Create Screen
12
+ # the first screen gets automatically the tag :default
13
+ # (which is also the default tag) and gets added to the ScreenManager
14
+ # anyway, thats not even important for now
15
+ screen = RuTui::Screen.new
16
+
17
+ # Lets create a box!
18
+ box = RuTui::Box.new({ :x => 2, :y => 2, :width => 16, :height => 3 })
19
+
20
+ # This box should be a static object
21
+ # We dont change it while using this screen
22
+ # so we can write it directly to the map
23
+ screen.add_static box
24
+
25
+ # Now lets create an text element into the box!
26
+ text = RuTui::Text.new( :x => 3, :y => 3, :text => "Hello world!", :foreground => 11 )
27
+
28
+ # Now lets add the text to the screen map
29
+ # this time its not static, so we can modify it later
30
+ screen.add text
31
+
32
+ # Lets draw the screen first time
33
+ screen.draw
34
+
35
+ # Lets wait for a key
36
+ a = RuTui::Input.getc
37
+
38
+ # and change the text of our text box
39
+ text.set_text "Yay!"
40
+
41
+ # and redraw
42
+ screen.draw
43
+
44
+ # Lets wait for a key again
45
+ a = RuTui::Input.getc
46
+
47
+ # Lets do a little more!
48
+ # Each Object which is dynamic, is moveable
49
+ text.move(-1,10)
50
+ box.move(-1,10) # This wont work because its static
51
+ # you can also text.set_position(x,y)
52
+
53
+ # we can even modify single pixel by default
54
+ text.set_pixel(0,0,RuTui::Pixel.new(2,4,"#"))
55
+ text.set_pixel(0,1,RuTui::Pixel.new(5,6,"@"))
56
+
57
+ # Or whats about the colors?
58
+ text.bg = 14
59
+ text.fg = 12
60
+
61
+ # and redraw
62
+ screen.draw
63
+
64
+ # this was the very basic hello world example ;)
65
+
66
+ print RuTui::Ansi.clear_color + RuTui::Ansi.clear
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.dirname(__FILE__) + '/../lib'
4
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
+
6
+ require 'rutui'
7
+
8
+ res_dir = File.dirname(__FILE__) + "/res/"
9
+ RuTui::Figlet.add :test_font, res_dir + "colossal.flf"
10
+
11
+ screen = RuTui::Screen.new
12
+ screen.add_static RuTui::Axx.new({ :x => 3, :y => 2, :file => res_dir + 'space-invader.axx' })
13
+ screen.add_static RuTui::Figlet.new({ :y => 2, :x => 18, :font => :test_font, :text => 'RuTui' })
14
+ screen.draw
15
+
16
+ print RuTui::Ansi.clear_color + RuTui::Ansi.clear
@@ -0,0 +1,1136 @@
1
+ flf2a$ 11 8 20 32 13
2
+ Colossal.flf (Jonathon - jon@mq.edu.au)
3
+ 8 June 1994
4
+
5
+ Explanation of first line:
6
+ flf2 - "magic number" for file identification
7
+ a - should always be `a', for now
8
+ $ - the "hardblank" -- prints as a blank, but can't be smushed
9
+ 11 - height of a character
10
+ 8 - height of a character, not including descenders
11
+ 20 - max line length (excluding comment lines) + a fudge factor
12
+ 32 - default smushmode for this font
13
+ 13 - number of comment lines
14
+
15
+ $ $@
16
+ $ $@
17
+ $ $@
18
+ $ $@
19
+ $ $@
20
+ $ $@
21
+ $ $@
22
+ $ $@
23
+ $ $@
24
+ $ $@
25
+ $ $@@
26
+ 888$@
27
+ 888$@
28
+ 888$@
29
+ 888$@
30
+ 888$@
31
+ Y8P$@
32
+ " $@
33
+ 888$@
34
+ @
35
+ @
36
+ @@
37
+ 88 88$@
38
+ 8P 8P$@
39
+ " " $@
40
+ $ $ @
41
+ $ $ @
42
+ $ $ @
43
+ $ $ @
44
+ $ $ @
45
+ $ $ @
46
+ $ $ @
47
+ $ $ @@
48
+ 888 888 $@
49
+ 888 888 $@
50
+ 888888888888$@
51
+ 888 888 $@
52
+ 888 888 $@
53
+ 888888888888$@
54
+ 888 888 $@
55
+ 888 888 $@
56
+ $@
57
+ $@
58
+ $@@
59
+ 88 $@
60
+ .d88888b. $@
61
+ d88P 88"88b$@
62
+ Y88b.88 $ @
63
+ "Y88888b.$ @
64
+ 88"88b$@
65
+ Y88b 88.88P$@
66
+ "Y88888P"$ @
67
+ 88 @
68
+ @
69
+ @@
70
+ d88b d88P$@
71
+ Y88P d88P $@
72
+ d88P $ @
73
+ d88P $ @
74
+ $ d88P $ @
75
+ $ d88P $ @
76
+ $d88P d88b$@
77
+ d88P Y88P$@
78
+ @
79
+ @
80
+ @@
81
+ .d8888b. $ @
82
+ d88P "88b $ @
83
+ Y88b. d88P $ @
84
+ "Y8888P" $ @
85
+ .d88P88K.d88P$@
86
+ 888" Y888P" $@
87
+ Y88b .d8888b $@
88
+ "Y8888P" Y88b@
89
+ @
90
+ @
91
+ @@
92
+ d8b$@
93
+ 88P$@
94
+ 8P $@
95
+ " $ @
96
+ $ @
97
+ $ @
98
+ $ @
99
+ $ @
100
+ $ @
101
+ $ @
102
+ $ @@
103
+ $.d88$@
104
+ $d88P"$@
105
+ d88P $ @
106
+ 888 $ @
107
+ 888 $ @
108
+ Y88b $ @
109
+ $Y88b.$@
110
+ $"Y88$@
111
+ @
112
+ @
113
+ @@
114
+ 88b.$ @
115
+ "Y88b$ @
116
+ Y88b$@
117
+ 888$@
118
+ 888$@
119
+ d88P$@
120
+ .d88P$ @
121
+ 88P"$ @
122
+ @
123
+ @
124
+ @@
125
+ @
126
+ o $ @
127
+ d8b $ @
128
+ d888b $ @
129
+ "Y888888888P"@
130
+ "Y88888P"$ @
131
+ d88P"Y88b $@
132
+ dP" "Yb$@
133
+ @
134
+ @
135
+ @@
136
+ $ @
137
+ $ @
138
+ $ @
139
+ 888 $@
140
+ 8888888$@
141
+ 888 $@
142
+ $ @
143
+ $ @
144
+ $ @
145
+ $ @
146
+ $ @@
147
+ $ @
148
+ $ @
149
+ $ @
150
+ $ @
151
+ $ @
152
+ $ @
153
+ d8b$@
154
+ 88P$@
155
+ 8P @
156
+ " @
157
+ @@
158
+ $ $ @
159
+ $ $ @
160
+ $ $ @
161
+ $ $ @
162
+ $ $ @
163
+ 888888$@
164
+ $ $ @
165
+ $ $ @
166
+ $ $ @
167
+ $ $ @
168
+ $ $ @@
169
+ $ @
170
+ $ @
171
+ $ @
172
+ $ @
173
+ $ @
174
+ $ @
175
+ d8b$@
176
+ Y8P$@
177
+ @
178
+ @
179
+ @@
180
+ $ d88P$@
181
+ $ d88P $@
182
+ $ d88P $ @
183
+ $ d88P $ @
184
+ $ d88P $ @
185
+ $ d88P $ @
186
+ $d88P $ @
187
+ d88P $ @
188
+ @
189
+ @
190
+ @@
191
+ $.d8888b.$ @
192
+ d88P Y88b$@
193
+ 888 888$@
194
+ 888 888$@
195
+ 888 888$@
196
+ 888 888$@
197
+ Y88b d88P$@
198
+ $"Y8888P"$ @
199
+ @
200
+ @
201
+ @@
202
+ d888 $ @
203
+ d8888 $ @
204
+ 888 $ @
205
+ 888 $ @
206
+ 888 $ @
207
+ 888 $ @
208
+ 888 $ @
209
+ 8888888$@
210
+ @
211
+ @
212
+ @@
213
+ .d8888b.$ @
214
+ d88P Y88b$@
215
+ $ 888$@
216
+ $ .d88P$@
217
+ .od888P" $@
218
+ d88P" $@
219
+ 888" $@
220
+ 888888888 $@
221
+ @
222
+ @
223
+ @@
224
+ .d8888b.$ @
225
+ d88P Y88b$@
226
+ $ .d88P$@
227
+ $ 8888" $@
228
+ $ "Y8b.$@
229
+ 888 888$@
230
+ Y88b d88P$@
231
+ "Y8888P" $@
232
+ @
233
+ @
234
+ @@
235
+ d8888 $@
236
+ d8P888 $@
237
+ d8P 888 $@
238
+ d8P 888 $@
239
+ d88 888 $@
240
+ 8888888888$@
241
+ 888 $@
242
+ 888 $@
243
+ @
244
+ @
245
+ @@
246
+ 888888888$ @
247
+ 888 $ @
248
+ 888 $ @
249
+ 8888888b.$ @
250
+ $ "Y88b$@
251
+ $ 888$@
252
+ Y88b d88P$@
253
+ "Y8888P"$ @
254
+ @
255
+ @
256
+ @@
257
+ $.d8888b.$ @
258
+ d88P Y88b$@
259
+ 888 $ @
260
+ 888d888b.$ @
261
+ 888P "Y88b$@
262
+ 888 888$@
263
+ Y88b d88P$@
264
+ $"Y8888P"$ @
265
+ @
266
+ @
267
+ @@
268
+ 8888888888$@
269
+ $ d88P$@
270
+ $ d88P $@
271
+ $ d88P $ @
272
+ $88888888$ @
273
+ $ d88P $ @
274
+ $d88P $ @
275
+ d88P $ @
276
+ @
277
+ @
278
+ @@
279
+ .d8888b.$ @
280
+ d88P Y88b$@
281
+ Y88b. d88P$@
282
+ "Y88888" $@
283
+ .d8P""Y8b.$@
284
+ 888 888$@
285
+ Y88b d88P$@
286
+ "Y8888P" $@
287
+ @
288
+ @
289
+ @@
290
+ $.d8888b.$ @
291
+ d88P Y88b$@
292
+ 888 888$@
293
+ Y88b. d888$@
294
+ $"Y888P888$@
295
+ $ 888$@
296
+ Y88b d88P$@
297
+ "Y8888P"$ @
298
+ @
299
+ @
300
+ @@
301
+ $ @
302
+ $ @
303
+ $ @
304
+ d8b$@
305
+ Y8P$@
306
+ $ @
307
+ d8b$@
308
+ Y8P$@
309
+ @
310
+ @
311
+ @@
312
+ $ @
313
+ $ @
314
+ $ @
315
+ d8b @
316
+ Y8P @
317
+ $ @
318
+ d8b$@
319
+ 88P$@
320
+ 8P @
321
+ " @
322
+ @@
323
+ $ d88P$@
324
+ $ d88P $@
325
+ d88P $ @
326
+ d88P $ @
327
+ Y88b $ @
328
+ Y88b $ @
329
+ $ Y88b $@
330
+ $ Y88b$@
331
+ @
332
+ @
333
+ @@
334
+ $ $ @
335
+ $ $ @
336
+ $ $ @
337
+ 888888$@
338
+ $ $ @
339
+ 888888$@
340
+ $ $ @
341
+ $ $ @
342
+ $ $ @
343
+ $ $ @
344
+ $ $ @@
345
+ Y88b $ @
346
+ Y88b $ @
347
+ Y88b $@
348
+ Y88b$@
349
+ d88P$@
350
+ d88P $@
351
+ d88P $ @
352
+ d88P $ @
353
+ @
354
+ @
355
+ @@
356
+ $.d8888b.$ @
357
+ d88P Y88b$@
358
+ $ .d88P$@
359
+ $ .d88P"$ @
360
+ $ 888" $ @
361
+ $ 888 $ @
362
+ $ $ @
363
+ $ 888 $ @
364
+ @
365
+ @
366
+ @@
367
+ $.d8888888b.$ @
368
+ d88P" "Y88b$@
369
+ 888 d8b 888$@
370
+ 888 888 888$@
371
+ 888 888bd88P$@
372
+ 888 Y8888P" $@
373
+ Y88b. .d8$@
374
+ $"Y88888888P"$@
375
+ @
376
+ @
377
+ @@
378
+ $d8888$@
379
+ $d88888$@
380
+ $d88P888$@
381
+ $d88P 888$@
382
+ $d88P 888$@
383
+ $d88P 888$@
384
+ $d8888888888$@
385
+ d88P 888$@
386
+ @
387
+ @
388
+ @@
389
+ 888888b.$ @
390
+ 888 "88b$ @
391
+ 888 .88P$ @
392
+ 8888888K.$ @
393
+ 888 "Y88b$@
394
+ 888 888$@
395
+ 888 d88P$@
396
+ 8888888P"$ @
397
+ @
398
+ @
399
+ @@
400
+ $.d8888b.$ @
401
+ d88P Y88b$@
402
+ 888 888$@
403
+ 888 $ @
404
+ 888 $ @
405
+ 888 888$@
406
+ Y88b d88P$@
407
+ $"Y8888P"$ @
408
+ @
409
+ @
410
+ @@
411
+ 8888888b.$ @
412
+ 888 "Y88b$@
413
+ 888 888$@
414
+ 888 888$@
415
+ 888 888$@
416
+ 888 888$@
417
+ 888 .d88P$@
418
+ 8888888P"$ @
419
+ @
420
+ @
421
+ @@
422
+ 8888888888$@
423
+ 888 $ @
424
+ 888 $ @
425
+ 8888888$ @
426
+ 888 $ @
427
+ 888 $ @
428
+ 888 $ @
429
+ 8888888888$@
430
+ @
431
+ @
432
+ @@
433
+ 8888888888$@
434
+ 888 $ @
435
+ 888 $ @
436
+ 8888888$ @
437
+ 888 $ @
438
+ 888 $ @
439
+ 888 $ @
440
+ 888 $ @
441
+ @
442
+ @
443
+ @@
444
+ $.d8888b.$ @
445
+ d88P Y88b$@
446
+ 888 888$@
447
+ 888 $@
448
+ 888 88888$@
449
+ 888 888$@
450
+ Y88b d88P$@
451
+ $"Y8888P88$@
452
+ @
453
+ @
454
+ @@
455
+ 888 888$@
456
+ 888 888$@
457
+ 888 888$@
458
+ 8888888888$@
459
+ 888 888$@
460
+ 888 888$@
461
+ 888 888$@
462
+ 888 888$@
463
+ @
464
+ @
465
+ @@
466
+ 8888888$@
467
+ 888 $ @
468
+ 888 $ @
469
+ 888 $ @
470
+ 888 $ @
471
+ 888 $ @
472
+ 888 $ @
473
+ 8888888$@
474
+ @
475
+ @
476
+ @@
477
+ 888888$@
478
+ "88b$@
479
+ 888$@
480
+ 888$@
481
+ 888$@
482
+ 888$@
483
+ 88P$@
484
+ 888$@
485
+ .d88P$@
486
+ .d88P"$ @
487
+ 888P" $ @@
488
+ 888 d8P$ @
489
+ 888 d8P $ @
490
+ 888 d8P $ @
491
+ 888d88K $ @
492
+ 8888888b $ @
493
+ 888 Y88b $ @
494
+ 888 Y88b $@
495
+ 888 Y88b$@
496
+ @
497
+ @
498
+ @@
499
+ 888 $ @
500
+ 888 $ @
501
+ 888 $ @
502
+ 888 $ @
503
+ 888 $ @
504
+ 888 $ @
505
+ 888 $ @
506
+ 88888888$@
507
+ @
508
+ @
509
+ @@
510
+ 888b d888$@
511
+ 8888b d8888$@
512
+ 88888b.d88888$@
513
+ 888Y88888P888$@
514
+ 888 Y888P 888$@
515
+ 888 Y8P 888$@
516
+ 888 " 888$@
517
+ 888 888$@
518
+ @
519
+ @
520
+ @@
521
+ 888b 888$@
522
+ 8888b 888$@
523
+ 88888b 888$@
524
+ 888Y88b 888$@
525
+ 888 Y88b888$@
526
+ 888 Y88888$@
527
+ 888 Y8888$@
528
+ 888 Y888$@
529
+ @
530
+ @
531
+ @@
532
+ $.d88888b.$ @
533
+ d88P" "Y88b$@
534
+ 888 888$@
535
+ 888 888$@
536
+ 888 888$@
537
+ 888 888$@
538
+ Y88b. .d88P$@
539
+ $"Y88888P"$ @
540
+ @
541
+ @
542
+ @@
543
+ 8888888b.$ @
544
+ 888 Y88b$@
545
+ 888 888$@
546
+ 888 d88P$@
547
+ 8888888P"$ @
548
+ 888 $ @
549
+ 888 $ @
550
+ 888 $ @
551
+ @
552
+ @
553
+ @@
554
+ $.d88888b.$ @
555
+ d88P" "Y88b$@
556
+ 888 888$@
557
+ 888 888$@
558
+ 888 888$@
559
+ 888 Y8b 888$@
560
+ Y88b.Y8b88P$@
561
+ $"Y888888" $@
562
+ Y8b $@
563
+ @
564
+ @@
565
+ 8888888b.$ @
566
+ 888 Y88b$@
567
+ 888 888$@
568
+ 888 d88P$@
569
+ 8888888P"$ @
570
+ 888 T88b $ @
571
+ 888 T88b$ @
572
+ 888 T88b$@
573
+ @
574
+ @
575
+ @@
576
+ $.d8888b.$ @
577
+ d88P Y88b$@
578
+ Y88b. $ @
579
+ $"Y888b. $ @
580
+ $ "Y88b.$@
581
+ $ "888$@
582
+ Y88b d88P$@
583
+ "Y8888P"$ @
584
+ @
585
+ @
586
+ @@
587
+ 88888888888$@
588
+ 888 $ @
589
+ 888 $ @
590
+ 888 $ @
591
+ 888 $ @
592
+ 888 $ @
593
+ 888 $ @
594
+ 888 $ @
595
+ @
596
+ @
597
+ @@
598
+ 888 888$@
599
+ 888 888$@
600
+ 888 888$@
601
+ 888 888$@
602
+ 888 888$@
603
+ 888 888$@
604
+ Y88b. .d88P$@
605
+ $"Y88888P"$ @
606
+ @
607
+ @
608
+ @@
609
+ 888 888$@
610
+ 888 888$@
611
+ 888 888$@
612
+ Y88b d88P$@
613
+ Y88b d88P $@
614
+ Y88o88P $ @
615
+ Y888P $ @
616
+ Y8P $ @
617
+ @
618
+ @
619
+ @@
620
+ 888 888$@
621
+ 888 o 888$@
622
+ 888 d8b 888$@
623
+ 888 d888b 888$@
624
+ 888d88888b888$@
625
+ 88888P Y88888$@
626
+ 8888P Y8888$@
627
+ 888P Y888$@
628
+ @
629
+ @
630
+ @@
631
+ Y88b d88P$@
632
+ Y88b d88P $@
633
+ Y88o88P $ @
634
+ Y888P $ @
635
+ d888b $ @
636
+ d88888b $ @
637
+ d88P Y88b $@
638
+ d88P Y88b$@
639
+ @
640
+ @
641
+ @@
642
+ Y88b d88P$@
643
+ Y88b d88P $@
644
+ Y88o88P $ @
645
+ Y888P $ @
646
+ 888 $ @
647
+ 888 $ @
648
+ 888 $ @
649
+ 888 $ @
650
+ @
651
+ @
652
+ @@
653
+ 8888888888P$@
654
+ $ d88P $@
655
+ $ d88P $ @
656
+ $ d88P $ @
657
+ $ d88P $ @
658
+ $ d88P $ @
659
+ $d88P $ @
660
+ d8888888888$@
661
+ @
662
+ @
663
+ @@
664
+ 8888888$@
665
+ 888 $ @
666
+ 888 $ @
667
+ 888 $ @
668
+ 888 $ @
669
+ 888 $ @
670
+ 888 $ @
671
+ 8888888$@
672
+ @
673
+ @
674
+ @@
675
+ Y88b $ @
676
+ $Y88b $ @
677
+ $ Y88b $ @
678
+ $ Y88b $ @
679
+ $ Y88b $ @
680
+ $ Y88b $ @
681
+ $ Y88b $@
682
+ $ Y88b$@
683
+ @
684
+ @
685
+ @@
686
+ 8888888$@
687
+ $ 888$@
688
+ $ 888$@
689
+ $ 888$@
690
+ $ 888$@
691
+ $ 888$@
692
+ $ 888$@
693
+ 8888888$@
694
+ @
695
+ @
696
+ @@
697
+ o$ @
698
+ d8b$ @
699
+ d888b$ @
700
+ d8P"Y8b$@
701
+ $ $ @
702
+ $ $ @
703
+ $ $ @
704
+ $ $ @
705
+ $ $ @
706
+ $ $ @
707
+ $ $ @@
708
+ $ $ @
709
+ $ $ @
710
+ $ $ @
711
+ $ $ @
712
+ $ $ @
713
+ $ $ @
714
+ $ $ @
715
+ 88888888$@
716
+ @
717
+ @
718
+ @@
719
+ d8b$@
720
+ Y88$@
721
+ Y8$@
722
+ Y$@
723
+ $ @
724
+ $ @
725
+ $ @
726
+ $ @
727
+ $ @
728
+ $ @
729
+ $ @@
730
+ @
731
+ @
732
+ @
733
+ $8888b. $@
734
+ $ "88b$@
735
+ .d888888$@
736
+ 888 888$@
737
+ "Y888888$@
738
+ @
739
+ @
740
+ @@
741
+ 888 $ @
742
+ 888 $ @
743
+ 888 $ @
744
+ 88888b.$ @
745
+ 888 "88b$@
746
+ 888 888$@
747
+ 888 d88P$@
748
+ 88888P"$ @
749
+ @
750
+ @
751
+ @@
752
+ @
753
+ @
754
+ @
755
+ $.d8888b$@
756
+ d88P" $ @
757
+ 888 $ @
758
+ Y88b. $ @
759
+ $"Y8888P$@
760
+ @
761
+ @
762
+ @@
763
+ 888$@
764
+ 888$@
765
+ 888$@
766
+ $.d88888$@
767
+ d88" 888$@
768
+ 888 888$@
769
+ Y88b 888$@
770
+ $"Y88888$@
771
+ @
772
+ @
773
+ @@
774
+ @
775
+ @
776
+ @
777
+ $.d88b.$ @
778
+ d8P Y8b$@
779
+ 88888888$@
780
+ Y8b.$ @
781
+ $"Y8888$ @
782
+ @
783
+ @
784
+ @@
785
+ $.d888$@
786
+ d88P"$ @
787
+ 888 $ @
788
+ 888888$@
789
+ 888 $ @
790
+ 888 $ @
791
+ 888 $ @
792
+ 888 $ @
793
+ @
794
+ @
795
+ @@
796
+ @
797
+ @
798
+ @
799
+ $.d88b.$ @
800
+ d88P"88b$@
801
+ 888 888$@
802
+ Y88b 888$@
803
+ $"Y88888$@
804
+ $ 888$@
805
+ Y8b d88P$@
806
+ "Y88P"$ @@
807
+ 888 $ @
808
+ 888 $ @
809
+ 888 $ @
810
+ 88888b.$ @
811
+ 888 "88b$@
812
+ 888 888$@
813
+ 888 888$@
814
+ 888 888$@
815
+ @
816
+ @
817
+ @@
818
+ d8b$@
819
+ Y8P$@
820
+ $ $@
821
+ 888$@
822
+ 888$@
823
+ 888$@
824
+ 888$@
825
+ 888$@
826
+ @
827
+ @
828
+ @@
829
+ $d8b$@
830
+ $Y8P$@
831
+ $ $@
832
+ $8888$@
833
+ $"888$@
834
+ $ 888$@
835
+ $ 888$@
836
+ $ 888$@
837
+ $ 888$@
838
+ $ d88P$@
839
+ 888P"$ @@
840
+ 888 $ @
841
+ 888 $ @
842
+ 888 $ @
843
+ 888 888$@
844
+ 888 .88P$@
845
+ 888888K$ @
846
+ 888 "88b$@
847
+ 888 888$@
848
+ @
849
+ @
850
+ @@
851
+ 888$@
852
+ 888$@
853
+ 888$@
854
+ 888$@
855
+ 888$@
856
+ 888$@
857
+ 888$@
858
+ 888$@
859
+ @
860
+ @
861
+ @@
862
+ @
863
+ @
864
+ @
865
+ 88888b.d88b.$ @
866
+ 888 "888 "88b$@
867
+ 888 888 888$@
868
+ 888 888 888$@
869
+ 888 888 888$@
870
+ @
871
+ @
872
+ @@
873
+ @
874
+ @
875
+ @
876
+ 88888b.$ @
877
+ 888 "88b$@
878
+ 888 888$@
879
+ 888 888$@
880
+ 888 888$@
881
+ @
882
+ @
883
+ @@
884
+ @
885
+ @
886
+ @
887
+ $.d88b.$ @
888
+ d88""88b$@
889
+ 888 888$@
890
+ Y88..88P$@
891
+ $"Y88P"$ @
892
+ @
893
+ @
894
+ @@
895
+ @
896
+ @
897
+ @
898
+ 88888b.$ @
899
+ 888 "88b$@
900
+ 888 888$@
901
+ 888 d88P$@
902
+ 88888P"$ @
903
+ 888 $ @
904
+ 888 $ @
905
+ 888 $ @@
906
+ @
907
+ @
908
+ @
909
+ $.d88888$@
910
+ d88" 888$@
911
+ 888 888$@
912
+ Y88b 888$@
913
+ $"Y88888$@
914
+ $ 888$@
915
+ $ 888$@
916
+ $ 888$@@
917
+ @
918
+ @
919
+ @
920
+ 888d888$@
921
+ 888P"$ @
922
+ 888 $ @
923
+ 888 $ @
924
+ 888 $ @
925
+ @
926
+ @
927
+ @@
928
+ @
929
+ @
930
+ @
931
+ .d8888b$ @
932
+ 88K $ @
933
+ "Y8888b.$@
934
+ $ X88$@
935
+ $88888P'$@
936
+ @
937
+ @
938
+ @@
939
+ 888 $ @
940
+ 888 $ @
941
+ 888 $ @
942
+ 888888$@
943
+ 888 $ @
944
+ 888 $ @
945
+ Y88b.$ @
946
+ "Y888$@
947
+ @
948
+ @
949
+ @@
950
+ @
951
+ @
952
+ @
953
+ 888 888$@
954
+ 888 888$@
955
+ 888 888$@
956
+ Y88b 888$@
957
+ $"Y88888$@
958
+ @
959
+ @
960
+ @@
961
+ @
962
+ @
963
+ @
964
+ 888 888$@
965
+ 888 888$@
966
+ Y88 88P$@
967
+ $Y8bd8P$ @
968
+ $ Y88P $ @
969
+ @
970
+ @
971
+ @@
972
+ @
973
+ @
974
+ @
975
+ 888 888 888$@
976
+ 888 888 888$@
977
+ 888 888 888$@
978
+ Y88b 888 d88P$@
979
+ $"Y8888888P"$ @
980
+ @
981
+ @
982
+ @@
983
+ @
984
+ @
985
+ @
986
+ 888 888$@
987
+ `Y8bd8P'$@
988
+ $ X88K $ @
989
+ .d8""8b.$@
990
+ 888 888$@
991
+ @
992
+ @
993
+ @@
994
+ @
995
+ @
996
+ @
997
+ 888 888$@
998
+ 888 888$@
999
+ 888 888$@
1000
+ Y88b 888$@
1001
+ $"Y88888$@
1002
+ $ 888$@
1003
+ Y8b d88P$@
1004
+ $"Y88P"$ @@
1005
+ @
1006
+ @
1007
+ @
1008
+ 88888888$@
1009
+ $ d88P $@
1010
+ $ d88P $ @
1011
+ $d88P $ @
1012
+ 88888888$@
1013
+ @
1014
+ @
1015
+ @@
1016
+ $.d888$@
1017
+ $d88P"$ @
1018
+ $888 $ @
1019
+ .888 $ @
1020
+ 888( $ @
1021
+ "888 $ @
1022
+ $888 $ @
1023
+ $Y88b.$ @
1024
+ $"Y888$@
1025
+ @
1026
+ @@
1027
+ $ 888 $@
1028
+ $ 888 $@
1029
+ $ 888 $@
1030
+ $ 888 $@
1031
+ $ $@
1032
+ $ 888 $@
1033
+ $ 888 $@
1034
+ $ 888 $@
1035
+ $ 888 $@
1036
+ @
1037
+ @@
1038
+ 888b. $ @
1039
+ $"Y88b $@
1040
+ $ 888 $@
1041
+ $ 888.$@
1042
+ $ )888$@
1043
+ $ 888"$@
1044
+ $ 888 $@
1045
+ $.d88P $@
1046
+ 888P" $ @
1047
+ @
1048
+ @@
1049
+ @
1050
+ @
1051
+ $d888b d88$@
1052
+ d888888888P$@
1053
+ 88P Y888P$ @
1054
+ @
1055
+ @
1056
+ @
1057
+ @
1058
+ @
1059
+ @@
1060
+ d8b d8b@
1061
+ Y8P Y8P@
1062
+ $d88888$@
1063
+ $d88P888$@
1064
+ $d88P 888$@
1065
+ $d88P 888$@
1066
+ $d888888888$@
1067
+ $d88P 888$@
1068
+ @
1069
+ @
1070
+ @@
1071
+ d8b d8b @
1072
+ Y8P Y8P @
1073
+ $.d88888b.$ @
1074
+ d88P" "Y88b$@
1075
+ 888 888$@
1076
+ 888 888$@
1077
+ Y88b. .d88P$@
1078
+ $"Y88888P"$ @
1079
+ @
1080
+ @
1081
+ @@
1082
+ d8b d8b @
1083
+ Y8P Y8P @
1084
+ 888 888$@
1085
+ 888 888$@
1086
+ 888 888$@
1087
+ 888 888$@
1088
+ Y88b. .d88P$@
1089
+ $"Y88888P"$ @
1090
+ @
1091
+ @
1092
+ @@
1093
+ d8b d8b @
1094
+ Y8P Y8P @
1095
+ @
1096
+ $8888b. $@
1097
+ $ "88b$@
1098
+ .d888888$@
1099
+ 888 888$@
1100
+ "Y888888$@
1101
+ @
1102
+ @
1103
+ @@
1104
+ d8b d8b @
1105
+ Y8P Y8P @
1106
+ @
1107
+ $.d88b.$ @
1108
+ d88""88b$@
1109
+ 888 888$@
1110
+ Y88..88P$@
1111
+ $"Y88P"$ @
1112
+ @
1113
+ @
1114
+ @@
1115
+ d8b d8b @
1116
+ Y8P Y8P @
1117
+ @
1118
+ 888 888$@
1119
+ 888 888$@
1120
+ 888 888$@
1121
+ Y88b 888$@
1122
+ $"Y88888$@
1123
+ @
1124
+ @
1125
+ @@
1126
+ .d888b.$ @
1127
+ d88" "88b$ @
1128
+ 888 .88P$ @
1129
+ 888 888K.$ @
1130
+ 888 "Y88b$@
1131
+ 888 888$@
1132
+ 888 d88P$@
1133
+ 888 888P"$ @
1134
+ 888 @
1135
+ 888 @
1136
+ @@