~ubuntu-branches/ubuntu/saucy/amsn/saucy

« back to all changes in this revision

Viewing changes to plugins/games/Sketch.tcl

  • Committer: Bazaar Package Importer
  • Author(s): Devid Antonio Filoni
  • Date: 2010-04-13 23:21:29 UTC
  • mfrom: (1.1.11 upstream) (3.1.8 sid)
  • Revision ID: james.westby@ubuntu.com-20100413232129-vgpx20brdd2qavs7
Tags: 0.98.3-0ubuntu1
* Merge from Debian unstable (LP: #449072), remaining Ubuntu changes:
  - add 08_use_aplay_for_sound.dpatch patch by Festor Wailon Dacoba to use
    aplay to play sounds
  + debian/control:
    - modify iceweasel to firefox | abrowser in amsn Suggests field
    - add xdg-utils and gstreamer0.10-nice to amsn Depends field
    - mofify sox to alsa-utils in amsn Suggests field as we are now using
      aplay
* New upstream release (LP: #562619), tarball repacked according to
  debian/README.source.
* Fix missing-debian-source-format lintian warning.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#############################################################################
 
2
#  ::Games::Sketch                                                                                                                      #
 
3
#  ======================================================================== #
 
4
#       Original author: JeeBee <jonne_z REM0VEatTH1S users.sourceforge.net>    #
 
5
#       Contributors:                                                                                                                   #
 
6
#   - Thanks to Bernd Breitenbach for letting me use his code that                      #
 
7
#     implements the Hourglass (see bottom part of this file).                          #
 
8
#############################################################################
 
9
 
 
10
# FIXME: support for automatically saving all drawings before
 
11
# clear canvas
 
12
 
 
13
# FIXME: Increase precision !!
 
14
 
 
15
# FIXME: Sketch: change statusbar into
 
16
# "Some player(s) have guessed the word correctly (displayed in green)."
 
17
# FIXME: When drawing while violate is clicked, drawing is still send when
 
18
# mouse is released later.
 
19
 
 
20
namespace eval ::Games::Sketch {
 
21
 
 
22
  variable HourGlass
 
23
  variable GameState
 
24
  variable Dict
 
25
  # Tolerance used for simplifying polylines
 
26
  variable eps 3
 
27
  variable eps2 9
 
28
 
 
29
  variable bkg_color "peach puff"
 
30
  variable err_bkg_color "firebrick3"
 
31
  variable eraser 0
 
32
 
 
33
  # Set round time (in seconds)
 
34
  set HourGlass(time_to_go)     180
 
35
 
 
36
  # Defaults for challenges
 
37
  variable __language "en"
 
38
  variable __languages
 
39
  variable __win_name
 
40
 
 
41
  ###########################################################################
 
42
  # config_array                                                                                                                        #
 
43
  # ======================================================================= #
 
44
  # Return variables with default values that we want to store                          #
 
45
  ###########################################################################
 
46
  proc config_array {} {
 
47
        return ""
 
48
  }
 
49
 
 
50
  ###########################################################################
 
51
  # build_config                                                                                                                        #
 
52
  # ======================================================================= #
 
53
  # Pack configuration items into pane.                                                                         #
 
54
  # Return 0 if you don't want a pane for this game.                                            #
 
55
  ###########################################################################
 
56
  proc build_config { pane } {
 
57
        return 0
 
58
  }
 
59
 
 
60
  proc init_game { gameID host } {
 
61
        variable GameState
 
62
        set GameState($gameID,host) $host
 
63
        set challenge [game_configuration $gameID]
 
64
        return $challenge
 
65
  }
 
66
 
 
67
  proc set_init_game { gameID host game_init } {
 
68
        variable GameState
 
69
 
 
70
        set GameState($gameID,host) $host
 
71
 
 
72
        foreach rec [split $game_init ","] {
 
73
          foreach {key value} [split $rec "="] {
 
74
                switch -exact $key {
 
75
                  "LANG" { set GameState($gameID,lang) $value }
 
76
                }
 
77
          }
 
78
        }
 
79
  }
 
80
 
 
81
  proc quit {gameID} {
 
82
        variable GameState
 
83
 
 
84
        # Cancel possibly running hourglass
 
85
    if {$GameState($gameID,hg_animate) != ""} {
 
86
          after cancel $GameState($gameID,hg_animate)
 
87
        }
 
88
 
 
89
        ::Games::SendQuit $gameID
 
90
        destroy .$GameState($gameID,win_name)
 
91
  }
 
92
 
 
93
  proc start_game { gameID } {
 
94
        variable GameState
 
95
        variable bkg_color
 
96
 
 
97
        set win_name [string map {"." "" ":" ""} $gameID]
 
98
        array set GameState [list \
 
99
          "$gameID,round"                       -1 \
 
100
          "$gameID,scoredround"         [list] \
 
101
          "$gameID,violations"          [list] \
 
102
          "$gameID,old_x"                       0 \
 
103
          "$gameID,old_y"                       0 \
 
104
          "$gameID,sx"                          0 \
 
105
          "$gameID,sy"                          0 \
 
106
          "$gameID,current_color"       "sienna" \
 
107
          "$gameID,current_pen"         4 \
 
108
          "$gameID,drawing"                     0 \
 
109
          "$gameID,point_list"          {} \
 
110
          "$gameID,spoint_list"         {} \
 
111
          "$gameID,widget_list"         {} \
 
112
          "$gameID,win_name"            $win_name ]
 
113
 
 
114
        toplevel .$win_name
 
115
    wm protocol .$win_name WM_DELETE_WINDOW "::Games::Sketch::quit $gameID"
 
116
    wm title .$win_name "[::Games::trans Sketch]"
 
117
 
 
118
        # The canvas
 
119
        canvas .$win_name.canvas -relief sunken -background $bkg_color \
 
120
          -width 450 -height 400
 
121
 
 
122
        # Time
 
123
        labelframe .$win_name.time -text "[::Games::trans Time]"
 
124
        hourglass $gameID .$win_name.time.sandglass
 
125
        grid .$win_name.time.sandglass -in .$win_name.time
 
126
 
 
127
        # Wrong guesses of other players
 
128
        labelframe .$win_name.wrongguesses -text "[::Games::trans wrong_guesses]"
 
129
        for {set i 0} {$i < 10} {incr i} {
 
130
          label .$win_name.wrongguesses.l$i -text ""
 
131
          pack .$win_name.wrongguesses.l$i -in .$win_name.wrongguesses -anchor w
 
132
        }
 
133
        # Player list
 
134
        labelframe .$win_name.players -text "[::Games::trans players]"
 
135
 
 
136
        # Placekeeper to be filled with either draw options or guesses
 
137
        frame .$win_name.uc
 
138
 
 
139
        # Draw options
 
140
        labelframe .$win_name.uc.sk -text "[::Games::trans sketch_tools]"
 
141
        button .$win_name.uc.sk.selcolor -text "[::Games::trans Color]" \
 
142
          -background $GameState($gameID,current_color) \
 
143
          -command "::Games::Sketch::chooseColor $gameID .$win_name.uc.sk.selcolor"
 
144
        checkbutton .$win_name.uc.sk.eraser -text "[::Games::trans Eraser]" \
 
145
          -variable ::Games::Sketch::eraser
 
146
        scale .$win_name.uc.sk.pensize -digit 1 -from 1 -to 41 -tickinterval 10 \
 
147
          -orient h -variable ::Games::Sketch::GameState($gameID,current_pen)
 
148
        button .$win_name.uc.sk.clear -text "[::Games::trans Clear]" \
 
149
          -command "::Games::Sketch::clearButton $gameID"
 
150
        button .$win_name.uc.sk.skip -text "[::Games::trans Skip]" \
 
151
          -command "::Games::Sketch::skipButton $gameID"
 
152
        button .$win_name.uc.sk.btnsave1 -text "[::Games::trans Save]" \
 
153
          -command "::Games::Sketch::save_canvas $gameID"
 
154
        pack .$win_name.uc.sk.selcolor .$win_name.uc.sk.eraser .$win_name.uc.sk.pensize \
 
155
          .$win_name.uc.sk.clear .$win_name.uc.sk.skip \
 
156
          .$win_name.uc.sk.btnsave1 -in .$win_name.uc.sk -side left -padx 20
 
157
 
 
158
        # Guesses
 
159
        labelframe .$win_name.uc.gr -text "[::Games::trans make_guesses]"
 
160
        entry .$win_name.uc.gr.guess
 
161
        bind .$win_name.uc.gr.guess <Return> ".$win_name.uc.gr.sendguess invoke"
 
162
        button .$win_name.uc.gr.sendguess -text "[::Games::trans Send]" \
 
163
          -command "::Games::Sketch::sendGuess $gameID .$win_name.uc.gr.guess"
 
164
        button .$win_name.uc.gr.violates -text "[::Games::trans Violation]" \
 
165
          -command "::Games::Sketch::violateButton $gameID"
 
166
        button .$win_name.uc.gr.btnsave2 -text "[::Games::trans Save]" \
 
167
          -command "::Games::Sketch::save_canvas $gameID"
 
168
        pack .$win_name.uc.gr.guess .$win_name.uc.gr.sendguess .$win_name.uc.gr.violates \
 
169
          .$win_name.uc.gr.btnsave2 -in .$win_name.uc.gr -side left -padx 20
 
170
 
 
171
        # Status
 
172
        labelframe .$win_name.status -text "[::Games::trans status]"
 
173
        label .$win_name.status.lbl -text "[::Games::trans wait_for_host]" -anchor w
 
174
        pack .$win_name.status.lbl -in .$win_name.status -fill both -expand 1
 
175
        # And a start button for the host only
 
176
        if {$GameState($gameID,host) == [::config::getKey login]} {
 
177
          .$win_name.status.lbl configure -text "[::Games::trans wait_for_players]"
 
178
          button .$win_name.start -text "[::Games::trans Start]" \
 
179
                -command "::Games::Sketch::start_now $gameID"
 
180
          pack .$win_name.start -in .$win_name.status -side right
 
181
        }
 
182
 
 
183
        grid .$win_name.time -sticky news
 
184
        grid .$win_name.canvas -row 0 -column 1
 
185
        grid .$win_name.wrongguesses -row 0 -column 2 -sticky news
 
186
        grid ^ ^ .$win_name.players -sticky news
 
187
        grid .$win_name.uc - - -sticky news
 
188
        grid .$win_name.status - - -sticky news
 
189
        grid rowconfigure .$win_name {1 2 3} -weight 1
 
190
        grid columnconfigure .$win_name {0 2} -weight 1
 
191
 
 
192
        # Set initial width (wider for players list, higher for usercontrols)
 
193
        ::Games::moveinscreen .$win_name
 
194
 
 
195
        # Check if players were already added before game start
 
196
        if {[info exists GameState($gameID,addplayers)]} {
 
197
          foreach {player score} $GameState($gameID,addplayers) {
 
198
                update_scores $gameID $player $score
 
199
          }
 
200
        }
 
201
  }
 
202
 
 
203
  # 'player' says the drawer violates drawing rules
 
204
  proc addViolation {gameID player} {
 
205
        variable GameState
 
206
 
 
207
        if {$GameState($gameID,host) == [::config::getKey login]} {
 
208
          # We are the host, player says drawer violated drawing rules
 
209
          if {[lsearch -exact $GameState($gameID,violations) $player] == -1} {
 
210
            lappend GameState($gameID,violations) $player
 
211
            # Check whether this ends the current round
 
212
                set cnt_v [llength $GameState($gameID,violations)]
 
213
                set cnt_p [llength $GameState($gameID,players)]
 
214
                if {$cnt_v >= [expr {($cnt_p + 1)/2}]} {
 
215
                  # Majority of guessers clicked Violate button.
 
216
                  # Skipping round, no points for the drawer this round.
 
217
                  set GameState($gameID,scoredround) [list]
 
218
          skipButton $gameID
 
219
                }
 
220
          }
 
221
        }
 
222
  }
 
223
 
 
224
  proc violateButton {gameID} {
 
225
        variable GameState
 
226
    addViolation $gameID [::config::getKey login]
 
227
        ::Games::SendMove $gameID "VIOLATE=[::config::getKey login]"
 
228
  }
 
229
 
 
230
  proc save_canvas {gameID} {
 
231
        variable GameState
 
232
        set win_name $GameState($gameID,win_name)
 
233
        # Ask user where to save the photo
 
234
        set filename [chooseFileDialog "" "[::Games::trans save_drawing]" .$win_name "" save \
 
235
          [list [list "EPS" [list *.eps *.EPS]] [list [trans allfiles] *]]]
 
236
        # Save Encapsulated Postscript
 
237
        if {"$filename" != ""} {
 
238
          ::Games::log "Saving canvas to $filename for game $gameID"
 
239
          catch { .$win_name.canvas postscript -file $filename }
 
240
        }
 
241
  }
 
242
 
 
243
  proc loadDictionary {langKey} {
 
244
        variable Dict
 
245
        
 
246
        # Check if global dictionary already read.
 
247
        if {![info exists Dict($langKey)] || \
 
248
        [llength $Dict($langKey)] == 0} {
 
249
 
 
250
          # Save plugin's lang
 
251
          array set plugin_lang [array get ::Games::lang]
 
252
          array unset ::Games::lang
 
253
 
 
254
          set Dict($langKey) [list]
 
255
          set langDir [file join $::Games::dir "lang"]
 
256
          ::Games::load_lang $langKey $langDir
 
257
 
 
258
          foreach {name value} [array get ::Games::lang] {
 
259
                if {[string first "word_" $name] == 0 &&
 
260
            [string is digit [string range $name 5 end]]} {
 
261
                  lappend Dict($langKey) $value
 
262
                }
 
263
          }
 
264
 
 
265
          ::Games::log "Sketch dictionary for $langKey read, \
 
266
                                        contains [llength $Dict($langKey)] words."
 
267
 
 
268
          # Restore plugin's lang
 
269
          array unset ::Games::lang
 
270
          array set ::Games::lang [array get plugin_lang]
 
271
        }
 
272
 
 
273
        return [llength $Dict($langKey)]
 
274
  }
 
275
 
 
276
  proc select_word {gameID} {
 
277
        variable GameState
 
278
        variable Dict
 
279
 
 
280
        set word_cnt [loadDictionary $GameState($gameID,lang)]
 
281
        if {$word_cnt > 0} {
 
282
          # Select a word at random
 
283
          set r [myRand 0 [expr {$word_cnt-1}]]
 
284
          set GameState($gameID,word) [lindex $Dict($GameState($gameID,lang)) $r]
 
285
        } else {
 
286
          ::Games::log "Update your language files for the Sketch dictionary! \
 
287
                                        (it is empty for the language that your are using in game ${gameID})"
 
288
          set GameState($gameID,word) "error, my, dictionary, is, empty"
 
289
        }
 
290
  }
 
291
 
 
292
  # Next drawer is set to $r here. However, if that player left the game
 
293
  # we keep increasing
 
294
  proc select_next_drawer {gameID r} {
 
295
        variable GameState
 
296
        set win_name $GameState($gameID,win_name)
 
297
        set next [expr {$r % [llength $GameState($gameID,players)]}]
 
298
        set nextp [lindex $GameState($gameID,players) $next]
 
299
        set stop $next
 
300
        
 
301
        # Check whether player is still in players
 
302
        while {[lsearch -exact $GameState($gameID,players) $nextp] == -1} {
 
303
          set next [expr {($next + 1) % [llength $GameState($gameID,players)]}]
 
304
          set nextp [lindex $GameState($gameID,players) $next]
 
305
          if {$stop == $next} {
 
306
                # Everybody left???
 
307
                break
 
308
          }
 
309
        }
 
310
 
 
311
        # Give the drawer 10 points for drawing
 
312
        set nexts [lsearch -exact $GameState($gameID,scores) $nextp]
 
313
        set score [lindex $GameState($gameID,scores) [expr {$nexts+1}]]
 
314
        set new_score [expr {$score + 10}]
 
315
        ::Games::SendMove $gameID "PLAYER=$nextp,SCORE=$new_score"
 
316
        update_scores $gameID $nextp $new_score
 
317
 
 
318
        # Clearing the canvas for the next round
 
319
        clearButton $gameID
 
320
 
 
321
        set GameState($gameID,draweridx) $next
 
322
        set GameState($gameID,drawer) $nextp
 
323
  }
 
324
 
 
325
  proc reset_player_colors {gameID} {
 
326
        variable GameState
 
327
        set win_name $GameState($gameID,win_name)
 
328
        set i 0
 
329
        while {[winfo exists .$win_name.player$i]} {
 
330
          set pcol [.$win_name.player$i cget -foreground]
 
331
          if {$pcol != "gray"} {
 
332
                .$win_name.player$i configure -foreground black
 
333
          }
 
334
          incr i ; incr i
 
335
        }
 
336
  }
 
337
 
 
338
  proc start_now {gameID} {
 
339
        variable GameState
 
340
 
 
341
        incr GameState($gameID,round)
 
342
        set GameState($gameID,credit) 10
 
343
        set GameState($gameID,scoredround) [list]
 
344
        set GameState($gameID,violations) [list]
 
345
 
 
346
        set round $GameState($gameID,round)
 
347
        set win_name $GameState($gameID,win_name)
 
348
 
 
349
        if {![winfo exists .$win_name]} {
 
350
          # We closed the window already, so bye bye
 
351
          return
 
352
        }
 
353
        reset_player_colors $gameID
 
354
 
 
355
        if { $GameState($gameID,round) == 0 && \
 
356
                 $GameState($gameID,host) == [::config::getKey login] } {
 
357
 
 
358
          set r [myRand 0 [expr {[llength $GameState($gameID,players)]-1}]]
 
359
          select_next_drawer $gameID $r
 
360
          ::Games::SendMove $gameID "DRAWER=$GameState($gameID,drawer)"
 
361
          pack forget .$win_name.start
 
362
        } elseif {$GameState($gameID,host) == [::config::getKey login]} {
 
363
          select_next_drawer $gameID [expr {$GameState($gameID,draweridx) + 1}]
 
364
          ::Games::SendMove $gameID "DRAWER=$GameState($gameID,drawer)"
 
365
        }
 
366
 
 
367
        if {$GameState($gameID,drawer) == [::config::getKey login]} {
 
368
          select_word $gameID
 
369
          catch { pack forget .$win_name.uc.gr }
 
370
          pack .$win_name.uc.sk -in .$win_name.uc -fill both -expand 1
 
371
          bind .$win_name.canvas <ButtonPress>   "::Games::Sketch::ButtonPress   $gameID %x.0 %y.0"
 
372
          bind .$win_name.canvas <ButtonRelease> "::Games::Sketch::ButtonRelease $gameID %x.0 %y.0"
 
373
          bind .$win_name.canvas <Motion>        "::Games::Sketch::MouseMotion   $gameID %x.0 %y.0"
 
374
          bind .$win_name.canvas <Leave>         "::Games::Sketch::MouseLeave    $gameID %x.0 %y.0"
 
375
          .$win_name.status.lbl configure -text \
 
376
                "[::Games::trans Round] ${round}: [::Games::trans you_draw $GameState($gameID,word)]"
 
377
        } else {
 
378
          catch { pack forget .$win_name.uc.sk }
 
379
          pack .$win_name.uc.gr -in .$win_name.uc -fill both -expand 1
 
380
          set GameState($gameID,drawing) 0
 
381
          bind .$win_name.canvas <ButtonPress>   ""
 
382
          bind .$win_name.canvas <ButtonRelease> ""
 
383
          bind .$win_name.canvas <Motion>        ""
 
384
          bind .$win_name.canvas <Leave>         ""
 
385
          .$win_name.status.lbl configure -text \
 
386
                "[::Games::trans Round] ${round}: [::Games::trans you_guess $GameState($gameID,lang)]"
 
387
        }
 
388
        # Hourglass will be restarted when drawer starts drawing
 
389
        stop_hour_glass $gameID .$win_name.time.sandglass
 
390
        set GameState($gameID,hg_running) 0
 
391
  }
 
392
 
 
393
  proc opponent_moves { gameID sender move } {
 
394
        variable GameState
 
395
 
 
396
        # Could be we left already, then our window does not exist anymore
 
397
        set win_name $GameState($gameID,win_name)
 
398
        if {![winfo exists .$win_name]} {
 
399
          return
 
400
        }
 
401
 
 
402
        #::Games::log "Received from $sender : $move"
 
403
        foreach rec [split $move ","] {
 
404
          foreach {key value} [split $rec "="] {
 
405
                switch -exact $key {
 
406
                  "PEN"         {set opponent_pen $value}
 
407
                  "COLOR"       {set opponent_color $value}
 
408
                  "COORDS"      { if {$GameState($gameID,hg_running) == 0} {
 
409
                                                start_hour_glass $gameID .$win_name.time.sandglass
 
410
                                                set GameState($gameID,hg_running) 1
 
411
                                          }
 
412
                                          .$GameState($gameID,win_name).canvas create line $value \
 
413
                                            -smooth bezier -fill $opponent_color -width $opponent_pen
 
414
                                        }
 
415
                  "CLEAR"       {clearCanvas $gameID}
 
416
                  "DRAWER"      {set GameState($gameID,drawer) $value
 
417
                                         start_now $gameID}
 
418
                  "GUESS"       {processGuess $gameID $sender $value}
 
419
                  "PLAYER"      {set player $value ; set sol ""}
 
420
                  "SOL"         {set sol $value}
 
421
                  "SCORE"       {update_scores $gameID $player $value $sol}
 
422
                  "WRONG"       {add_wrong_guess $gameID $value}
 
423
                  "SKIPPED" {roundSkipped $gameID}
 
424
                  "VIOLATE" {addViolation $gameID $sender}
 
425
                }
 
426
          }
 
427
        }
 
428
  }
 
429
 
 
430
  proc guessOK {gameID guess word} {
 
431
        set s1 [string map {" " ""} $guess]
 
432
        set s1 [string tolower $s1]
 
433
 
 
434
        set s2 [string map {" " ""} $word]
 
435
        set s2 [string tolower $s2]
 
436
 
 
437
        # FIXME: Does Tcl has something as sounds_like?
 
438
        # FIXME: Is it ok if 95% of the chars match?
 
439
        if {$s1 == $s2} {
 
440
          return 1
 
441
        } else {
 
442
          return 0
 
443
        }
 
444
  }
 
445
 
 
446
  proc add_wrong_guess {gameID wrong} {
 
447
        variable GameState
 
448
 
 
449
        set win_name $GameState($gameID,win_name)
 
450
 
 
451
        # Move all wrong guesses one up
 
452
        for {set i 0} {$i < 9} {incr i} {
 
453
          set j [expr {$i+1}]
 
454
          set jlbl [.$win_name.wrongguesses.l$j cget -text]
 
455
          .$win_name.wrongguesses.l$i configure -text "$jlbl"
 
456
        }
 
457
 
 
458
        # Put current wrong guess at the bottom
 
459
        .$win_name.wrongguesses.l9 configure -text "$wrong"
 
460
  }
 
461
 
 
462
  proc processGuess {gameID sender guess} {
 
463
        variable GameState
 
464
 
 
465
        set state 0
 
466
        if {$GameState($gameID,drawer) == [::config::getKey login]} {
 
467
 
 
468
          if {[lsearch -exact $GameState($gameID,scoredround) $sender] > -1} {
 
469
            # sender already scored in this round, ignore its guesses
 
470
                return
 
471
          }
 
472
 
 
473
          foreach word [split $GameState($gameID,word) ","] {
 
474
                if {[guessOK $gameID $guess $word]} {
 
475
                  set state 1
 
476
                  break
 
477
                }
 
478
          }
 
479
          if {$state} {
 
480
                foreach {player score} $GameState($gameID,scores) {
 
481
                  if {$player == $sender} {
 
482
                        set score [expr {$score + $GameState($gameID,credit)}]
 
483
                        set GameState($gameID,credit) [expr \
 
484
                          {($GameState($gameID,credit) + 1) / 2}]
 
485
                        set sol [string map {{,} {}} $GameState($gameID,word)]
 
486
                        ::Games::SendMove $gameID "PLAYER=$player,SOL=$sol,SCORE=$score"
 
487
                        update_scores $gameID $sender $score $sol
 
488
                        break;
 
489
                  }
 
490
                }
 
491
          } else {
 
492
                # Wrong guess, notify everyone
 
493
                ::Games::SendMove $gameID "WRONG=$guess"
 
494
                add_wrong_guess $gameID $guess
 
495
          }
 
496
        }
 
497
  }
 
498
 
 
499
  proc add_player { gameID player } {
 
500
        variable GameState
 
501
        if {[info exists GameState($gameID,win_name)]} {
 
502
          update_scores $gameID $player -1
 
503
        } elseif {[info exists GameState($gameID,addplayers)]} {
 
504
          set GameState($gameID,addplayers) \
 
505
                [concat $GameState($gameID,addplayers) [list $player -1]]
 
506
        } else {
 
507
          set GameState($gameID,addplayers) [list $player -1]
 
508
        }
 
509
  }
 
510
 
 
511
  proc update_scores { gameID player score {sol ""}} {
 
512
        variable GameState
 
513
 
 
514
        set win_name $GameState($gameID,win_name)
 
515
        set nick [::Games::getNick $player]
 
516
 
 
517
        set scores {}
 
518
        if {[info exists GameState($gameID,scores)]} {
 
519
          set scores $GameState($gameID,scores)
 
520
      set players $GameState($gameID,players)
 
521
        }
 
522
 
 
523
        if { [::config::getKey login] == $player && "$sol" != "" } {
 
524
          .$win_name.status.lbl configure -text \
 
525
                "[::Games::trans correct_guess $sol]"
 
526
        }
 
527
 
 
528
        if {"$sol" != ""} {
 
529
          lappend GameState($gameID,scoredround) $player
 
530
        }
 
531
 
 
532
        set i 0
 
533
        set found 0
 
534
        foreach {p s} $scores {
 
535
          if {$p == $player} {
 
536
                set found 1
 
537
                if {$score > -1} {
 
538
                  .$win_name.player$i configure -text "$nick ([::Games::trans points $score])."
 
539
                  .$win_name.player$i configure -foreground "dark green"
 
540
                  set scores [lreplace $scores $i [expr {$i+1}] $player $score]
 
541
                  break
 
542
                }
 
543
          }
 
544
          incr i ; incr i
 
545
        }
 
546
        if {!$found} {
 
547
          if {$score == -1} {set score 0}
 
548
          label .$win_name.player$i -text "$nick ([::Games::trans points $score])."
 
549
          pack .$win_name.player$i -in .$win_name.players -anchor w
 
550
          lappend scores $player $score
 
551
          lappend players $player
 
552
        }
 
553
 
 
554
        # Sort players by decreasing score
 
555
        for { set i 0 } { $i < [llength $scores] } { incr i ; incr i } {
 
556
          set chat_i [lindex $scores $i]
 
557
          set score_i [lindex $scores [expr {$i+1}]]
 
558
          for { set j [expr {$i+2}] } { $j < [llength $scores] } { incr j ; incr j } {
 
559
                set chat_j [lindex $scores $j]
 
560
                set score_j [lindex $scores [expr {$j+1}]]
 
561
                if {$score_j > $score_i} {
 
562
                  # Swap i and j in $scores
 
563
                  set scores [lreplace $scores $i [expr {$i+1}] $chat_j $score_j]
 
564
                  set scores [lreplace $scores $j [expr {$j+1}] $chat_i $score_i]
 
565
                  # Swap i and j in player list
 
566
                  set fg_i [.$win_name.player$i cget -foreground]
 
567
                  set fg_j [.$win_name.player$j cget -foreground]
 
568
                  .$win_name.player$i configure \
 
569
                        -text "[::Games::getNick $chat_j] ([::Games::trans points $score_j])."
 
570
                  .$win_name.player$i configure -foreground $fg_j
 
571
                  .$win_name.player$j configure \
 
572
                        -text "[::Games::getNick $chat_i] ([::Games::trans points $score_i])."
 
573
                  .$win_name.player$j configure -foreground $fg_i
 
574
                }
 
575
          }
 
576
        }
 
577
 
 
578
        set GameState($gameID,scores) $scores
 
579
        set GameState($gameID,players) $players
 
580
  }
 
581
 
 
582
  proc opponent_quits { gameID chatid } {
 
583
        variable GameState
 
584
 
 
585
        set win_name $GameState($gameID,win_name)
 
586
        if {![winfo exists .$win_name]} {
 
587
          # We quitted first, lalala
 
588
          return;
 
589
        }
 
590
 
 
591
        # Gray out label of the player that left.
 
592
        set i 0
 
593
        foreach {p s} $GameState($gameID,scores) {
 
594
          if {$p == $chatid} {
 
595
                .$win_name.player$i configure -foreground gray
 
596
                break
 
597
          }
 
598
          incr i ; incr i
 
599
        }
 
600
        # Remove this player from players
 
601
        set pi [lsearch -exact $GameState($gameID,players) $chatid]
 
602
        if {$pi != -1} {
 
603
          set GameState($gameID,players) \
 
604
                [lreplace $GameState($gameID,players) $pi $pi]
 
605
        }
 
606
  }
 
607
 
 
608
  proc time_elapsed {gameID} {
 
609
        variable GameState
 
610
        
 
611
        if {$GameState($gameID,host) == [::config::getKey login]} {
 
612
          roundSkipped $gameID
 
613
        }
 
614
  }
 
615
 
 
616
  proc sendGuess {gameID entry} {
 
617
        variable GameState
 
618
 
 
619
        set guess [$entry get]
 
620
        $entry delete 0 end
 
621
 
 
622
        if {$GameState($gameID,drawer) != [::config::getKey login]} {
 
623
          # FIXME: Verify that we are not sending illegal characters that will
 
624
          # not arrive. Must work for different languages as well! This tag is
 
625
          # related to the one about protecting against injected code!
 
626
          set guess [string map {{,} {} {[} {} {]} {} {$} {} {=} {}} $guess]
 
627
          ::Games::SendMove $gameID "GUESS=$guess"
 
628
        }
 
629
  }
 
630
 
 
631
  proc chooseColor {gameID widget} {
 
632
        variable GameState
 
633
        set new_color [tk_chooseColor -title "[::Games::trans choose_bkgcol]" \
 
634
          -parent .$GameState($gameID,win_name)]
 
635
        if {"$new_color" != ""} {
 
636
          set GameState($gameID,current_color) $new_color
 
637
        }
 
638
        $widget configure -background $GameState($gameID,current_color)
 
639
  }
 
640
 
 
641
  proc clearButton {gameID} {
 
642
        ::Games::SendMove $gameID "CLEAR=ALL"
 
643
        clearCanvas $gameID
 
644
  }
 
645
 
 
646
  # Skip current round
 
647
  proc roundSkipped {gameID} {
 
648
        variable GameState
 
649
 
 
650
        if {$GameState($gameID,host) == [::config::getKey login]} {
 
651
          # We are the host
 
652
          if {[llength $GameState($gameID,scoredround)] == 0} {
 
653
                # Nobody guessed correctly this round
 
654
                # Subtract 10 points from the drawer!
 
655
                set idx [lsearch -exact $GameState($gameID,scores) $GameState($gameID,drawer)]
 
656
                set score [lindex $GameState($gameID,scores) [expr {$idx+1}]]
 
657
                set new_score [expr {$score - 10}]
 
658
                set player $GameState($gameID,drawer)
 
659
            update_scores $gameID $player $new_score
 
660
            ::Games::SendMove $gameID "PLAYER=$player,SCORE=$new_score"
 
661
          }
 
662
          start_now $gameID
 
663
        }
 
664
  }
 
665
 
 
666
  # Drawer pressed the Skip button
 
667
  # Also invoked due to violation
 
668
  proc skipButton {gameID} {
 
669
        variable GameState
 
670
 
 
671
        if {$GameState($gameID,host) == [::config::getKey login]} {
 
672
          roundSkipped $gameID
 
673
        } else {
 
674
          ::Games::SendMove $gameID "SKIPPED=1"
 
675
        }
 
676
  }
 
677
 
 
678
  proc clearCanvas {gameID} {
 
679
        variable GameState
 
680
    .$GameState($gameID,win_name).canvas delete all
 
681
  }
 
682
 
 
683
  proc MouseMotion {gameID x y} {
 
684
        variable GameState
 
685
        variable eps2
 
686
        variable eraser
 
687
 
 
688
        if {$eraser} {
 
689
          set the_color $::Games::Sketch::bkg_color
 
690
        } else {
 
691
          set the_color $GameState($gameID,current_color)
 
692
        }
 
693
 
 
694
        if {$GameState($gameID,drawing) && $GameState($gameID,old_x) != -1} {
 
695
          lappend GameState($gameID,widget_list) \
 
696
        [.$GameState($gameID,win_name).canvas create line \
 
697
                  $GameState($gameID,old_x) $GameState($gameID,old_y) $x $y \
 
698
                  -fill $the_color -width $GameState($gameID,current_pen)]
 
699
 
 
700
          # Vertex reduction: 
 
701
          # only add point_list if it's $eps away from sx,sy
 
702
          if {[expr {($GameState($gameID,sx)-$x)*($GameState($gameID,sx)-$x) + \
 
703
                ($GameState($gameID,sy)-$y)*($GameState($gameID,sy)-$y) >= $eps2}]} {
 
704
 
 
705
                lappend GameState($gameID,point_list) $x $y
 
706
                set GameState($gameID,sx) $x
 
707
                set GameState($gameID,sy) $y
 
708
          }
 
709
        }
 
710
        set GameState($gameID,old_x) $x
 
711
        set GameState($gameID,old_y) $y
 
712
  }
 
713
 
 
714
  proc MouseLeave {gameID x y} {
 
715
        # Stop drawing by pretending a ButtonRelease
 
716
        ButtonRelease $gameID $x $y
 
717
  }
 
718
 
 
719
  proc ButtonPress {gameID x y} {
 
720
        variable GameState
 
721
 
 
722
        array set GameState [list \
 
723
          "$gameID,drawing"                     1 \
 
724
          "$gameID,old_x"                       $x \
 
725
          "$gameID,old_y"                       $y \
 
726
          "$gameID,sx"                          $x \
 
727
          "$gameID,sy"                          $y \
 
728
          "$gameID,point_list"          [list $x $y] \
 
729
          "$gameID,widget_list"         {} ]
 
730
  }
 
731
 
 
732
  proc ButtonRelease {gameID x y} {
 
733
        variable GameState
 
734
        variable eraser
 
735
 
 
736
        if {$GameState($gameID,drawing)} {
 
737
          set win_name $GameState($gameID,win_name)
 
738
          set GameState($gameID,drawing) 0
 
739
 
 
740
          lappend GameState($gameID,point_list) $x $y
 
741
 
 
742
          # Simplify polyline
 
743
          simplify_polyline $gameID
 
744
          
 
745
          # Fixing a small problem that single points don't seem to get drawn
 
746
          if {[llength $GameState($gameID,spoint_list)] == 4 && \
 
747
                  [lindex $GameState($gameID,spoint_list) 0] == \
 
748
                  [lindex $GameState($gameID,spoint_list) 2] && \
 
749
                  [lindex $GameState($gameID,spoint_list) 1] == \
 
750
                  [lindex $GameState($gameID,spoint_list) 3] } {
 
751
                set GameState($gameID,spoint_list) \
 
752
                  [lreplace $GameState($gameID,spoint_list) 0 0 \
 
753
                  [expr {[lindex $GameState($gameID,spoint_list) 0] + 1}]]
 
754
          }
 
755
 
 
756
          # Remove current drawing in widget_list
 
757
          foreach w $GameState($gameID,widget_list) {
 
758
                .$win_name.canvas delete $w
 
759
          }
 
760
 
 
761
          if {$eraser} {
 
762
                set the_color $::Games::Sketch::bkg_color
 
763
          } else {
 
764
                set the_color $GameState($gameID,current_color)
 
765
          }
 
766
 
 
767
          if {[llength $GameState($gameID,point_list)] >= 4} {
 
768
                # Draw squared spline approximation after Vertex Reduction
 
769
                #.$win_name.canvas create line $GameState($gameID,point_list) \
 
770
                #  -smooth bezier -fill $the_color -width $GameState($gameID,current_pen)
 
771
                # Draw squared spline approximation after Douglas-Peucker algorithm
 
772
                .$win_name.canvas create line $GameState($gameID,spoint_list) \
 
773
                  -smooth bezier -fill $the_color -width $GameState($gameID,current_pen)
 
774
          }
 
775
 
 
776
          # Send to other players
 
777
          set info "PEN=$GameState($gameID,current_pen)"
 
778
          set info "${info},COLOR=$the_color"
 
779
          if {$GameState($gameID,hg_running) == 0} {
 
780
                start_hour_glass $gameID .$win_name.time.sandglass
 
781
                set GameState($gameID,hg_running) 1
 
782
          }
 
783
          ::Games::SendMove $gameID "${info},COORDS=$GameState($gameID,spoint_list)"
 
784
        }
 
785
  }
 
786
 
 
787
  # Simplifies the polyline in list point_list
 
788
  proc simplify_polyline {gameID} {
 
789
        variable GameState
 
790
        set GameState($gameID,spoint_list) {}
 
791
 
 
792
        set N [llength $GameState($gameID,point_list)]
 
793
        set pstart_x [lindex $GameState($gameID,point_list) 0]
 
794
        set pstart_y [lindex $GameState($gameID,point_list) 1]
 
795
        set pend_x   [lindex $GameState($gameID,point_list) [expr {$N-2}]]
 
796
        set pend_y   [lindex $GameState($gameID,point_list) [expr {$N-1}]]
 
797
 
 
798
        if {$N >= 4} {
 
799
          set spoint_list_dot0 [concat \
 
800
                [list $pstart_x $pstart_y] \
 
801
                [DPsimplify $gameID 0 [expr {$N-2}]] \
 
802
                [list $pend_x $pend_y]]
 
803
        }
 
804
        foreach c $spoint_list_dot0 {
 
805
          # Strip useless .0 now
 
806
          set c [string range $c 0 [expr {[string length $c] - 3}]]
 
807
          lappend GameState($gameID,spoint_list) $c
 
808
        }
 
809
  }
 
810
 
 
811
  # Douglas-Peucker recursive simplification routine
 
812
  # Returns list of new points
 
813
  proc DPsimplify {gameID pstart pend} {
 
814
        variable GameState
 
815
        # eps2 is the tolerance eps squared
 
816
        variable eps2
 
817
 
 
818
        set pstart_x [lindex $GameState($gameID,point_list) $pstart]
 
819
        set pstart_y [lindex $GameState($gameID,point_list) [expr {$pstart+1}]]
 
820
        set pend_x   [lindex $GameState($gameID,point_list) $pend]
 
821
        set pend_y   [lindex $GameState($gameID,point_list) [expr {$pend+1}]]
 
822
        set u_x      [expr {$pend_x - $pstart_x}]
 
823
        set u_y      [expr {$pend_y - $pstart_y}]
 
824
        set cu       [expr {$u_x * $u_x + $u_y * $u_y}]
 
825
 
 
826
        # maxi is the point farthest from line pstart - pend
 
827
        set maxi [expr {$pstart+2}]
 
828
        # maxd2 is distance squared from maxi to line pstart - pend
 
829
        set maxd2 0
 
830
 
 
831
    for {set i $maxi} {$i < $pend} {incr i ; incr i} {
 
832
          # Compute distance from i to line
 
833
          set i_x [lindex $GameState($gameID,point_list) $i]
 
834
          set i_y [lindex $GameState($gameID,point_list) [expr {$i+1}]]
 
835
          set w_x [expr {$i_x - $pstart_x}]
 
836
          set w_y [expr {$i_y - $pstart_y}]
 
837
          set cw  [expr {$w_x * $u_x + $w_y * $u_y}]
 
838
          if { $cw <= 0 } {
 
839
                set dv2 [expr {($i_x - $pstart_x) * ($i_x - $pstart_x) + \
 
840
                      ($i_y - $pstart_y) * ($i_y - $pstart_y)}]
 
841
          } elseif { $cu <= $cw } {
 
842
                set dv2 [expr {($i_x - $pend_x) * ($i_x - $pend_x) + \
 
843
                      ($i_y - $pend_y) * ($i_y - $pend_y)}]
 
844
          } else {
 
845
                set b [expr {$cw / $cu}]
 
846
                set pb_x [expr {$pstart_x + $b * $u_x}]
 
847
                set pb_y [expr {$pstart_y + $b * $u_y}]
 
848
                set dv2 [expr {($i_x - $pb_x) * ($i_x - $pb_x) + \
 
849
                       ($i_y - $pb_y) * ($i_y - $pb_y)}]
 
850
          }
 
851
          # Test if i is farthest from line pstart - pend
 
852
          if {$dv2 > $maxd2} {
 
853
                set maxi $i
 
854
                set maxd2 $dv2
 
855
          }
 
856
        }
 
857
 
 
858
        # Check whether error is worse than eps2
 
859
        if { $maxd2 > $eps2 } {
 
860
          # Do recursion
 
861
          set maxi_x [lindex $GameState($gameID,point_list) $maxi]
 
862
          set maxi_y [lindex $GameState($gameID,point_list) [expr {$maxi+1}]]
 
863
          set result [concat \
 
864
                [DPsimplify $gameID $pstart $maxi] \
 
865
                [list $maxi_x $maxi_y] \
 
866
                [DPsimplify $gameID $maxi $pend]]
 
867
        } else {
 
868
          # Ignoring all points in between
 
869
          set result {}
 
870
        }
 
871
 
 
872
        return $result
 
873
  }
 
874
 
 
875
  # =================================================
 
876
  # game_configuration
 
877
  # -------------------------------------------------
 
878
  # Specify game configuration
 
879
  # =================================================
 
880
  proc game_configuration { gameID } {
 
881
        variable GameState
 
882
        variable __language
 
883
        variable __languages
 
884
        variable __win_name
 
885
 
 
886
        set win_name [string map {"." "" ":" ""} $gameID]
 
887
        set __win_name $win_name
 
888
 
 
889
        # Load languages (do this first, don't want a window yet if sourceforge is slow)
 
890
        set languages [list]
 
891
        ::lang::LoadOnlineVersions
 
892
 
 
893
    toplevel .${win_name}_gc
 
894
    wm title .${win_name}_gc "[::Games::trans select_language]"
 
895
    wm protocol .${win_name}_gc WM_DELETE_WINDOW ".${win_name}_gc.cancel invoke"
 
896
 
 
897
        # Process languages
 
898
    foreach langcode $::lang::Lang {
 
899
      set name [::lang::ReadLang $langcode name]
 
900
      lappend languages [list "$name" "$langcode"]
 
901
    }
 
902
    set languages [lsort -index 0 -dictionary $languages]
 
903
        set __languages $languages
 
904
        
 
905
        # Language listbox
 
906
        frame .${win_name}_gc.langfrm
 
907
        listbox .${win_name}_gc.langfrm.items -yscrollcommand ".${win_name}_gc.langfrm.ys set" \
 
908
          -font splainf -background white -relief flat -highlightthickness 0 -width 60
 
909
    scrollbar .${win_name}_gc.langfrm.ys -command ".${win_name}_gc.langfrm.items yview" \
 
910
          -highlightthickness 0 -borderwidth 1 -elementborderwidth 1
 
911
    pack .${win_name}_gc.langfrm.ys -in .${win_name}_gc.langfrm -side right -fill y
 
912
    pack .${win_name}_gc.langfrm.items -in .${win_name}_gc.langfrm -side left -expand true -fill both
 
913
 
 
914
        set default_lang -1
 
915
        for { set i 0 } { $i < [llength $languages] } { incr i } {
 
916
          set item [lindex $languages $i]
 
917
      .${win_name}_gc.langfrm.items insert end [lindex $item 0]
 
918
          if {[lindex $item 1] == $__language} {
 
919
                set default_lang $i
 
920
          }
 
921
        }
 
922
        if {$default_lang >= 0} {
 
923
          .${win_name}_gc.langfrm.items selection set $default_lang
 
924
        }
 
925
 
 
926
        # Challenge and cancel button
 
927
    frame .${win_name}_gc.buttons
 
928
    button .${win_name}_gc.ok -text "[::Games::trans challenge]" -command {
 
929
          set sel [.${::Games::Sketch::__win_name}_gc.langfrm.items curselection]
 
930
          set sel_item [lindex $::Games::Sketch::__languages $sel]
 
931
      set ::Games::Sketch::__language [lindex $sel_item 1]
 
932
    }
 
933
    button .${win_name}_gc.cancel -text "[::Games::trans cancel]" -command {
 
934
      set ::Games::Sketch::__language ""
 
935
    }
 
936
 
 
937
    pack .${win_name}_gc.cancel .${win_name}_gc.ok -in .${win_name}_gc.buttons -side right
 
938
        pack .${win_name}_gc.langfrm -fill both -expand true -padx 4 -pady 4
 
939
        pack .${win_name}_gc.buttons -padx 4 -pady 4
 
940
    ::Games::moveinscreen .${win_name}_gc
 
941
 
 
942
    update idletask
 
943
    grab set .${win_name}_gc
 
944
    tkwait variable ::Games::Sketch::__language
 
945
    destroy .${win_name}_gc
 
946
 
 
947
        set GameState($gameID,lang) $__language
 
948
        if {"$__language" == ""} {
 
949
          return ""
 
950
        } else {
 
951
          set word_cnt [loadDictionary $GameState($gameID,lang)]
 
952
          if {$word_cnt == 0} {
 
953
                ::amsn::infoMsg "[::Games::trans empty_dictionary]" warning
 
954
                return ""
 
955
          } else {
 
956
        return "LANG=$GameState($gameID,lang)"
 
957
          }
 
958
        }
 
959
  }
 
960
 
 
961
# =========================================================================
 
962
# Hourglass code
 
963
#
 
964
# Original author: Bernd Breitenbach
 
965
#
 
966
# The following code is used with permission from the original author
 
967
# and slightly modified to fit in this game. The original version can be
 
968
# obtained at http://www.five-o-clock.de/fragments/
 
969
# =========================================================================
 
970
 
 
971
set HourGlass(hglass_full) {R0lGODlhUADwAOcAAAoOFHZ+jLa2tEZGRJqalF5iZGpyfNLSzCoqLIqOlKqqpMbGxIZ+hFJWVGJq
 
972
dDY6PHZydBoeJKKinN7e1L6+vJaOlLaurIKGjEpOVG5qbHZ6fH5+fC4yNIaGhN7W1NLKzGZiZF5a
 
973
XEI+RCYiLBIWHLKyrI6GjKKanGpyhH5+jL62tNra1M7OzGZqfKqipMa+vJaWlLKqrD5CRNrS1M7G
 
974
xFpeZD46PCImLFJOTHZ6hE5KTF5mdDIuNJKOjHZ2hCIeJDYyPIaKjJ6enCouLFpWXOrm5BoWHEZK
 
975
THJydNbW1K6urmpqb6amqObe3Lays25uf36ChGZmdBISGLq6uZqapF5idMrKyHZ2eh4iJ8LCwZaS
 
976
lF5eYnJyhH6CjL66u8bCwp6WnFJSV356hJKSlHqCjK6qtFZaXDo+P6airG5ucoaGlN7a1tLOzWZm
 
977
akJCRiYmKhYaH46KjqKeo2ZufKqmqpaWpD4+PzY2Oi4uPLayvJaSnA4SFXp+lLq2t0ZGVJ6anHJ2
 
978
fIaCh+Li3DI2NG52hH56fLKusNrW1M7KySIiJVpaXRoaImpudObi3nJ2hFZWZB4eLE5OXIqKlF5e
 
979
bL66xMbCzCYmNDY2RLKyvJKOnHJyfNbW3JKSnD4+THp+jEpGTGJiZW5yfNbS0C4qNI6Oka6qrMrG
 
980
xVZWW2ZqdDo6PR4eJKaipOLe3MK+vk5OUXp6fIJ+hDIyNYqGjBYWHJqWnHp6i2JmdHp2hIqKjC4u
 
981
MUpKTbqytIKChHp2fJqSlGJeZIKCjMK6vMrCxFZSWnJudOLa3NbOzWpmbEZCSSomLJKKj6aepGpu
 
982
fK6mrDo2PIqCjA4OFG5yhGpqfJ6apGJidLqyvJqSnLa2vEZGTJqanF5ibNLS1CoqNKqqrMbGzHZy
 
983
fKKipN7e3L6+xLautIKGlG5qdH5+hIaGjN7W3GZibF5aZLKytKKapH5+lL62vNra3M7O1KqirMa+
 
984
xJaWnLKqtM7GzFpebD46RFJOVHZ6jE5KVJKOlHZ2jJ6epCouNP///yH+Dk1hZGUgd2l0aCBHSU1Q
 
985
ACH5BAEKAP8ALAAAAABQAPAAAAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8eP
 
986
CCeBAmWLmklbzFKmfCKtpcuULaiB0kZzJCh1IBdOisJMWgtmLXyufEIUxZNoXJJGCxUtGgqVKVFF
 
987
aYGqRZSpIxXlJCiNWShmLIdyccQl2pOkjhxFS4tU7dqmcJ8YBRrFVskoWrf+dHk2lKZQoZ745QII
 
988
UI58tTzlSLx4cb6yZNemJaT2yVS7eUEyW8KMkV9HgAj5XboWbY4AtWqZ8+SpFj9H/Cjny8ev1mza
 
989
aVm2cLDjFMiWnAFrIq0JLZfZjmgjbu0pX47DsJPfZq6Yn1OftjJ3rPrTQNO0Y9X+puVX21OKLl2A
 
990
dWmdI6375a35kEmh2O2cFrY+2pLGCBUzuOORN9tz1HVxHmu1BJAPW2nlwFo75rFHFlFW+daRVS38
 
991
FEpSAvIzG3WeoGfgeq3ZVhZa4+VDBmuevOZUTy1opxEqS2QI2FrkwZbYjqyNiN55ULRICFLhJZdc
 
992
a8glxcwcqIDi0VQZelXabbYlZl4K7WApIjAppEAbZYR4uOBsPtxWlll0eZRhhig09dprs6V2JRnq
 
993
qXdBnV3YFt1sr0lnZlNASROFmhgeVaR0YvLhSTvp3QnMo4wGAGc+zS3YIW1nwtSCmlXN8cR/jviQ
 
994
FnKIJdaOeuQ8+ih6fHzoiaL+tpGKG1IwRhEGR7ZgKA1R0QyZlHJxBsAHquSg92gKfMhJxoqtejgp
 
995
XDBK8wiuGU4F15BtjVleF6feSc4F6RnIGhnosTZmPmEu2NSnGU67Ua4Z7gqZeKN6yAcf3AJzQbHA
 
996
pNrFip6Qga+5sCHHz5nsSkMErlFU9R+RSE1ZXojGdgGuxQeG2CV7hy1ICLpuBSrjRblWJVhbXKTx
 
997
hA8p1NLLN6EcUwMGZ5xxRy5vcHCGK7YckwYU58iSCSe0zGONHpmIGlk0TEozskVToaJKLMiEscUS
 
998
S6TxCixb49JBBxsw0kYbWG8RBii9XBAEL7DwEsc5WtAiRz+0jKGHFnHwAkH+Gm3o0sIcT1c01RJY
 
999
3DHAMKAsgQQShWzAthbZ7IPLBh30MMYYWuDiyx8SgJNNHKTQko3c4IAjBC144/LK6uVEMoc0OG1E
 
1000
YxSJpDIAEaCkgcQVvcgyhujg/DHGCUIQoEAJJexiiCFTOFEGPXSAE088dDDBxB/zcLIPLXl/c0wk
 
1001
qMwR+4yoOHBDKroo0obuV8ASRw9aQE6LBMdb4IQhfSCvQh/ruLCKE05gQvXQkI0/ZEMIY5BcIK6w
 
1002
hDC8bnwZcQAq2jACO+hAEaBAQhqusAHf/QEcaBDCH2KghBL0wQut8AIFpmCIdayjD/zrRjy6MTda
 
1003
TEN0tNhHB2qRhgY8kCP+GULFG3a2hdwR4wq8wEUctECKP9BheSXwggCmYAEB3M8QpeiGE7qxjink
 
1004
gQ6r6IfnsjGGIAQCFldAgiKCAkGMRC0ZFrwaBJBAjA6O4Q943IcEmEC/5PXBikoYxziW0YdrADAP
 
1005
WIxDNsAhujF0wByvgMAjWtLGizigBW2AoysUsQQIvKKDpJhH3GhBBzoIQQH5K4EAvDAFCqDQC6Ww
 
1006
Yh+UYAgmNMN6q6jbGALRiwyEoScL28hUolBBVyQOAr3YAC5IMQYhyIEJpaCDKlFIgVYIgAISoAAW
 
1007
18EEa05hHYYoJTjolg0Y4MIcoXCgNMxALVSM4Aw4+EXWrmAOJcYNHKv+UAATFMBPC+yCCSqYwi52
 
1008
IYBuCKAPlPCCC5XQDTqgYW7ZIIUsYIGEU7QkcBTJ1RI0uYVjZICDCdCCHv7wzFKUQgFKsIAFVOAF
 
1009
FcJQBeLIgji80A0sMgENSqADHskYiFc8YRg/CaZGSpYIO7iiiMRIJi96QAtwlJKftDyhF0z4BQrE
 
1010
gH9SdIEhBFCG6oFDCaugwjTGAIwrECMS0piDu4bagiUkYmchaAMSHLfEosnBc6ugQwmv2YoveCEY
 
1011
MHTCOFrRB0OIw3llaKgL5JANWfCiEMQ4RVDWmhGipkIHBThGLwqRRC3AQA7TiJ40BbALCVw1CxZI
 
1012
oSHGkdBXFjacTJD+g/BwEYhCpGEYS6IsRqghDbemwpidfAUvOmC3fmSjH3lVgCFMeNAXCOMLX2iF
 
1013
E+TRUnGggQ4CyCIaqJANvJ2jEEgIQ1p1S7K2FvWo6yPGN+pJC1qAoR9gqJ4FalkCCkSxFVn4Akvv
 
1014
F1s94FQJ7BirMs7xWGI4UK0cqYI0UFG7MNRAccR4hRh6MA9nrkILdFBuCVEaSwugUBytSGEzytAM
 
1015
k5ZinPvYRxwu0ItyHHgYHNHGEhhsA+DubrN3vGs3SrjcXah0Cn0AcgmykIVKALAbTFgHOEqhhFIw
 
1016
oR+Z46WL54DgjVCDKrU7ataQ6TsYcJfDy3NCCVLrhS+UoK+UsGL+NQzhBHCWIR6gBYce9iEL8KqT
 
1017
vBbZAZbPoINfyPUKgZAFJ6Yhh7vK4XhKUIJyV8nKUhjCC3kIsheccFBursKZ3OOlgVuC54pUAcvo
 
1018
e7AnA4ELGBiQpDFwQRRjoNI+VHEXJVgHCq+hwjywEIyruCEtaOtT8UqLI3pmMPq2sD5kSmIMBTRg
 
1019
hpHnhRdMoQTBwK8AlADkKUyBsLNUQjasd4JyBgIJDXxdpynyaVT8IBVWkysSoBAHWrBjFQ1VAgyk
 
1020
usIFEDYY+f1mKdYhU0o0L4uyFV4gzIGEYYibI1cmnB1wQOw0aE0W2cgGGP9AgK0KgKUKgC50W/Fv
 
1021
JhiimtfoAxP+VuHUMEpuA5pwIDPGPZErCxu9GUCCOQLxWWceGqUWmKYpvEBkU3zhGnnQohdgWL1V
 
1022
oCGX88DFOcObEpZLhLdtODcOQHGMUCDhFR3QAy3wKAc2l4CWfGXlArJAiWusQwlOgOHy8sBQOexj
 
1023
DLgABi9SzhmnRyTYDe7o1We+D5LmsxkKmO8KW+kFnwO5pc2z9jqsGI9V/GEaVCBFIELxDfGuHOFt
 
1024
/YFRG7CEKxTCHMQNpTM9rgD8mr4VdAhyFlYJ5DYvVAllkMMqyEgKXoSiAU2n1hJ+UOMQ+IyeuLCb
 
1025
EIKXYQVU8ws7/6MFpiCAL/QhC0N3xzqyCI6GPhkG++AFMQz+fnkrS+MYiaixIo5RR1LPw9B0oLRe
 
1026
lbDKVpgiGAftwwKim4VWiIOWbEdu/EghCXP0cA7dpxEKBn4LVwARZg7mEDq0sAqrkFNR1AcqoAJf
 
1027
MAVWsACIcIFlZgpj11K7MENMwEhyMAakAAuSBIB2BxG8FQVYsDOK4HBXcA6kYGoS0AxbVQIB1VcU
 
1028
sACmYAosMHROIA6IUAlZYAitQAFnl0XdsArYFwiacAomiHAL9lZW00kQ0AGkoEhipGglMAVTpUpT
 
1029
EAymsAsvsADCsADBMAUg1goulAdMcAJ4NAayYA5X8AhPaGXmRURL0Auw0AFxcDdO1A0xIADW1AcS
 
1030
4AXC4HP+PGgFXyAOzecFM1VYAdQPv2NOgfAN3GchGnFlx6B5rvALMTdzpLAPhRYPbNYHraAEz2cK
 
1031
iMCDU+BzREYJflUJQ7cOelU9bkdgofAIubcRCkZjZ3MMvOM2+7AKTFBClDZNAhAMVvABL/B+7ucE
 
1032
VuANplAJ4jAFStAM4yR7YwUL25cSmJgRO7BgP7AzbQCMergPi0QHNeUEKbULFIBaY0cBwlACwsAG
 
1033
iLAAVmAF+NUNZVCMBCQHBBCHKdcVJ/gQvYgFRpU7rxAIPbA9f0ALy7BVtGRC7+gFH9AK9vgBLCBd
 
1034
hjB/grUK9OBUjEULpHAOV2BRzPCNu4VlRiVP7eM2Y2D+DVpwAhJQQss3RcvnbKagiCGWdn3gDpjQ
 
1035
Dd1QfVTwhnFQiQ1AkMAGapsEAhEWCGNgau6Vfn3gSh7mBfszBVmACKJwAEBmeuJAB/RAYmggSmNw
 
1036
ASaJe8wAY3b4cluQDkjQCx0AA/0wD39wAvjTUinUCoBlCvXHAmywc06wAAtAXX1wPzR0aXDXAVeQ
 
1037
lGt5IQy2M6DACFtjhabmVGjHbDA0dqYQmD73BS/wBUTGP33Aj0rwTNOwhJXXFWy5EVhmAzpwNZ53
 
1038
BVBAl9C0DqoEUNB3ZqYwX4NJARpYgfLgBNfQZNkoPOZwAWlgea1JPpyoPlewNbCQDSSnAOPgBDkX
 
1039
XS/+UF+t8AJDRwP3eIGu9AXuMAXXgAbxIAERRWBX8EspuR2791ugEGGFIAu4QAufRW0nFF1buABs
 
1040
YG8swAJ+iQjbQAM+R1hsZwgxIHsqxgvf4AppdSscMWMNZoCfdAHNpAe+wARbWE0l8AWrCKJJYAwH
 
1041
sHOtsA1WwAKVQAnViJgMOA9xsAFp4Ao94RGocAyqcAZnozWkJpW0IARp5wUuoAJWMAVfYAVs8AUH
 
1042
AH3r8AU9OAXV4A2tAHTTl4S7JAahoA8tYaO7V2NmcAzfwAtQgI7zgE+l4AW7oAILQAEWAKI8GJgp
 
1043
9AWBCaLXsDylUA15tQoieAWhoAtbCp+qkAoMB6b+MHk6SgAOCiAAVGWKIIoITgqGrTB2WaCP/JNo
 
1044
ecBN4LAP50Bwn7AZahKfR5UBXaOAiOpxvGmkbGAFwmAMfcUCWTB/wuCoPKcExdmP8yCCUAAB2FCj
 
1045
kJmjrhACc5VEvlNAHqdoUiQAH6CkO0kBFWgFPMdxdCCL4mB2H9hduAAFT+AGngqoRrUFojpcuLAP
 
1046
5/c/KnA8rWABiMAG9lhfRyoKiHBtrTAOhalQC/oHTHA52tcJzIAKNtoCqmADYUA25acFJKVqqNQH
 
1047
0cUCwKmKH/AB4CkKbCAKVdUKmGAItmYI8JZLOoQEqbCvaiINEZCQwRqD8/BEsRRi0IUILFCiLGD+
 
1048
BYeACDPwsoH5AVYgD0x6DQIQPUIgUd8gAj5BKIFqTGngOLjQAzDAgM1gbRSAfDvolzRgj19wCDTg
 
1049
rh8AD4toCGm2DqBFQJyAC1eADT+7HaiwCOimkLAQCKSwbew3Bcb3XDvZVwdgDDTgAQdwgTNwgX7F
 
1050
b1NAD4U1DXOGCxBwBEBBKGTrCnLFC+dAah+Edn9EAWPIBizwoRopCo2wkyzgAaIgCtXQBzPVCtWw
 
1051
RQaUdFcQCYywKZC5BwArV1DgNtkgB3TQdVVJhuK5AC+brsbABitwADOwDe9oBYiQBdXwuXk1D0n3
 
1052
CrrgsR0RBdIADQ8QsEjEC7IgOmVQCsizC4j+AJ6O+p+C8LSmcAiHsAZrIAo6iKRD1wex1I/ZgAtI
 
1053
EAvMMCgdkStpkArDsASvgJbttoB0oAISoIGtgAj4RgMlYAprsAsTwApNcAgfIArbYAzUZQVykAUU
 
1054
wD+roKlX8Cn58b5BEQtWkwaB0AG4oAViZFBZEAzrEA8TeG1WcAAe0AgeYAV9cAivugCi4HOOaoRg
 
1055
sA79oEPlcBQXjCstMQRHRQywYALbQ6zx4ASA1Q3eIA/92wosgAjhSwMsYAx3q4HiIA4+1wcxkIQI
 
1056
FAg7HA2/4BG2sATSMAs60AYQsAFMpQUilGjd1ApK7KiruLJrIAirCL72uA1S6g3CYAhlwFD+OQwL
 
1057
w/EEGGURGfIEdrAFG2Q5BFCMTCAAWCsOhoCIXXmB37sA4XsAqVpmyOcFqUcPc9MDPuAXzAASuTIH
 
1058
sxAGS1AIHUAA80OMHydd7iAOleCoSroG9rgGmgyx+ggPhOUOqPiBWjB3TWG6HlEFU8EMdtAGV/AM
 
1059
8eNE0ORoMeUNRcYGzacCprACLPAO0KWK23ANUyAM8jAFsfUHuFALSeE0OUENUsEMriCqYxAHvpAN
 
1060
SiALy0MJ6+C/cgoPlSCE3oCi9SAKLKCD11B2atgPTAADHfAXT2DMH1EFuSINlqDIH9y6aLBjZeAF
 
1061
aGAKCmwFWRCYiCAM8AAPxrCT/5kFTqD+QrQIA6TgFV9RyBlBDVPBCH4AAlcQfHrgVIYAzn9ACY6K
 
1062
osaACB8gDpuwDfCwDfUw0FmwDq2QB8vgObyQFJaxFQNRMswQBsfgCZJACtMgBEl4P0rgrGJtBZRg
 
1063
CPAgDmwgD/n4BcvTB6/7BxewIdEgDVQ9EPZgFz9hBqEwc6fTD0rABE6ACShtChh5AF8QDPXABt7g
 
1064
BYsNS1MgAXSQDVG9IU8wCXVd1VcBFlsgc+0mcTlVBgJQfyBqBSBWCVPgb1I6S9XzB0HgA1xACE+g
 
1065
DZdNEMi8H6GANrwQlWggQG12Dd7gDYiQj5Tg05UgmlNUS3JACq7NBYM727RtF2CxBBr+YJ/EWErd
 
1066
8EUCWn+sJAC/W5wCUDq8oDTR4NDOLRA7AN1PQL+BYJexhcMI63wX2DymyH6nKQk+cN9zXd4HcRfM
 
1067
oAn0KwlaIAcu1Ae78HyruIOmOHSvq9yiYhb6jRB4/R8cTApy0A0KUNBZwIOtYAWh6XwK0A16cAVs
 
1068
8QQPnhAl8ROEwMFjME5KoELB8AUfsJPM5wJKIARKwwVPIFQlXhCTgN430D7zIEBauXGE6QTNMw83
 
1069
Hg2VtOMDAdG2gArRgA0bQAr9UErVZApsmgVTgI3uoRaWzeQJ0ePKywUNAAzWgAbBUAKIsLQLMGQS
 
1070
EAhK8wT2AOYLQQ2f9h+2MAYCbm3+rXAIpkDOnNAejlDZdM4Qds4MY3EFf8B+IMoGFPC6r+ED0fDl
 
1071
hV7nKBEquDAN3eAFBwCkdOAJkxHGld4QufIxbSAHQLaRTnAOj+EI7jvqpM4MjlALpJDSm2AFdOAa
 
1072
jlDKsP4QtjAb6hDWiEAJPtAe0dDrEcEMiEEHpgAPZSAkyB4RVeAgY+AN8NANtvHq0e4QLeAJr6CK
 
1073
6zDK2y7tEBIEnDAbWzDuEfEE69EF+bAE6h4RtgAMOXABtUDp8e4QZFALwFAL+R4RtdAF5JAP/w4R
 
1074
nqAe/l7wDsHvrKHwpB7w+ZACMO3wT5AP7XDx2u7wBlEFH7IetaDjGk8QodDxAeD+CeQd8v8gDY7A
 
1075
GljCGvyw5A4fCmISIoriCXSN8gKxIfzQKu0wH83hCFWA808AG6whH55Q8q4R2yHfAkhBKQFDBu3Q
 
1076
MQuizgpvC0QS8SKCJLWQFgZADRNf6bbwBEOy8j3/I4phKdHADNSgktFeBf8xFvywLKdSLqmRD67N
 
1077
NNRQkCVeBWcBGeZBLquSJ5WiJC3QG9vu9kTiIebBLf5CIrgx6O1rC2xP54ifFFzADwFALunR+LAy
 
1078
KyhgFZLf67tCFpefD/JxHiLyL8xBG69BCClhF5Nf4syAAoRACL9SCxdfMeXCIgajFkBhC7Jd6Cnx
 
1079
2t+BGAbS83UCMLzP+mWBHcH+z+QAiBS2r/jLgh6nwigkUgsOoic5Mtf48fwP3hVKgSOUYvZ8wCiM
 
1080
wiKLYS7IMegLBvwl/hNNARm0UQv00RwB0+7iohgJ0hoBIB0A4SgasxYtQP1DmFDhQoYNHS60xSza
 
1081
RC78HPHLV6tWgFoZPXlK4YlMF5EfOX7MlyOAxSfMbEVR9FDmzIdVJD7hQsjRRUcaN6as9dFTlxQp
 
1082
unQhs6EkyXyeNDpiRtDWI5pVqzJ7QtFRvp35+HT06CmHyHYjjZL5aE5kyI98uA5sQc3qXIctpGnN
 
1083
x5Xf17xhxw492gVYyC7mcqgVSsZttCctUGmjGxlhFWkSuTjigzFvgK0/Awj+FWqU6NmgoI96ysdF
 
1084
6inJdO1GC8Ul71aujnJsLu0JikkyI9sVVUv0KDCiTh1xkbZkUmurVVpgDTVbs+ZafD6GJJMC7VGz
 
1085
JAGPHh6SK8EorJnPjDIH6+W+eflhBHn0wvCjZ0N+/k4cGDniXfKqlma582R6zgCcLsoor43iA2a/
 
1086
+fjrop3TOKolBQnbIY4/ciJ0i4uBohjwIVvmCKWli/jRyJOvRhLMwcAaFKw4TwJQC63furhgvhQ6
 
1087
4oeLxswIsSFUmDGAkVAuCiCfovJrkJwcncwxRqGCGkmowJiySDVm1AmSoYikkUaTzj6rZSQyMMRx
 
1088
w+Ea3E9No/gwk4+iWHT+662oQOxSoSiYUe9IH2r5qwtYAAPmAmDOaTCQ+RpEtMVCG/Tkt+tS8OE2
 
1089
D13KU6GImEkEGUWOeeWVc+bppx8lXEE1VR1cCQPVVnFolVVUcXAFgykoEMcLJbrphxZeroiEoEwT
 
1090
ciCqN9yo4RgNCglED3CYYMKJUgSYwgtTXlDCiT5KUKDbL75A5AA2EGHjEGOymGKddQRAox8hSClE
 
1091
HWGH/afYNBAYoIA0zOmAlDi0WEUIFwToQwUv2PjACoUP/kIYFhBJghUPRBGljz5acacbQ0ph4o9s
 
1092
xhADFGbwHNauJUYZABQkXoGFlA5gcEEOQ6boY4pWDrBi3BJooMGLQ2b+mKDcNRCuh4Jg+hCCAieU
 
1093
EEKPMWDRZt5ho0BFCh5cKYCYXtIgZR5wui1higVM+eAAUVoxhY0+PJhBFDZWmIEVQdbwwgpEghHm
 
1094
iyk2BicbGKAApTF6/7FLilx0AWWJNDrYhxY5mFBilyz6oAARUbLw4oBDJqBhhTU+j1sQNsRBBBFT
 
1095
sqCgDyfKiGOMOF4RGZXBW5gDmliwBuUbMXDZRwg6DCmhlRIoqFvvLzRv+xBW1vjgkCbYyIISRLxZ
 
1096
wIs+/gBnFS1k6UWbJ2SnF5U59rh9iyWu4GUfTvrJngkBTAn+C1O+sCIJyxE55ABWWEFkBTauaYU3
 
1097
rDCFXNFBDv34WCH+asAM8JWsBbbTRQjSQAxz9EAPchDCKlwwBRV8gQLzW0ArRIE/NnzBZ6I4hOVa
 
1098
sYA+UKISfbhGN5ighXnIwhxb+N7sHhgLxKWhEOYgBcCYUIJptaIVFMhCKz7QMA8cImKHYAMrZmA6
 
1099
YbDBFJS4leq6AQ4tgGwLDNThHgaBAUUs4RuwMME8mECHKZRgiBdrBSK+8IEqRnENjaDBF0a4wgFW
 
1100
Ig998MI1lMCEfpCiF/aQWqaiIA0pDMIVoMgABGDRLyHIbBUWMFgJEGGFAwRjbMZoYiNaQYMPsKEV
 
1101
bFiYIQQgSDpkIxu8gB0Y6UW7WTjDFb9IwxUCQQpaZOMPLuiDBLz+QANhoA1iI6TYAer4ttJZgRKn
 
1102
+0IfBimHOMRBA5NghjRmhwoSPEAXWzjGBniRgGyAQwIzo8AU5McGUx4gCVZA4QjXIIoZzJNsiBCH
 
1103
OFphiHXsah6kMEfgljA7adTSFWY4HyxkMYY/yIEOlKMAuEwhChb0oVyIoAEbzLaCFVCsHlaAByUM
 
1104
4QRBMoEWY8DFBkQmjTCEjxlwsCUkxdAvXgqhFCWwQCu+kIVgkJCe+RtlR0XBNhqEsBIDVJcS/oAL
 
1105
XMSSGVQZljRaAIdU6OIXGdiAOXChhT+sohQ1e4EXvBCMLLjtAzMw27jedggozq8PXxhHH1QJjl6R
 
1106
4hW/iApUMyX+PiM445tYxQUpSJGNgJVAAME45Qu+ZYW0OW8C5EJE22Zgik3Iwx15EIAhlDDIaeCi
 
1107
EIGThl67ZAvxwVQXNSDGBmTRgTH0Qwt0CFsSaXCA+b0AEcZYQ0dNl7Ofpq0SFCiFEtaxCibsQxav
 
1108
+OJTh2ULx8DhAa4AAQTEMMkxVJIJCrhYFoTByRkIYajGEIW4RkiuGcADHh8Qhzf64I6lraICuLhh
 
1109
S0QbpCgUZBGpuGUGvmGOQHCCFmCgwwZfQICLgWsNSWCDKD7AAlSGUBhJ+AIYKIFFmq2DCXqgxTlg
 
1110
J9+piW8Rg9BFAZagiV6cYx/ZkMAyDLGLXSgheFVUcBYWIAz+U9DAdPIY1xfycA1DRK8PpUDgPi6w
 
1111
YeVmirkvrar5QtXfedDBxYBscStmYIxOmmIBxlAiO1dwCAXLI655wJVSpzEGQ2qjHMwwT57qi4r7
 
1112
umILafhGBxIwDyFAKwYC+MILDLZJROgUekkQhf8OAFlvuMMdSuhDHjj2BzL3QmRoXm5yVAHiLZTj
 
1113
CmLY5R/+cF0vTCELWcCz5WYARXDRIGcYJVc9KnG0EhiCCdXdRwccnddhUaMFS4jAIHRQgzS8ohe8
 
1114
pEXADKGCVmTBynKkQN5MYcwvlLCE3hCFNyqRqz4ckBb7CARyW5Lm0TrmvjgIwRI20C+uyuEPwIuo
 
1115
EbOgNlP+INgUdFgDW9lgjPl5wxReqEYfxqEEXwiBFriARTpobeQlzGERtvzFEgrRsjEQ1gkW8PSy
 
1116
SxAMU7BABS942AHcyQYWGGMG24CHN6JJhxjsahV66MBno8LtIJFWGnAYRBjaAKpAdMBrtPhDCZTg
 
1117
QZ2XoOLh1RzFKFZCawnQG5hAgxyeJQc9wMsWHDYyKlqQ60dmAAnjpoUQsuECBRyRAqq0ADzP2tgZ
 
1118
fGCiVj6dN8SxqzKsAg3g0EMcavHo+YaIGmCKgDPCsIUMXOEKJpbAdSHnBTyXwFplY6e4TDE/FiBY
 
1119
7X0QhwDAQQcm9A0GABV4kfN0ZJg/stdiOMcYfLEKBQz+vg+7oED1FtC/eRNTrVaoG65EmofNuoAW
 
1120
ccDF3Ae+edpFAL+gSMO4N6AFOTi0W5HzgrFNeFsWhDduaMvfAsTRBwGMowyYUAId3hUIJKQD6nmi
 
1121
BiqkEYHntmFlgeCFFogvgRhIoAR9YKEJix1HzYHOGN+CfDDYYQgvGGIV3dACSQAGCKC75XIM38OB
 
1122
MkICc4CF1goY97MZYcib98sCcnkYUSgBY3ACeEIESqiG6NEVJVgFWpCFbAsczRstVGCzmDofXoiD
 
1123
weoHJlAlCoioPjAFu6E3jSIX+sGy1Fm2a6AEGFIqOciGHjAHvELBIAk/g3Mk4MsqXIAB7CkF4BGA
 
1124
sVH+glZQp1NigzWYGHEBr21AhEoQBkoIJB7rhjE4h3NwtO9LwalzBh3YgjbQAF4QrGy4LuApsAWw
 
1125
AC8wog9YABowhhBaACs4BCugnyO6hh9DAwOKAzX0viQMEeaShg/TBUVog29wQRiggq9ZBSWwgBgw
 
1126
tnBpNlQyhmL6lnKhATH8LRlcRHCQgwC8hRNsgFobkoNzsyXohVcwAT3IBjnoxPfbw5r5oNtKG3Zi
 
1127
gcVDpUpYgEoQqWsYB7fLhjgIhF74BTZsuSWYRF3jOyQohDiAgWkAhykUgFZQAgGggHGksXDxgHFh
 
1128
gS9YgClgAVUDQUOLhxMopAu4hQJ4AmlgObtbgiX+sMXEgQBzkIXBCkcnMMdviaZxRIQHsyK0eZgp
 
1129
ULtla4VOWwfNkoOnIYZN6ccBoQw207VP4UZZkIVpIC46kIBqQZuKFBcPUCZAvBadaoWjEYcpyAMm
 
1130
QIO2A4d5kISAs8YQ2YElYDP84rsr6IUOiANf8qU/oAMLEIAkshvToZ88WzYKaIV1wLcgVAI0YIc/
 
1131
QKAe8CyOHJYqQAWAfMOifIWFwjlNowMFUKd0DCux6rQFUL4vcAIjwsLVoQNwEAJwgIE4CJnd6xLn
 
1132
AEhH0pcrUChSeRYhAAMFsAD62SQV8KQssAIjMh0rMgVvyIIvEAdKcIJlcBct2IfXebSOPI+7kwb+
 
1133
VXgAHOA7ltmlbOiHVTAEBTCEmXmBxRMGGbMyCrCCh1EYQ8yVIKxNORgzUpCFWkDCuhsQ5lqCSbOq
 
1134
8+kFWTixVaCDZpCrifOCBTCs+ZGxLyi2xaOBa8gDH9PKQcoGUsAFCMCr0FouFWwzJcM0XBgDh3oy
 
1135
AeBDJfCC1HuBPewgRPgARCA8YUi0i6QEASAkWkDPKyjATAk/VFCFVAiDxHkFZklK+pwZ+7wYOlCB
 
1136
/6QBUyCXJOi4xRPDPBiHa7iGi6SDP0iAaTxB5TyPHZAGRnjQvWOEM4oDnEODKdS5ZlCA91k9qfzD
 
1137
UmIwQ6SDzUwnGCoFNBgDWYAFBf3JAYHROVD+Bb0DAWJAAvQhhTGYPI5RAK8KHsZaACsyGxp4mNJZ
 
1138
gHqohm5YB3c40W5guuO6guSstRidUtZMrUAIBAtyKOqkg2kpAd0MU3CBJz70gl1woYpcB9ozBDro
 
1139
hzEIBChQUMFsuVt70FvKpQ3ABUnAMOpUACfbheCJKHD5godZAPnxTp2qhF2QqzKgg1Vo1GeAgrlr
 
1140
CSKItOZ8Q1zKKun8xuz5HUBqhV1ggj/MozwyHSuDPHeYPotZhy3qhx6Qxl5og6igVQaN0TazRG4M
 
1141
BFlonTqjTcNDnWDooHtiJ0RgsCxYh8kZh3UoAyZYBTBQP07gHiSMCWqVURALgTa4glfgL/n+lIOb
 
1142
UgIF6LQ9LAFVVbZCZIOx8QJ3mAJ6KIVSoAOcI8JYuwKBewIgMbIWYIQPczNQgIBCOAdSmIbYBJuB
 
1143
fYEVUwELiKg/9M51qJYYKDZKyAMnGAdXEwIYGIML6IXkmtfNmwOAJMo0AIRXyNZ5oIVwdDHYckd3
 
1144
fIHKMSIT+jQZq8narE3i0rSbrYXkmlaetVU3iyR+CaKiHaL306xyfDedWr3MMUS6DEKa6YN+Age/
 
1145
jIMOuILkclHmsLXCjCDzo1BSaJxNswDDUwGLcctoqplydALU84LpU7Rm2BVwGDMN+wZFkNQQcQ5U
 
1146
mAUeuldu7ACm2gcCOIHrKgEnmIJg8AL+xTrV+WkFiymDzky0PNAsJpCD20u5ciACrBiGWksPKRgC
 
1147
TzE/ljkHWXCcDOoWzbIAJ8AuYcjOsQkhi8kDelCd1ZGh2IUBSTCHchiGyR0QqnkgBHCDYTC/KyDI
 
1148
BCAFOVAAF4ABQ2gGr1KlPqA4K/uCYEBIQ8AEeiiDXdmVVhUClNqAUAgWZrjdkpEGaLgBGwgDCYIA
 
1149
lpEFLci66yK54nu/sDIi1TEEi/ECaak8IVhXvtQDRLmCJfgEgqhb5miBKEiDRHAkS9SaVyCGQpAF
 
1150
TqgkOugGOoirEjA86ykBg5Hg7KMrviSAbJgHXPiGb1gCRbiDJyCZTHGAFkgDVeAhIvj+hXK40g3A
 
1151
NMESAk2Tg27gFsa1AAvA4nCkvOwrPuzxG044hw1Ig3Q4hZY4Yt4rKO4dhoSz0l7oBYXSA6/sh8fh
 
1152
Swlw2FUAh24oBa/qlhNQOlf8g8u7gFpIgy3QBaxY49H6R2hAgKoiAhAYMQhog1fghX6BgWzoS1fi
 
1153
025YhuLrRI7pmGzQAk4gBUkIBFj4BkZQhE6QCFsYHOZqAQNQhVyQAVdQhMTBxV4wh0zGhX9xpa1b
 
1154
heITghjEoCruhz8IQEnoAFjqYEVehIHY2UxxDCWWgje4AxHAh11uA6vLV5aBhVVOw2ry4dHsIgLA
 
1155
uX2ABUx7hStIgyUAAXVwhVjIihb+qGYkfg5NgAMEiIV70IUwIIItAIV0OIY0SAMkSANGgAAp5oUS
 
1156
XGUX9Bc8DRWFboNfIAJXEIFRCIWoaIHBQYj6KpZoWIQf8Oc7kAFs0AV8GIZT2II4bAPFURxi8Lte
 
1157
AAQkUGhGaANQUARFGIYwGIAHGAVIYIyOPgiQrhfHYAYu+JNFWARISIQ3QIBRyAUeiIVBcAYbsAM7
 
1158
cAMREAE36OqtTgVnAIJcGAJuSIRFmIVZuIwnyAppsFiQri9biIiJiAYuwOvjAAQf4Gsf0ICOuIVa
 
1159
2Akf+Ia95uscuIJa4OvjiIad8JCJEBCkJhxboAa6fg67oB1mWIKo4OxoQIFQuGtrLiiRjibtaDAA
 
1160
xsCJx3ZrZohsyf4HVKBsW9iBHQAFaoiCKHAAy6YdMImKrJiIlmgJzgaTfRzhy7aFo3ZtIYHt496B
 
1161
2KZraqhsuqZr3I4C5pruEa7u3E7u7ebu7vbu7wbv8Bbv8Sbv8paMgAAAOw==}
 
1162
 
 
1163
set HourGlass(hglass_empty) {R0lGODlhUADwAOcAAGVod2ZpemdqeWdqe2hremhrfGlse2lsfWRndmptfmtuf2xvgGptfG1wgW5x
 
1164
gm9yg2NmdXBzhGtufW1xfWlqfGZpeGxvfm9ygW5xgG1wf2xwfGpse3BzgnF0g3J1hHJ1hnF0hW1v
 
1165
fmttemxue2xufWttfGpseW1vfG5wfW9xfnByf3FzgHJ0gXN3g3R4hHV5hXZ5iHZ6hnd6iXd7h3h8
 
1166
iHh6h3d5hnV4h3R3hnR3iGtve2tteWxuenN1gnJ2gnl9iXl7iHh7inN2h2ZsempseHF1gXB0gG5y
 
1167
fnN2hXl8i3p9jHt+jXp+inZ5inV4iWdte2lreGlrd21ve29zf3h7jGlrenZ5jHl8jXp9jnx/kHt+
 
1168
j3d6i2hqd3x/jn6Aj36AjX1/jmZqdmhqdn2Aj32BjX+Bjmdrd2hseHyAjHt/i31/jHd6jXh7jnJ1
 
1169
iHBzhmFlcXN2iXF0h2JmcmlteX+BjX6AjHx+jWNnc4CCjn+Ci2VoeX6CjoGDj4CDjIGEjYCCj3V4
 
1170
i3R3inl8j2BjcmFkc2JldG9yhW5xhH6CjWVpdWRodF9icWBkcF5ibltfa11gb3R2i3Z4jV5hcH2B
 
1171
jHp9kHyAi4KFjm9xgHFzgnN1ilxfblxgbFtebWlsf4GEi3h+jHl/jXt9jF9jb3+DjoCEj3+Dj2Nm
 
1172
d3h5jXl6jl1hbWRneHZ3i3Z8jHd9jX6BkGBjdGFkdWJldnx+i3+BkHp8i4GDkICEkIGFkHp8iYKE
 
1173
kHV3hHt9in2AkXN5h3F3hXJ4hnB2hHV2ind4jHd9i3p+iXl/i3qAjGpuenp7jXd5iHV3hnZ4h3t/
 
1174
im1wg2xvgoODjXuBjXh+jnl/j2tugYGBjYCAjH9/i3V5hH1/i3R2g3R2hXN1hHJ0g3Z4hf//////
 
1175
////////////////////////////////////////////////////////////////////////////
 
1176
/////////////////////////////////////////////////////yH+Dk1hZGUgd2l0aCBHSU1Q
 
1177
ACH5BAEKAP8ALAAAAABQAPAAAAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3MhRogAC
 
1178
BgwQGEkgwYIFClImWJnggMsCAQZUAJAIQBgCZzo+JMCgZYEDCX4CXdCgqAMHER48OMq0aEoGBQQE
 
1179
qDAVAAIEAgToRGjBggYLDDZIsJABQ4cOHC5c4NDBg9uzZ0GAiJCUqYMGRA9UgDBIDgIAWwsq0CGC
 
1180
BwkViBGnWLyih48WL2bQ+EEDCI0ZM4LcECI3AogPQj5E+PChAQMEEAoVCizwCQEiUaSwmF3kyJQp
 
1181
Fzp8YOsBCYwkSpYoURIERpMcH0DkML6l+ZYbSHCASDAVwerABrhEEZGCBdq1Zzn+9HYiJEeTJleU
 
1182
XLmypcmNG71zAHLSpHnwLkFifHCgQECF6zoZEIYYRJwwRQdyfeaBZx/kcAMMQSwxBhlffNGFEjLA
 
1183
EFqDTVCRBBNYLNFFF0vM8EIHDrSE2lYVCCDGGRYcgWB5oB3XhAxB/KAEGhN+ocYSSQQxgxOdLReE
 
1184
El2MMSITJiLxgAIH6IEAiwJwIUAGbIVWHn1UeMhEEhKSgUYXZJCxRBA0CPEAXUIIEYgTWyC5xBI0
 
1185
IIHiAgcIAFhHbwhgxkdYehBaDkI0wQYV6d1XYZlkqEEGE0HkEEcEbgzq5hpXBJGEhhHclacAjXR0
 
1186
R1YAzIHBBaTlgEMOW1CB3n3+ZJRBh6x01AqGEk4k52YOhBZqxXlOwJEUngQMAKBGUgmgBwMZPJAq
 
1187
EjdQsYahwZGxBx584IFHHtqWscQWodHXBCCAfDBuIIA0EciwCRgwAAQdheFfAMw6Cy0OTrCxhhVr
 
1188
UIHktXz0oS0deHi7BiCBbHFFEu3lYAUgOTgBiLAPLNDuAHtuRFUFAzBgwQMg9OYBfQ9bIQiYZNDh
 
1189
hx8BZ0sHGq5ugUVwDJtnhXxWUGyxuxlrBIAeAAwgwQJrgtCBEE5IDIgVh6aRMh8rR43HEld4OOKF
 
1190
VDhhxc0PwzFXAz71nNHPFRQgQQNr0vWBEzm8ye8VSzwd9covKwFcmXNmfV7+IF3PleIBBVTQEdkF
 
1191
kIXUXCAE0nYTTGNB5hdQQ023mdWSkYZ6jFuBLnlzPQm44BwRbgEGh9OleMKYOk6h5Cv3QQcZJJJp
 
1192
+RWUnAdxxJwlBWXggwNQtgUOHOKZ6YEkzAbcXVSIx9x+0FHHF2nITvUVWwPSJudK4cl76L4X7gDI
 
1193
yUXQNpzHi6g8885DP6GZ6zFuPdJeZ//54BX8fgHIHsgVsRNUsBHiGBX6A/PwQIcv8Ahv7XtYuOJX
 
1194
sQMQIAD0C0Dh7heB/DWIXP0LUay+UIblSa2AByTRwuhjvbV5bVgOhGDoqDJBzyBBLuiyQpcct4cK
 
1195
dXBuBDTghESYBNstsHP+CzAATOgngBaC4IWJYxyidkShWHnwg2goEw99aEIgClGFG/GdAA5ggQuM
 
1196
BokkW+LjKIQtHL5MikvAQg/H9UMUDnGFAjBAF7/4Ga0BAlFXeBwavvAH1vmBgIwikRqpGCwgAg6L
 
1197
PgtAHCfgxQ+8cG1bQxQWekRGP7quTBbSwiDHBYc2FNKNiBybIg3ASDpC0grrmWQTv1DGqF2SQoJc
 
1198
Ywk/2cA3ZnEqpGzkI7WGqSuo8guVnNsrLdSFTc7yhLUMJUYAgMtSOvIzS+ulKusQTFe+DpZdWJgP
 
1199
PYlM7SnzIsysQC6/SBpArEGaZEDE61hpyWsS05hC4KYhbekzmYzTkeX+PKcvtZDO13WwnZgcAxpm
 
1200
1h7ywG+e37RI0MTJyM/goJxbSF3c1OlEgFJIoARtz/W6ecjB2bOhH7gBRCXaTycyb5gYVUJzmtAm
 
1201
dYkmmR5l6AUcOlJfTrSAZfCjHy75BWqiQQsqbU8m4HAc0URAe6DLon9ySdMPACKiNu3nF1R20nW+
 
1202
7qdBbQIciIocuiB1cEsF6UOdClUNqnOqzNupVcUE1ObcjKtG/WrowjrTD4z1qSQ9K1WFuVasujUH
 
1203
RA1EXOc3V5k2Fa9RPesTrUkhEAqHClt4q0u92pKk+oyuhy3rTeuw2NZZ1YCPjSyvttDVozJAL2A1
 
1204
rF1rqjp1cjatzWv+LGiVAFnNsQo5c1nAaS07to/W9a4RxUJrndfZyU0VmKHVHA62INjcVtaji/wt
 
1205
aXgp3C7soVYEg20Bj0s5yEZCccwVwqQshtrQDSC6Ta3PGqqbsloVt3kVKqCZllBb8AZCvEdtF2+X
 
1206
eV6mrtZcwdUCmQiY3bTiIb7IpS9kR3vf8eoXukwVAg6QUKhzYkHArHQvbA/M3bwtOGENzm95s9jf
 
1207
hgoBOhVeL4YJ/F4OH3i+XdqCExLGORHvF5wlzs2JKdwEC69YwwZWHjU9LGMa5w5sI65ndI+G4h77
 
1208
78d00OnK8PA8QJIoxjOW8ZGfa94l77jC/lsCGDIc5Q1X+XVXllb+lmuM5BsrNMdM5vEawpw8Akt5
 
1209
ZXXoYAHTvIY1bznJvY2uoJo85xDVuVZ39kOeCVgHPvtZLm2GMCMHLecwO5GAiV608xz9VM6BINJd
 
1210
ziWlway6DmIatoom2KYV3Gc4eRrUJI7jES5AafMUmkymLjNs66DqRrN6PlnjzKe5HGsDHEE8O7a1
 
1211
/8gU5VNrt9d8BvariV3Pjh170OWpDxsEnLI/6jqt7l11lw7Gv2kDmr/WRvZmzLOFbTPb24kOt6/H
 
1212
LW1hw1ojeihAugUFg1V1iAoi6razwQ1tBVOh3pCm9tj0bWxM8NvfXQq4yrQV74HNu38IH/a5wXmA
 
1213
ATT84ayK+IT+lkdxVBOM0WlmQ8bvnZFEDMDjR8AEhfsdcoCP/I+tBLfFU45Bc7u5IolgeMxnvqpW
 
1214
2ZwMJM8587glsIur/I7mFhtGElGshhO95mFKeqIF1nSeQ93eCp96sQ4wdCH0G04iRzrOt07yIXfp
 
1215
6cFO+AGkDs6xH5voaD+61lEtMJZRswtvl1jcNf5zigCAALLmAN6NnnWco3qnbYdd4L8eh2EnoPAT
 
1216
OXziF4+oMEFNW4/vO5Ul3z/Bk6fyYLv84BBvbMUv5wZoh9uEoNZ3vn/+75MPduUtpnqOVID1d399
 
1217
7GVH+/e2bsq4Lz3lQcB7zEtE861HQg5kAPtW5fELiJCc8XH+6NO3j0v3zF+J8yMC/eBTf/jY1/7j
 
1218
pdb9qn3f081ffeJXdX7rJy/7U14/8sWEKFd9XS7xFzrAxwH0dwP1gSj3p376N3qA1z7/F369pzFR
 
1219
0Xr0Zxxdcn19kGioVgd5sx5bsApUEAgnFIBZNIETUAT0JwOtkgRYsEdlVHvrxweNZjdYcAXnsQUQ
 
1220
41wKQHcKZQCLhIJOgCMysB55JCuf922ekFbZMoPBgQWQhYM5AAIVkxI8CHQ+SEodgC+aMoRJUIRR
 
1221
xgdlgFbrt2pKoEmZEgTHIYUnsQBTwhFyUAAEcAAZ0BtNECQy4C9UgAVjhlxKQAYLyAcWQgZKMhw9
 
1222
lCsRoAD+DaAAhNARjFAABZAAc4gEHeKEVwAK1seC0gJwkmMJsNUHf7QowqEepKUmJ5EAj6ATQaMA
 
1223
GdABWuM4I0JfWyAIrcI0ClMhO5VWArM8U0UGZeiB4HIXGVAAWwEBFYCIa7MFS7AHfPAHNXQhVaM1
 
1224
6DFmdOCJfOU86ZNGguB+5NEADoABA7AVclABB+AAICAzSzAKfzRlZUAGWnBwHRI3T8QHkvM8lvMl
 
1225
QSBc7HEzIOAAF2ABVWgRolA2RJMDALcHfndyX6AEjIMpO4KOUZMtFZKQ7VEf7XFOTeAEEZAWDLAI
 
1226
gUEILZIBH0AFWTAG2MJhagAGVCNcSGJdFNJTX5BGw6H+UjZSH+lCBTjAFhhAAKzRCMQ4jnBABV0Q
 
1227
RWSAklXjSy34PHsgRQKFiXjUHjAAAytFBTLwHQewiKwxCAEQAAkQAfxzIXNSgz2WBbjGgXMiIkBS
 
1228
lGeSITQQBO2BIzfZARmgk6zxD4tQCOelAB+wXmm0MFjQY5M0CbUyIjuUSushA0ngIcXxlEHwAkjA
 
1229
ARygABw5l/9ACMRIAArwVM0xQ/3jS0gnXwjUhTEDHD30lDHAmGzRAP/IEYMAAABwAA+gNRHVS0S4
 
1230
BHsUkewoXJGFHjWoGTBwAy7gAQgSl5JZEG/wFwXwABFDLtlYNf1iaGICO1RzKK2AjzLgBNDhAR/Q
 
1231
ARf+wADDWRCpQAiFEACuKQTzYU7HMy0ygwWwA51akB6vmClOgAS9sRsLMAjdWRCLAAEeuZUfAAcR
 
1232
gyls8DDLhklmkiSwkykwAJwf4AEc4ADwcp8FMQiFAAEDoACeUR6BQAWCsC+C4DhloE6TEEVJeSYw
 
1233
YCe9gSJtCKERCp4FsACeAQJIgymp0wW04k5ogCE54Bby6QCp2Z2MQJkH0AAR0BbkWTVUIGC5tkFn
 
1234
IlIn6gBaoaIJMQiEgAAMIKR1xAaCsG0poy3PYyGb0gJIIJ8N8KRQGqVTmgCH4yZYGjcEI4MVsgTU
 
1235
J59I4KRlyhCEAAsB4KKjkS95yEF40Adk4AVkkAT+0OFIDyCMdWqnhBCknpEDa9ChXfAH2kIhaCAD
 
1236
E4YEEcCdidoQlLmVESAEJpNHkrpOSnADwACcFrCpD1EICNAAMCqjS9BBwPQFQSAEbpEBqgoRhCAA
 
1237
n+oE1HMFXkAHTrMEMHBEDpCrESEHCoA0v5o8EpIED3UByCoRCLA2guAEjkNfWjCVHWCV07qqByBD
 
1238
QDkGSrAGPdQBZPqtDwEAK1hDCvkc0qquElEAC0Mhh3kD8SqvEVEINicL7KEE6aqvD2EAY4AFahAE
 
1239
QcABAksRSnIrTrCwFAEDZFALZIADEDsRGPADtbAHGHCxEmEAXcAHaCABHhsRIOsHZECyJfsQEkD+
 
1240
BnzABB2wsg/hAUrAB2OACzLrEDmgBBbyBTnLEBnQBEGgBmngBQ3wswlhBjLQIVMFeMeCtAORAcuV
 
1241
BFMVHAoAtQUhAR5QH0oQhnazBQH7sxXwqWwQJxNyJGxwAE+bsw7AAU3QnnFDHEmQKwMgCVArAaNB
 
1242
BWMQJhhSiGyItBYghdiqBpE6qHHCNpn6oCuLt84ikgbEB3QAJEoAA4K1AAKguBfLAGkTCKqUU3hw
 
1243
o0kgA4QSAQmwIhdrAOQ4GlawBMCEB5aAB5MAJEGQK592ALGwtt8qAAuQIIFwBQCEdAITosPBNqIB
 
1244
JaohsMVIFxwgBMLAT60bvMU0ucgRBykiAMf+q67Jizj5MkYBQwfCqwQ0wFJCEAFgAwDXi6wAoAAP
 
1245
0AF04TCTVCGT4DJiYjcKSR6i0QBzd76bigAKkLqjAQjXtyiMhgbCcSSZwiuigSeo4a11yr9pAzKB
 
1246
sAZ9KEUp01OgiyNAcpGbcYgHgBq4251yMDQgoxQOkx54EzeLYiY/8BvDURxJM75QAgHWUaaMMDTk
 
1247
CDIxOkmguwROwyhLYI9gkgQMA5WYGhRXIQpQagD9mxSfIR/+ogTD4CE8LJRlggZpwAQ/wARzolJs
 
1248
iZEJQAAVcAcqWozc+ACVwisd0oXnARxMgEkpfMVwnAZCzDBscIhg/ME6AQEJgAGuChq8wj/+x9Me
 
1249
T8wEVswoi4IGTLALhKzFTEBba/AkYIy5gfEGBrAAzeIBMNA2EawvVIBKw8EETJAGaYAGUVQGYSgm
 
1250
SfADojzKpEwFOcAfBQAAdjuX4pgBcwiVfFNQcCIIVKApSgDKxCDKexSGUSTHTFAJURRFXbAFpeFA
 
1251
kswnBDAWGIADF6k1bPMmc2ZTv5wGWWwMe6QGYyDKRDvK8VVASgAIEeAMBCDLrAEADDABczhj5nGR
 
1252
OCNcc0LFpGw5pEzKS+AKhpxdwHQFOWAIQfHMGsEIAiABE4ABI2NHSzMuTTDBkzAK2pJD6ygmTLCW
 
1253
Lshif2QmTbAfCSAAp6gTN6EBEoABa+P+ZIdSg32ICCyzMpYgj9qCCPghAzKwI2FIVcvDB5OQTUTS
 
1254
AAVg0BgBARKgAzqwvHCSSlhgB+nEdWYGO0FCC7LAynXwWihLW4AQBw+QAKrAIkYtAR1ggOtxzwU0
 
1255
CvKIavKICPObBF0wysUQRT2FB2SgZvuIJzohBwKgAx6ThR2SHsloQxoYNVIkontwIWKyR2lAPU6A
 
1256
Igpgih0hBwRwDKSkeDdgmNUCTGr3eJwIuSW3Z9A5IordAXihiB2hCCHBALMGLTCAIzsSlOm0fVIj
 
1257
ObmgaHaQJCv5jB7AHwqAxxSRCAbAAKh9AeXxlDdNIlEUv/qnXVdzH13SBLmdEkJthTz+kQGoMn0P
 
1258
AiY7ggaTkNwnVTAkIhwi0iU5INoK8LccYdrTvbzWvQy+dAVjst36p1MHpgVLAFTR8C2kRd7mvRHo
 
1259
zSyuR30wMJtj4NLcjUOToAQqGSL7Mt6JuN8a0d9YIn0APpvpVOAGjuAzo+A3o98p+uAigdrqPeFj
 
1260
XeEWPmUHLlwsWK4b3uAdnhH9fWzlQX3oMeIEXuJyrR4zA1QLzuGl/eEwHoRiTeMlPjk1iI8qzuAp
 
1261
0eIY8eJILeMUXuMW/jpFztIL/mlJ3hEI4EAgjjTVOeNwQ+IlLuVGmR6iZeUKoOQXkeWR/eNd/uRD
 
1262
HltTnh6dHIWJeOalreUygjQwkC7+aAnmUU4GSu1Lc27maG4RioDnR+MEMEAfRjpRb/46ge6E+ljn
 
1263
hV4Rh84Tea7oSR1xfl7gkD7mkk7nV37eiK7nmw5wnc7dLxPpriLqdn7ePp7oi64wnA7lno4GrJ6G
 
1264
lI7lsW7qtI7qtq7quA7qruI1u84RCNDrmv7rjl7ifVAHw46PTqhVhI7lI4Hasn4DzJ7q+vfs0V6D
 
1265
7mfso74RyY7psg6Vjc7t69cHBkSY/Uftx07uys4cV3AozW7h7B7tRVns1Y7s814f9e4vaBDs3d7u
 
1266
7f3unBHvGlHu2K7nAH8oO7JXBZ7v7t4+CT/uGgEBHz4BSE3vEI8GEs/dFH/w7nf+8a++ERrPExzv
 
1267
8K3y8SGf3BSfh/vOUv2O8h+OJSyfiRE/5OyeBjNU7yVf8xl/8x1/gP2y884OPRcI9K5i8pVOESnv
 
1268
3zl/9CDP80qPR8fjKm0g9BkR9Tiv6EYv8C9f8Aq2HoFMuwrf9USf862C9Pj+kl2SjYdyMPeL8Wqf
 
1269
3mwfJ1Wf9Aom99JSLuRr90O99mDfKvax92/f9wFP94F/8kOP94X/hG4/8XCvoVfQLwfTBo3/9BPh
 
1270
9UXfKmug92O/7pWfjZgPCJqf9oMP+cwhLaJv9WV/+X+f+oJ/EZ6v51YA+npP8OuXBwm59Kdf945/
 
1271
91Jvnefh+jvC+4/n+7SFR5j+b4iqb/siAYlIbYAdElFJMPCBnVbMD/xqJvycLxEpT/1IY/2QhSna
 
1272
H+a/7/zfv/kdMf5fb/5QtQT4F+W3Yn2Z2GdfkwDDv/rkb/wA0YTKljVXlpDh40fhQoYK+yykA0bJ
 
1273
li1XBlJZ4wREhAYJFCD4F1LkSJIlTf6DYIDAgQwchDi50UQgQYNk8DTE6eehQjpqJlbEiFEjR48g
 
1274
Tx5FilIlS5cwYcxck+TgzZwMd/qh8+Unm6AZN3b8mFRsyZQrM1z4ADPmwC1SbVa1ClErRa5rhMYh
 
1275
GnbsXqVm0aqdueXHVIdwr2bd2tUJXrBG+YqFQMDsg7Q3nEB1S/Uqzp18ENP+Vcy46OOxkQkYyEAZ
 
1276
5uWBdpXYfLi5YefPW+rezeuY9FHTqFVbhkrlNZ6bVHP2SYjnc5Pba3KI1rubt2TflVlTFG6zuOHk
 
1277
y9mwsescum7pZKmnti5QZnbifoxz7j6XOXiCz/MCKD/9NHon/QVasYKN4barCjn3vKNPvPvyOwmC
 
1278
AvZTLYfLtgAwuz6Ie2+24ujwYqIm1gBvjS1y+Moj/Bgk68HqnJCwCQqtYI8PPjK0akOJtvgwxBFL
 
1279
VOBEFEdyEMIPcmjxRfYUonGhPDbswkMQrRCRxAV/BFLFloYk0sUmrKiJqiQVWvLALpKQ6Tsr6uPR
 
1280
RypRepCpIf3bsokukYT+a8kZ6ViCzPnOtEKICB4AS00qg3QzB+CauGxO9+CiA8M68ixzDT79fGAB
 
1281
E9cUidArA4Ez0S5smvFLrBxVIggXwbNiSzj+tLRHTEMKEjWXckD0shyswIIMRPAIldE6lKujVLok
 
1282
pZDSVgX9MdYJZoUBhsuc2CLXRkedkaGE/Kij0S/IENa2M4vloFIGFFDlVTZPW1aIHGRwFtE1pL2J
 
1283
DjqyzSnbrNBQIokgqLjCRUlXFZdccyEYgAAGJujgJXYvcxGLMeTFo446vqBDxobs/QKNJX4I4op+
 
1284
XeyT1dFeJdjgIxJ2YmF/HSYjqy9erhinie/dOAklPt4CECEeqDSBBSD+GHgAAQ42AoeUYcABhiAq
 
1285
+pQMMrpYogtEZMOK4jrIqFkJLHDMeecHFPAZaJIFGHqCIoxm9walBcKiC6iVWOKgUXCiowzlJtkY
 
1286
biwGaoLTCBwAewHyfryD7IOLQGJdGZKm4YYt+C1ViR/S0NUPT3RqFOJ5u2Ai7ivMDGRVwBWwoBBz
 
1287
3yBAAAPMxiEHGGSAnQYcXKQiCKVpUAKNOiD6tVHi6OjiByWUoOK7JnL4AISOLF3EXEXIlmACH1oP
 
1288
IgkaZJghhtdffyEIGiZv2eWXqZmxjLqZSCOJK5Kg4ngSF1BggQIaMfcfACqI/uwctpCchhlgmAEN
 
1289
rhGDFwSQBkxAAxn+Xta0mJnvC0woVRCCwC7kcWQBDghA/f6BANVZoANridvG/EfAF7gABwUMghLS
 
1290
sAQ0fGoSX8DDhb5ACxlswQnNQtoHPgA4BzRgcFTiYBgmcAEcyCCFaYCb5GRAwBYgwQUFVCELP0Wx
 
1291
rKghFM7ilLpaJwQhOGABDfiZBv+hCAAQwAIeUNrwgiA8JvxgBiX0wRNnUL3hsZAM+MrX4jygwxzg
 
1292
AAdIwMEHGgDGAYjxHxXQAwLOYIEIwOAHNBjhCyQpyRtIMgYuiEEmY5C9F2RyBm80IRL85IALXIAj
 
1293
DVBABQy5QQAgoAILuOAFOtABDhSBA0ZwQS43eckWZCMbPegBC7Kg0YIWdEOTN8DBRiKgQ444gAGr
 
1294
hNUiCIEAABTAmgVIAAMYYIBtSkACGcAABi5xiQtgwAIhyIAFLABOcDoAAw74E88ARwBoikQREBjE
 
1295
IqRJiEJAAAH+BMAADnCABPjsiw5AKBjhpwCwFTQBBxjAAAIwgFbW8yQIQEAhCkEIjna0oxrtpz8x
 
1296
+k+AAsCk97NoSlW6Upa21KUvhWlMZTpTmq4pIAA7}
 
1297
 
 
1298
set HourGlass(hglass_1) {R0lGODlhUADwAMYAAFpebLKyvIaKjHJ2hJqepHqCjGZqdJKWlNra5HZ+jKaqrG5yfI6SlM7O1Hp6
 
1299
hKKmrIKCjG5ufJqWnGJmdI6OlHJ6hKKipGZufIqOlJaanPLu9H5+jIKGjGJidL6+xK6utNbW3F5i
 
1300
bIqKnHZ2hJ6ipGpqdJaWpHp+lHJyfJKSlIaGjLq6vIqKlJ6epH6CjJaWnOrm7Hp+hKqutM7S1Jqa
 
1301
nGZmdHZ6hKairGpufPr6/F5ebLa2vIaKlHJ2jGZqfJKWnKqqtG5yhI6SnHp6jKamrIKClG5uhI6O
 
1302
nKKirIqOnJaapH5+lIKGlMLCzLKutNrW3F5idHZ2jGpqfHJyhJKSnIaGlJ6erH6ClOrq7Hp+jNLS
 
1303
1JqapGZmfHZ6jGpuhP7+/P//////////////////////////////////////////////////////
 
1304
/////////////////////////////////////////////////////////////////////////yH+
 
1305
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
 
1306
lZaXmJmam5ySIVAdHVCjPlIRETipUqusF1JcozohslAhnY8AXKypqlJGRgvBEUHExUFGXkG8Pj5c
 
1307
BjU+ExM6AAC3iKkLQaunEUZTU9pTQQPlA1Pn5OjjxEbtqFwTIRMG1teEqagRCyhB/fsL0A2oYGNI
 
1308
goMODnYZMmLEAGLmHqJbIOVZB3v3LvjAUSLCABTltBX7aC5KliwbhmTp0iVKlHM9uthgubBhOSk+
 
1309
DFy89yengX3liPVDgW5El4EyE2QZQtNouR4uaapMaWMcDmYYO+E0YCrgOYHjpoyI6SCLiw0bXCxh
 
1310
enRKjxH+BbvEOJFlSYEsDqoaSbXzFpecOPYF6RFzgMsoMlWqPOvi7pCZNoLGHDKkwJUNd21UGLDg
 
1311
qo+smwww8+EFXY8BhKN2ObkYrVkXeG30IDe43AiVJzdEZsfRVqcQOUv4IObWLeKFC3GndcEc5dIR
 
1312
4IJAH9uD8uqWnL1orAEaE7RoOIKdc3h89cksBVxAuLKEuYsTQ6KgixKTsOEuRumPo4iz+yVmBkxg
 
1313
ikAvlWeeC1cUwUERRagHwVnYITaTfIe1JF8QqPTXiWgGcJXMAEYZhdxCJyXIAYLuQdhFBSSyNABL
 
1314
bx3VjhQa+bZJDX9xhYM60L0o1VQQcLAgBA9CkFJyWdD+FR9LFbj0kDKpRLMhPT+581VMUR23XJBc
 
1315
QlDEWkzBpiRLWUqEAys+dBJNKTtCNNhLMbGUwAlnXcEBkQ+mtZRZBWywkkw2ILbZOEbQiEMNG+bk
 
1316
wwJAlTPFS1IlyRyRRRB5510nIehnAhZC9dKTEayCKCeileKNOOfIVN1qlU1654Pu+YmZn5Qdp5mM
 
1317
xETJRScTMBOYO9G96SNK6bnn5Z2M3XVWFkq1ZN9p7ITKzJQb4QAsOT6Wh5KxsOYJW7EbjHiUYQ8R
 
1318
FeWooTlzwY7rzBdoFyfQxS2XLjDYmFrvWYeYbT2EEwRF03LSq45BCFSwjyydgFaKzFXKHmxLXMZs
 
1319
FgT+ReGQbBKFihOviuLQjzrl0LQauAgiC2ta6Z3H1EyEVTCbVVftysloPgxjjrusbtvYFUUWmWIB
 
1320
8VrH8hTYzaiRmqJJIZLBcK2m1AZ0MnYil5UWe15LLEEnGzq5BryJohuR81Y5Lk2WKWwN9wyrZX0O
 
1321
EQOTIUdRsDI0pkmqr/yQ41APTSZXGbhcMgEBEwyjpNJxhJ32JEVH382VeG6FTNNSsdY7tZcPFtCn
 
1322
n0shBu1u4BR6gcyhMTNgRAhTdlKfZ1kaJOEnu/anxSB+ymjdG4oWXkBioQYVvFM1twHVRDIHLufO
 
1323
okbfk4VWhLSvEI2VegIqXcHcEpgL6cKJ7i2x1p/+43Yx20PS2r2JgBsFgy04LFImL76TVmopwymB
 
1324
f5r0hALYiS7MBHO/8nI6m/WsJ6QTCW49ZzkB0MAHIsLMbS+Nu5GvwoOaCriFJe7bFgQKoLbBuUdn
 
1325
J6HJaQKVDi+cyQAcexy2zFEBtgxhYT3T3p2QhRbN0YUmF6wKOM6Ukw2VwACpEIg5MDgEeVlveHgK
 
1326
knqYMzzrKYllMRkLOzRiPk3QoxTaINtpjnOe9KQlSCeaYeZQdjUXRUE2pznGVdCliQ4Z4AK8E8jv
 
1327
KBM8JuJpahywnnouAx+2EAaNtPEMx2qgtIM5ZAosQhIT1RNGLp2IdU5ky1HeQp9iXAWFAhPO7sr+
 
1328
sRvE4OY1MFTi4Iq3HEythD4hMgfdqpiJDqVvHANxS5zOM6klilF7l2EMfET4Ih0O4EzO40SOComO
 
1329
qswRPsvZ0tQER7gjpoUus2PZQwbgBS9s7G5YrI0UJyevtFRqQTPkAOGSCZuVxAcq8UmHKjC5ib8Y
 
1330
qh8NJBoGz+aeZRZpOYxBCXIghasgmJCdbazI7sDRoygwJUmvKZ4jxbmg1jEnXhiE1FNyhQOAZmJg
 
1331
hRwMxjzpnHq5h2cNxRNj9GTOoxgUP6cxYUUT9UZUDRGDS/hig64guAJOLab5PBKM8GMOlVoUE72S
 
1332
QngKxjeHzHMJr7HesXqmqbS4ZgOc2ulLKLr+UmFWRGkLMIdRu0C9TOUJpAxdIlqIlLLZSQg6FP3p
 
1333
JZI2VHLw9DgvRIlShfQghzHRqWoBE1PqExReqNUSScOqWBzyooPq7IsFhJ048emnXa6ohbRTY1XP
 
1334
Z7os0k5EJNqSg3gGKyF98SxIFZdMzOFXNQHGZk6JU7yWw9ntMQGP2vNSg8pIHzKRYy9X4ZhQ+YGa
 
1335
hsA1XpPiWYOKtz3tpaU9NyST587xyyhtCCc7yiq5RuBJ4C6hQYyE7Z3ScgXrsWavC6nkFCJgQlYC
 
1336
FXpis8FYkDOE9ngwYl4qmTiXqJ4NxNScL8lCGpVhTfOudRVwJNBW43WCyyBQlK+d4WaRF9X+1UTm
 
1337
HMi45tcEmsWxiai96PniBpDlgtcSbpFOPckJxDcAiqWxmhLWBBc0QkFObhVeKEGiQgv4ugYVgaTU
 
1338
Y8pxpBjhv1ZiAizm3YtSsxCopWVInRUSAZHoxBCKrzouKUZ/1cRDr9DOk+bJQgzBGM5J5YlWBrGV
 
1339
fKwSzNDgZDgCiUx1lKJB9SiouNwz2RKdLL4Wio8cCyjvc1/5u6btaTnISiwYlcol1xhEZLtp7mTb
 
1340
SEXx9EA2Bj0PWuxUvAIyR8GUhhr4+hYR3JKujUmT7n08uRgOXo6u2tveerzFLHFFlr86SNQrDaPe
 
1341
hK3GLiJVUJyV6FFYjbhWNsiCYfqlChv+MTqbqKk1cli7R1THWUE8Y2IBhMbVsdzWhFDgWP8EsiKa
 
1342
JGA5H+7wrpuZRD3RUTYr6RfdcGDsTGwkfbSuc8JeIzj11PTDzHRQrNgSqASomczZFiZgxHPGxCxE
 
1343
aq+l6aWDZD0bn+i41kFN1nJlzXZjgistLUq3uZobO8UWl+B8LcNnJbLUokNjAZ9w+sjBIhvMZCHt
 
1344
AWs9PcizmsKKOUU8ZTpnxO4UKq12Lm9ha0wURu4x09l6LEByjrISR50JBylvY2WDQJAJzROxgWY4
 
1345
I6m276XgZ5IFM6EXLH6JVWQcUi9fSi5fB/LBIf3h4Tq0QS2GDhxge3+74KQkJf0gISn+iNeOJBIT
 
1346
GuQn8xQ8JjsMDNktIaASCBUp1rlOevreIMKFs8tLhGaSMMjTcJhw8ZWowVXCMwWXW0d1w7M3Trnn
 
1347
yErV8jysuQ5akRGBWAtsFTsKGfVmspLckLQANXX2pWm6sPfsSSZWUYZ/LBECnPx8WJzak2L+tOGt
 
1348
DwlFrzqLY/7kMmWgYvmW0AUFqdvNI/2avWgRvqpv3hyksoWa3pDCNegBFKNkIUHumfZS+qYUVxVP
 
1349
qYyxLOb0GA5BDAvQAfP3RkbwIvKCR3OWAO1jFpaiPQoSYksxJ163IpzxL+DHfFj0KF3wRUxVeEiy
 
1350
Ya/yYcuxEi+3JGQCDp3RgZYABTX+UAJudQIxZySXcRdsRixngRYbcAWs4WSYlRgWNAAREHW/0SsX
 
1351
YAQxgR7uoSQiVixX0Cd1MW0jtnQs8XJcNQRc8xk88QdQYDqPkiRTkVxTuDCcgx5LYVg04QA6thAZ
 
1352
g4BfOA9sQjRBeDi3lgU3dhJ2sQQkAh9xcR399mD+BIOZAAUTUAMX4AWJNE/zVi+51B57Qj0ycRKc
 
1353
8nIPNg6GqAmIyBVBAFd0VERToUdItRRXSCIqeEYPRk1s9IWCgIiERHXOohQNFjxmEVNFlGWckkqz
 
1354
QRGuaAgA0AG9ggPo0DdLhxiZojBI1UelmG4REQybmIQdAERPoRkGsVfxEjEkVRf+jbGL4JAOQRCN
 
1355
tzABwigFH0JdQoc1L1RKZjGFfzJNQSGO1wAKExBEBIIcS8E6D3IZnLOK6iaP9yANAgIsIFIB5mSD
 
1356
lWNo43IOCwCQPIGI9SgOhAEvq9E6N4YWJ+BvzyiHv+gIsNgm6JAcX2QnPRgunzIARtCKHckI0rAR
 
1357
T8FRDdMYaKGRIBIE/rWSi4CIPuAOblWRMXkWDrAZ0CF/OCkJiZh7hkEZBWAvljEEN4MDRUkJ9JeU
 
1358
TIFEmOECTgkOERCVldABPgAi4XV/PpgFLzECW8mVP+YFA/EnzoFUVbEAaHkJE/AoJ1ABCnMeD+aQ
 
1359
cUkIAoJBBdZ7XRCOeymXXVD+FieCNTYwAYOJCT6wFFWwAx+wEkGwmEBVGRjwBV/ABAmgl5RZCDiQ
 
1360
BRigAR7gAGfZmZdwAiyAAC8wAqaZCV1QBSAgAwPQmpgQAVnAAirAmbQ5CDhQABggALq5m3+AAy7w
 
1361
Ai9ge8I5CTjAAQfQBHCZnJMwAFVwBBiAAtA5CTbAA1TAATFwnZGAA1HgAlSAATwAet5ZCAZAIkxw
 
1362
BFswBMHZmWrJVSn4nouJA/exARjAAV5Hn3E5lwPAFCLgAUKgEgnQF+dpCN9QkVRABbAxBIRRDQfq
 
1363
meTQXvhZBeY0Ew0Zobw5Di2kObO1T1NwAfzZkW0SEwszWyoxLgswASP6hVL+8I0jIJZu1qBo9Ess
 
1364
6p3DITZ5KAAMwAPWM22fsg3UAJ1cQBvlkABMxAQMIABFkAQ80HSzsRdQ0KLnMww6+oPctV15RJaV
 
1365
lGcGMKW0OQFWWjAG1U3Y5QJVgClgZ03cQaWW0AHJAKOrYV/MoUcU0ARVoBIzQVh7UQ9uOgkhwC4H
 
1366
c3CsxY88cAQcoBQEuBn+VFEQupeByg7kgIzooTmpZyQx8DY2UHh8Ix8n9KhcCQDkFSyIoRR36Sft
 
1367
wQNVEAMroaiP8WizkQos+qeMAACpUAxu0UJ0QisixgFHYKF4oTrWcRtDeQFtGpU1MxKGQalsISu1
 
1368
ZEoxBpiB+alFWQNeIA7+96io88SqlQMBsHcXLTKtxkqrhwAFO6KWtnEfQqM6McABGMAENSQ7uYES
 
1369
rMoS/nQBBsoTAGCOxPgi1GVQTMEp05cFHEABg4ciY5kArGoW6IEfqPAZ5DoIopdFRqGFx9FHKrGw
 
1370
V2ACVTBTXpQFMaAsKDFi1KQhPAEct4oY+UFdMWJYsFcE2ykrZuEnrMNEoYWSODCkARkepUFiZMI3
 
1371
wPNtfaI5ZnEE3oqGZ8g6DdIeKzIFV0GuwHEK9tkkFXIYf1MspIRAJDh5PjN44PoQUpCvZnarpYdB
 
1372
ptp/dvJmyKKkFuoAhTkE9YI5XvJamMEURuiF45gNesNV1IOQe9RZfaf+AgxQBQ1KPZwTgNqzFOqG
 
1373
A7RqAMFgn4GCesVSXAzHPSzAAhwWhF0UgNNGYv6kmL9RLcPQJHQ0swYGuNuDASmQfZiSdHA7K14X
 
1374
GUbwfbyyLosiHXARPD/oIGFUTyogUhvAIG/Wg3ehJy2xH17gpgKyWyBRsT7JMA3VSN+0Hg0SVpmy
 
1375
LQthQY3qpmylDVGQSGXBOQA4NcWlqooVaHCXhsjxENbCvVflPy3HErmhOdtTvdvDAjRAA1SgAiRJ
 
1376
Vw8Ce2hBGRVADF5gBMhpRW/UJpBCEKqDNkvUd+JEARjwu3TlWhIzss3yGJyBCgfcShUVGFlFEI34
 
1377
be7Vd6pGX9tDuYL+01ifxBZOewodDFSsgC22oqivUUt+l8KNRLnNoXnhwlO4FcNyiXuiFhk5o1lF
 
1378
5wI8kJ86HE7WU0TQxBYDTF45yytEPB8MQSLfZiyU664/wAMCUG/iRFwihlAwAjNCzHg44ApeQRBy
 
1379
4j67m8RCIgA8QACY68Q4R0fN0hIogAxVnElhU0z4AbCZEm2opmocAMbiNj9YiRuKoYGNmsahh3sr
 
1380
JD5ZdpVyXHSsp2RG8h5+c0ol9Mdj22LlkWM6M8bMQcfgJCQHdCJNFkIhVIAmJMlS6QotRiafDGhF
 
1381
hwEZIACuDEYOghlrOGKn9BJBbMWrQMMy8cmXxmEuoAKYq8qvMjX+z8Rmj2zMs7whF1ACJYrLbNnM
 
1382
65dHEMDLliZSjawy5zQFfsyRUsfNVvZ1dLQwa7sgKiAkKsAD0yxc3RgvZiw+6pwKPiaVa9xiTWIU
 
1383
TEGhOownKvC7jiRco4SVc3J+/owMRgC652PLAeEppOaTM1UkB8DEJxi3RQCEsJei/tyon9ZK0CVd
 
1384
K7gQ/ed/QcIC+VlTIs09WJkk8LFL6eANFq0J3zFUA9EQ7HXDKCwAL+C/I23O4VLS5/QQyNDTF7XG
 
1385
Pwe0ZvtCrvJNHCAAE0xjE4gvCwEfrPEpexEBUA1UwEQMj+Zy+OgnAAhnXdIz9jttKkHMDHEae1HR
 
1386
nUBIu/UUfib+vyUzgc72KmBEJMJsislBdwVM1rX7OGQzE4e2EJNnPQnmv28tbnoyJznmjRgSATf5
 
1387
YwIVAcVkeqWLEsfivwXEAyqga3gSWooRebOx2Z0tlcKxLrnaNH4zuTbFAlQAxjQgAB1WXD2oOvBx
 
1388
iUFBXrE9CfXIFVaiXo5tWNk1QzzAACrABCwgAJXdoF990A3xL8ZtxflQDiyCZQfXzENiUxww3eIW
 
1389
bWt4aJTYLyp13Eb5wQfTiGzxGgx13+KkAi/AAvKzHidiTq3mdeTzT/szcCGZGC6UHgzlOgxFASwA
 
1390
3Eq0hpQo4OzrBWV9CYTkeN9gGLk7OWph3gXkekmUwmdBGXP+ctBt4U8WzitPB9rUJdRS0SemPWjm
 
1391
vXUNGopww76KLTBP9w2IoRryaxYgfkA2B8FGMsyS1AVcYy0Xrsap4A5D6EJCzuC+PF+cPCRo4Tci
 
1392
ExKz2+Q/piMekS0ikynmDQHjqWBGfiJ+iLFkUtx4nUmuYCUWIy5e1SWJjLlKrFikNIACu1fU9Ate
 
1393
XsuugNYFR5EHYlMkDgEqYMcqbCQulOTlMLtvfj4rLRYr0jQHBdO9O84vgM8hrVMNBiP+dAqBjtzQ
 
1394
VRrDhow0gXVxW75L6neptt5v3BaSXuqSoNfW8iY/jo9pw2X2ZlPH4h4mzlXAU0nWsuM3ws2+4FZw
 
1395
4dgkQkD++sYcr9XFFYiVIkORY0Z7AY3cGlFIyyrUB40ZlpJgg1PlJgN3LmRrNkDAAG3FYfOJtXXt
 
1396
SUVcz0wAGHDCqlYEa/jGOhYd7X573CAdLnFhJCJfBVQF9wzrKQwBkpgwp/gkULLt8b0KwBARzr4Y
 
1397
eKJUFMAAr/Jm9P4nudiCnPHv7TR6RtC81BVsSKJldwQBMt3KtmQkR3LQKTo+PpXXbDIMpwEVgYjx
 
1398
bkc4zDTuvOsaI6IvKSWrHHMB60KmLxGISpEe0aYgf6dEqq1H4HOKlYQKXqCSQ+wDFwARw8Z5IzM/
 
1399
YcQE90wB6J1qsOGXyOFAJjTpVnQBQDQMj/JonEcZcfz+dxyAvwzwA1XQyjj4JxDlIgWDW7YeCdAQ
 
1400
52QKIj2PHpSXwgLAAp4u2PV1So51Z/zlBRIfCb3CzaAdku3j4ZLtOsGHZJlrayA6XtV0+JCgiNUi
 
1401
SwOghRw3PAzCa2heuYQH8pK07mqUklas9MRINHBxHADrKpSWyJPvM+oh1wljHUVo+Ek/VIh0H97W
 
1402
KuQrJAywnYPHPUoFhOqIHLwPJfDN+XKf6wMhG1lY8JTWawJg3dknPyWO+jneGYuWCYr4dHtrdbNf
 
1403
vbp22jxQ04AAAZHVVThUWNgzFeSFYzTxFyk5SVlp+VfjI4UTNDUw0GPTZSM6lLVxBcFx5VLkwsGB
 
1404
QQX+63Ll6rJBiNh1ODIwhbMJeUlcjInjwzk1FVXYPBKVlcXK4aIKCytEoSrogjuUgHjYFdUzEBTR
 
1405
WGPMXjkhpRkBSioaVdF14p1qXc0BwcQghT9c3UwVOrHLXBAcDA20exhpQjIfCzwNGNUsypB8G1RZ
 
1406
6wZLQDWCEJYUGLer0Cd0joZBZJdpUwRm90bZzLdE1QZvHV9V86gvV5ZDWTQeUhgMh8OX7N6VYOhp
 
1407
lI0RhqZ5w3XVRRUm/lLtxFVAGq+UKxc0csmUmEQpUhYE6TFiiL2xJ5bwrOWNA4UXTHzuhOAtS4wu
 
1408
WRKIItcjiGIcEdCmtSTRwKYFNqKQojo0wVdWWfD+8hDADcKGnTuzODB1qFmXcwsZOn5M6Z2mBZ9s
 
1409
OBhBquqJ0dJOFfnM1R9gwLx7D5GrcKGUIDpgEzPgQxOOTwMu4y4ldugpFwxmZYXAakPYU4cQmhtg
 
1410
JAIOLwCcX5J9YcGCHj0MdXFQQZQuBzayFCggAAs8jPQRLhskMBQvQ9gAygDqLdSee5XUIIUBONA2
 
1411
QgWHDOGALnIV4kAhpAmQAQ+jscLTIAXwMpQNFYwwhVleXBChhJRApx5l9UnDnw0JxCBKBR0mEFYB
 
1412
griyQRFFDJfLcbqM4olZQbxm4x9cwBNEdfr1JpWLLobSYV8b2DXmcC48+QyMDnqhWAhVumOAAW75
 
1413
9QBOZ70RQsonI4zgwAZU8ODCbi6QOVQU5dhw3mqJeSFfjW9KEmd8U/QnVgxiGVYBCi/ychUTVwjV
 
1414
InUD7BnFJ1Okt8BSj05iABcTWHgRkDEY5mUX1+VpQwwuULFBfqSEmOdKinXCkpurxuaDRBcascw5
 
1415
v1Q36mEjxMDEBrdRVxk9lXnS7CJBqHrsJBNA8SqFmkiHw1MXMBaBWyO4AGMERjCygBH1zqvYOd56
 
1416
4UO4lxgwbghQdEDwqxPU8A5DjXiBbzqtpbMeQwxFF12r/rZTQw0EhzDuBB14PEHIIiOMsKsHQ2dw
 
1417
vxevzHLLLr8Mc8wyz0xzzTbffHMgADs=}
 
1418
 
 
1419
set HourGlass(hglass_2) {R0lGODlhUADwAMYAAFpebLKytIaKjHJ2hJqenHqCjGZqdJKWlNra3HZ+jHJyfI6SlG5yfHp6hKqq
 
1420
tIKCjG5ufGJmdMLGzI6OlJqanPLy/HJ6hGZufLq6vIqOlKamrJaanIKGjGJidKKirH5+jF5ibIqK
 
1421
nHZ2hJ6erGpqdJaWpN7i5JKSlPr6/IaGjLa2vIqKlJ6epH6CjJaWnHp+jHZyhKqutGZmdHZ6hGpu
 
1422
fLq+xObm7F5ebLKyvIaKlHJ2jJqepGZqfJKWnHJyhI6SnG5yhHp6jIKClG5uhNLS1I6OnJqapPb2
 
1423
/IqOnJaapIKGlH5+lF5idHZ2jGpqfJKSnP7+/IaGlH6ClHp+lK6utGZmfHZ6jGpuhP//////////
 
1424
////////////////////////////////////////////////////////////////////////////
 
1425
/////////////////////////////////////////////////////////////////////////yH+
 
1426
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
 
1427
lZaXmJmam5ySIEwdHUyjPE4QEDSpTqusF05VozcgskwgnY8AVaypqk5DQwzBEEDExUBDV0C8PDxV
 
1428
BjI8ERE3AAC3iKkMQKunEEM+Pto+QAPlAz7n5OjjxEPtqFURIBEG1teEqagQDApA/fsM0A2wMCNI
 
1429
goMNDloJIkLEAGLmHqJj4ORZB3v3LvCgQQLCAAXltBX7aE7EixcfgrywYqVJk3M6rMxgubBhOSc8
 
1430
DFy89yengX3liPVTgE6ElYEsE7wIItOK0XI6XNJUmXLGOBrMMHbCacBUwHMCx/kQEVNliw8fWixh
 
1431
etSHDhH+BWe8mPJiSYEXDawOSbXzVpWcNPYB0RFzgMsmMhssfSEl7d0gM2cE1TGjQZACje/OsDCA
 
1432
AVYeWjcZYMbjCjodAwhLtXJSZeMPjFvgnaGDHLlyTVSe/CCZHUdbnUDkJMGDmFu3iBcu1J22RQsp
 
1433
KJeKAAdk+ssBQSC/mOGQwRWNMkJjghaNRrBzDpOzPjmlQIsHjZ3LZoiuCWXChlu21DGOIk7xlzBj
 
1434
QASmCPSSeus9JwQHDzzwnoMftGRYZE2MJZVL46DyXyejGdBVMgMYZZRyC530nhLyPSfFEixZUCJL
 
1435
MR2F2EPHOKERcJvI8FdXNKgz3QA0LYfSA0pwIMQDQrz+l5KQrSVngUs0LhMBh/T85A5YMV3IUnMP
 
1436
MMhgg2sxJVtrLDVh1EtA+EADKzx0Ek0pPUJEjn0xWqGUWi18CeF8jBUAW1P6cTbOEDbSIAOHOfHA
 
1437
AFDl+PDSTCW+8FyDlDJ4l4mNvZBASwdeRwwEqxzKyWileCPOOTLpwNRS7knRZYMpwmYXbNmNaIWL
 
1438
NCqDVRWdRMBMYO5QN9hLLKHk3nMPKrHnXWdpuhKd+LEDKjNUbkQDMOOUUyZNKDnnqoOuxvfCsRFC
 
1439
xhJuDxGVCg+iiubMBT2ug9wMiM01hXxHvtrCkS24l9YU2dF7VIj8aUMRtZz4CudXEtVpxRRoySeF
 
1440
c7D+LiFbWks466KZA9AmEag49ZooDf0MJlCQ4zr3wcQMuqpyv2MuRRNhFtR21a5ukjqMOfUVS5Vz
 
1441
7jkIq4PeFjAFwGxZwZ+E7djYJic+ORFMmkEl5yxsL3Pwnp6YjTmFfk75QBs6xHyG6K8MpHadS2XR
 
1442
5ZykD35LNGZ+qtSitk2kqYzTiBpgXj9RlfPkcpeRS+SrWqdYl0rJEYYajRRpxKGHUqftFmEoByFf
 
1443
Wl0+2KAUBfi5BF1BIIaa2GD5QOgFvEKdkykgRQRpdif52diRXmpN9AdLZLxSSw6JcN2ifLu+kThj
 
1444
pRbVwz9ffHi+QDu3BGzPohYVak1XdPbxg5EFJEv+Bpmlcr4ccCBF4iqn9PvASts27dObEHi8No36
 
1445
4GJ2R6s8secNov+c+jLxmPcGJaBO6IIZ5yHY8uxkIm85p3wo+pLKxkUXmihQb3uRHCeg4TfzpMYC
 
1446
bgEfc95TAKFVClndGtPMOvaScVxhTQYQWVfoZ72BsCUI03vPvrqkNWUx6CwfCN1JaAKDmFgFHGvK
 
1447
iZtwkgqBPE6EJ9nfByjVPx2eBT5jYgvmyMIOjcBPE1WqHG5QY7XanWVf5cvT4frlmLmsL0S0wd5e
 
1448
2OUmZlyAH+CACmKyQ5X9LeGEnaNYs4LQgHPdpzYPMVvC2OUEIHzFIfaD4suIlKcFdc5PyAKYBUP+
 
1449
ZJ9iYCWGCSOOeW7Tmz2eBG4Rw52rJGixftGleiIyx96+mImRBWQwIMTcw442MaGd73BFmlha/pU0
 
1450
1Mgkj2vS3gaZITWqWWV5QQBYK5uzoK0FEogteGWZZoK9AVzhCiFz3QzJ8ZZzQIo9Z+wf4tLYHIsN
 
1451
sXRRKV06VAHKHPGABPACHCSn0kBv6e6HD0jLxNxZLgmdqxgvrKcmSuE35P0oN+uB29C8VKQfTvE5
 
1452
Q1wIsaBSNhooNBO+mqE2KIObhUwhY1akmLI8F5+VvVNGTPHeCz1aRx7ckWGpmUoOP6fG8qUxoMPM
 
1453
5lpm5hRzzPSjmPAVCcwTEB1YgCzggxjcnIP+OxP+b5iw+cCmYMQ0XdF0gzgRI7qSEk1JQchVFdXd
 
1454
axrknoxKhTu++apoFgYR7uRnIbKiWPmSBKv0nXF6fFSa0oLCC6ReYjSrCIaFtLUqiAlzaxXdGgea
 
1455
0yyZ3coCpXPIMVJhWEuEtJmGSQ8/BWrVvpaPc0D8WtJkYo7C1tFvO3vK9+iyskk5yKerTKMQ+HXK
 
1456
MsUobwPYC1ZEttSvvEV44GsgfGDFrzyxE08Z5dRg0bEMDlWEqeUInikltQQh9PKnPg2oFPbXGqaU
 
1457
pZM+gMALaZlUwECkY1BlCg5PlE6i+fQ9vUTLn+T5AuwpA5zsDdAq7hg74c3WRB9IEn156KX+B1XW
 
1458
TtySzDmQEc5NlIJ72b1rEGBjOyF8wEgPTOP/Wsqewb6gZg/5ZoU1UQWN9MgcReUWxKbYIO8ymIdJ
 
1459
8nA2NZUdsHGRwp2tRARcHBC3SHiPHzhpC5S12xBr7XwJVnBvlaYqlyB0xZnwG04eeSDluNG7u/Vh
 
1460
+XhI1SShZSkGSQ69qAND6zKDah1LjUFOYjEHhdm5ifshX1UII8y2rzPrdbN55jWixQjUSFJIK5nf
 
1461
Y8kzGyRIvRmAa0flxfOQVARlrcvKjHTb8rGsc+fzcHQHFxHhtm6upUib2riznHuV0Hy4y90Dl3tG
 
1462
TZEIeFG6wg3ONugJweVhrLEL9BbdYB3+Em0l2WmCXAzDH1XgSBMGuMA4UyMw5dS2l84ldud2V4Ae
 
1463
zyQBZCEHMmjABJEh8DS3okkCmoM+T/eUYpRyJx9psxL+7I0Gz64lVjz4a6cWC24gXucDq3kkKbKF
 
1464
XgmQjL3XVG5O/IV7UYmMfM/IgSLlaeCJs7PWMNbjnDqlbODMNyYufMeipJuBEMNzbmcdXhQFMUI0
 
1465
eQp/BgCyhluYifQjSJA2TFURv/tEXfKufMraEnk2Dd8ylBonZ4JZs6RlQVqruHOUVVGoy6cAyznK
 
1466
Shq1JnLXtJkuksmIfsbD2wbyVcoi2llUEtOj2OyFVxD5JVYR7YA4BFBLSadP83zjYG7+vFybyo2Z
 
1467
qPtCm2tCBk4ggRNowNhz7qbTiNPrq4hk5pWcRNmCRWJg5O7ZXSAlYKyxQtAqefHcyVqHr5wL+Ioa
 
1468
jhdyvhIy8OigZdJj2l20SxF7MuL6mqRTkmkl0znGFSCw64StwoNASoC5LI+StNTO9MROdMR2bDer
 
1469
KEMZALIEE8Kq6mJtajFs/90HUATMvqoRQo/5Xc2UgYrsW0IX/G7CXIDIFNUqZ8MfPr0EFZcxtnjT
 
1470
G05wDfQADMvDGODSL2w3OAlwL9akdnvyYAGjWY7UAQIYbUMAJFFkPp3TewlwP5ISa/80TK2xgJbF
 
1471
GQbjfpYgHFIzFlbAOVb1J0Iyfl/+Yj5nJBuAUjo0USHhQAMoqH2INxjBpiDDdBdKsRuYoV/Otxi/
 
1472
Yyu0B0I0Z3jB4SsXMAQxkTJvo4RWyEbGEk0iRBOQYidBQDagwRN/IBylMBZzQRUZBToRQz0U1GPR
 
1473
ZRn6EQQfQ4FkOA9w4gPrEX71AhsBNRcvVyIAUxDFIhNNkHBBcQU9mAlMEAEyAC9hl1z/pkPDBB0q
 
1474
oXz/timQImHjsIia0IhdUR0ixEcAk0LNAjBfk1wrQS8zIGHe1C5kOAiN+IMbowNKsVUl4nyvwYWn
 
1475
tCmxVBsUEYuGAAAd4Cs0gA6Dk3WIkT8nRT3Z4YaDZQ7B4Imd0IgdYABXABWbET7+SkNntQaI/eKL
 
1476
ecQO1HgLEVCMi0cOwtN0c5hD/QI3d3FQslSO1wAKEdBEBuJll1Fn6XMSrmhv9HgP0kAgwRIiFoBs
 
1477
pogxtDIw58AAAckTjXiP4oA5XyMpNKZfmuKKnWGHwugIsxgn6LAcqOVyaCEh5TAEsNiRjSANG6FH
 
1478
JiVIBTA9iBgiQBBgKrkIjcgD7kAOxeItu9MAnDEdAXiTkuCIL2YY2VEATYYZdMh1REkJA4iUTHGR
 
1479
7kGH4AABT1kJHcADIaJRFnlmLyECWJmVQsZ4B1kssrId4UCWlxABjjIFB+k721EOD8mWhEAgyQUd
 
1480
oQcEdWmXd5kgSyITU+KXAbL+Eg8wAj2QALVBmEmlEj0ABVCwAi/Ql4yJDx+QA5AZBWNZmZcgBQLw
 
1481
BCkwA5yZCQkwAQEwAUAwmpjAAAJgA1TweqrpCDTQAhQwAZQZm3/gBB8gAB9wm7FJAxzwA1EAm7i5
 
1482
CANQAD3wBApQnJTQBFOQARiQAcwpCTRgBS2wAiuQA75ZmTLAGtgJHyKwnYRJA5QhBBOwAnQhnnbJ
 
1483
eCzRAkVQBBMgBFagnlkpA+XwfUu2AlJgBX0xnYjwDeuxMrSDGtXgn4fQI6oiG1HwA0ogF0bhkAZa
 
1484
CPEif86xABiQA4HlAxdAn7F4jOCAf0pAASegQiERHhHaSOOQG36iBCvAAZr+QRaoQQMRwKG3UBxU
 
1485
E2zXdhYaVRvbQA3MWQXqAASsMV74EjPTtRdMQKMgBQHgEJLNgVYO8kot5EhXYABJqpoRMAx1ZZ1A
 
1486
EwULkANocSlOURvgFB5KSgkdkAxNCj7kJQALgCIZkAOXV1TB5VEFSpggEC9UkxvdciwcMC5KoASK
 
1487
sR0iwBlAkFB3ypZ5KixCWiJXNX2a0QB/4lQVAkOJ+pQAoF7GMImnpDIFkAMswAElEjD3oSszeqaL
 
1488
AACpoDfopmlKiCwrUAINCn4xRR82YqZPyQPDkC1Zckrhw2HN9wDOsht/8jt7Uw9EKQNXIBKXM4dM
 
1489
kRs/EwWxckrxaDdWoAz+F2CiHckEPZKNaoOBCpGJL8ABLgCm+nUp0UE9LHGoF9CfPAEATvBCISk8
 
1490
ywhht+h70so5YTqskjIuToEKoIGqgxB79MOE20I7vtevm5OE49KvSXYUACawZWgtomgfvoVpyhcd
 
1491
kqI1DduvDYtJKpMxR7EXPiqQ5mEacYQYh8E8ZvQCSpAESRI6oXNGftJheHIrajKG1yAcp2CWCMIp
 
1492
U/UgKZADHJABUeAnJ9EAQSM0SyYE8fgQTuCuorF48TI7/zZV/VNRObABGYB1jkpFSFIkQcQUNKez
 
1493
vZINYzF2uyExUJdnKcACUXBmWFiDabQUC3emBhAMjEcvCXtFy7VO5ZP+nYOkG2bUHN02WIc6mJwg
 
1494
HPkQSYQLRDS2d22bAj8kGw7UbWeBtEwhGUPQfr0CL83UEJGCSSXUP1bHAVGwAyuAJPuCOyF7F+7U
 
1495
Ev2hiL2ieCV3V6xhNMfCQ5HFAQIgAJRrPudTcVrjNt2yECB0qDyIKIsXDI9SLHTRNb+URkW7AHvH
 
1496
ac6lFrzTW2SrDENAo12xChCBGHChG7JRAMT7UxmQAfe1ZGPmIL6HFtlhAcRwBUNQfPFTKAGBeUZB
 
1497
O2zEIBbXQ9CXJOy0G1OgFAshGYtCA/gLbbL3XhI3lSEWTNkrYuHFILCBimRiBWpyCg0MUhXhFU1A
 
1498
EC4yRBJFvTyEnVH+gCSQNzFutBss4RDC9cHjkXjxMhAN4BJKgX+VxHep2wMHILkiRrglCATqxcC1
 
1499
ayM5V22aMn1Rh3YZsAKUCx8VByvQcUoVpDQ3Q8NtuSZ3RA5xwRKvpFezBitRN2Y+x0dzViYKMG5c
 
1500
7FmlsII4HCPPeC8RdGM+FUEz+BwIy3a3kmJInDAacbtN0ADCw0fsNnWwkgMTUCRFQmbihWy0IyEu
 
1501
FMgWdgHF1TMIV4ryIWZakwEnEAXZ+b6Jc8UmDHyA/MaV4Dfw0n3nRBWUhb08JAAUsLo/FVBGgz+h
 
1502
ByUzfLbZABVN8TuxcXp49r5d4irOR4J+/BJubF3NSw4uMhNsUVv+SzY0xHbLRIM/5WUfqvNCHAlG
 
1503
x9dUWXJ/XGJxE5MDRKsn2+YgBVCEbgQjqsNZvcIjaaNLwNaCZbw1C9ADUSBrNfZDc2Z/WowMQ6C4
 
1504
DnwBX0xthLgqE3M+KTK0SjC0DcZp0JF61mpvL3RqYLRv9axsfNqT1XwiaJwBSZACDyJ1zhFNRxNN
 
1505
ZJshBd0J0PDM/rZHubhkEsNgAtCiT6xgEeJ7ySZHV2DQmVAFNNDKt2EmtSdRksUBKbDCpkskUpcW
 
1506
o9okJxkYQj0e0gZa6nHAPCcx+my9q1RJt4WAusEaDIEae/HSobQRW8qnGbu7FfUAK8C+x9wlj4zL
 
1507
pKNameUD9gv+AVd9CURtU0ddvlvVTy7TAhngAgJASQxCwJMlG7eYHeJoxBBgk2WZarghzY9mIjcm
 
1508
BDmwAAKgUsb8sCzdY+1D2ZZNCYi3JqrWikahfEpxLHkyvfqCveyUEir9aBJmxFeQ2pNwjw1lIVKx
 
1509
KSrxau9GKZKVdscmX5rEECLgSOrl20V5T3Hya6uXuw/UwzU2ecOrQ2j2aJjIHzMl3ZFAIFRbHV84
 
1510
FTr0Q//0HsCrJxeHkN/XvUccZFAJJ+MLPpsS26UXdJ8dBQLgAuwLXvPBjTJDWEEN07ygDcJjtayR
 
1511
Fuz9HitwAALAASuw2GasMpLd3G1xqAkuyGtiGsj1hUlpdqb+10P9rIE/9N2mzRmJ5NfzXArE4G9B
 
1512
krvh8k9p5KUZ8DljlmT4s1pkcy1/7VkkoHg7YyZd2C1GsnePrAQTwL4NyDuEEyQh0blDXpZLBSI/
 
1513
qxu3NbzUi7rs3WARgjRs4SnecOVQGc45NTurEpMMlm0rhSKWBCGSTNzm5U2/gOa/zX09I8YgHUF5
 
1514
osdjZk0YfEOrdZJnLjLwoo5P0orJ5R73pcdjTcprlxQ1TqanoOdF2XXZWE7XfRnPccYcsAATMOg9
 
1515
lTjfTVZt0blqnb8Q5xQIB9IXF0FRXD4mzWk02AKSDWEA00nXAuOL1LzlsBmqvoCl98ielgIHkAFR
 
1516
rus1/jX+OogMEGDfk7DaTWQmT3V/8xdBDu1TiZ0Bjk1/1/01M1C/8rxImD0QmIcyyV1FD5ABQazc
 
1517
DYJmZPWsbCZXh3fe0PxrbGEs1ZRWT1zFWqNj27FLFuRJ+A5SWNG8jkLs/Y4WiTaDXgLVZicfv8OF
 
1518
ZTIR556/4ps2ZoJcybUvNh11DmbqATVU8mU3iHRUMA0nTNoxCoiWaBR5HPAEq3t+ECKyhr4f3pQK
 
1519
ml7eJNAVu4pcmMZHkhIuZpcCExDaE23xNJGK+2HENHAFKZlUVPtiT8KEKtFKepwDFc60If02UaUc
 
1520
hKG8rX5493S7tnLxH2hJFTcB1nvcGGyDBn9Q8SyjZwv+Ly/mEk/CFnciBfwiwBI08UryLJoEIyBX
 
1521
pb1iI/EKxoK1czSGRmdMdbpjRb+TivaeXt/085AwZOnYPR2T3mZFMXLTz19PNHTehSxR7puFkp8L
 
1522
W2DsEmdSIqWLRu8RBSdwAhRQ4Vb0AN3GFkiDs3WK92C1JjNOLCSOEqtERTlwAt+J3N49h8rB+rpC
 
1523
3p2f9juT2WWyGwScIlYEXmYG/EHi4p6R8EnlUb6gLTSOZM+BIsU8eQ4orFMRJBgt5DBtI1MIDpyi
 
1524
svWCViBWPoAQlcKhxNHSInXY8vFi5egYZCUy4EPjRBPxp7nJ2en5+RfBw3PBMKDTZKFj1TTjWNDy
 
1525
EPv+wCHFsXDCISSrKPURlPAYyaozAARxRSMDytysGXERTQM0YNHU5IgdlCj14G34kJNBePjxsdsS
 
1526
1Gg19WhVDEQjb+Bc7ylD6mQ6IMLq6jhF0aIWtThwoKUk1qwPBYa5czTAGAQaQzLZuxjqwiVTqCRh
 
1527
g6RQIMFYGRYU6sXoRaQXTYJEgmeJBj2M9iIYoFEKSBMdDVo9mpLoQyJFDxIteGLI3KICLxo5hGiM
 
1528
QTKLNJ2JusnAh45+rCC9aPHVnNKDKXosMPihhZBDTa28SPBvJ5C5NCBQrcpMhhMSNDg6mrEKEtAW
 
1529
sF6kpcUhRxSFSsE2UBfpo7F48u7i/WRzY7UZDf7+NlKZtinDQ968zZKy1lzTpi53TrYE5MblZgZ4
 
1530
GMgpQlu/dW4/NyDcQokQg4hILxUdqV2xAUMmXgEwm1kEJ6Q4DpjxL8GAli5FNBD9IUMuWeRTf0ig
 
1531
0orLGacGTIwHPfqn2jdpVGvV1hXnRw3QfxXnSzmGLPLACwWop9IMFojgg1RXXBCffPfw0Nd23L2V
 
1532
QCsNXOfKd4YpEUVhH5QWCyMu8TaDDwNIBYRlEm4ynRMQ8ONWSt9hh50IOH4nDljAkfhCXJIw6N4V
 
1533
c4HwIma2MaDTDCeuliB7EWH3wgNR5KBEWmmBFURuOgAWkRWnAHEFAwxEmCQnBlRxCT/qvPCdOpzU
 
1534
WWABh0Em0MIPORjIVIIRRSRCbhH50BwDM6XZySgRyAPEDBjiiN2CCl43gBWOwgUXpNj9OddcPhxD
 
1535
A5KI3hOBTUP0BURWEQHhwwyTWAGXFS1s+KcIdOqII5E+qPgpEIeO2okMTEQgw03UOZEMDTw4cck0
 
1536
M87KDwRDMNAXBAwMMUSq1LA61xU8AJuXDB0wQW6p5hZLYbPT6JjDDGaemky88owyyprgXiSDDOaW
 
1537
2oG5HfRLggjW5ptvqeiKIsq9Cv8h28IOPwxxxBJPTHHFFl+Mccb1BAIAOw==}
 
1538
 
 
1539
set HourGlass(hglass_3) {R0lGODlhUADwAMYAAFpebK6ytIaKjHJ2hJqenHqCjGZqdJKWnN7e3HZ+jG5yfMLGzJKSlKaqrIKC
 
1540
jI6SlHp6hG5ufJqWnGJmdKamrI6OlHJ6hGZufPr6/IKGjMLCxKKipNbW3GJidLq6vIqOlJaanObm
 
1541
7H5+jM7O1F5ibLa2vHZ2hJ6ipGpqdHJyfMrK1K6utJqanIaGjIqKlJ6epH6CjJaWnOLi5Hp+jMbG
 
1542
xJaSnKqqrIaClGZmdHZ6hGpufJ6apF5ebLKytIaKlHJ2jJqepGZqfN7e5G5yhJKSnIKClI6SnHp6
 
1543
jG5uhKqmrI6OnP7+/IKGlKKirIqOnJaapOrm7H5+lF5idLq2vHZ2jGpqfHJyhJqapIaGlH6ClJaW
 
1544
pHp+lMbGzKqqtGZmfHZ6jGpuhP//////////////////////////////////////////////////
 
1545
/////////////////////////////////////////////////////////////////////////yH+
 
1546
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
 
1547
lZaXmJmam5ySJFIdHVKjQVURETqpVausF1VeozwkslIknY8AXqypqlVISArBEUPExUNIYEO8QUFe
 
1548
BjhBExM8AAC3iKkKQ6unEUhWVtpWQwPlA1bn5OjjxEjtqF4TJBMG1teEqagRCilD/fsK0A2wkONI
 
1549
goMQDn45YsLEAGLmHqJTUOVZB3v3LgTRgSLCgBTltBX7aM7EjBkijsz48oUKlXM/vuRgubBhuSpB
 
1550
DFy89yengX3liPVLgc7El4EsE8w4IvOL0XI/XNJUmTLHOB3MMHbCacBUwHMCx1kxEVMlDBEiYERh
 
1551
etTKDxP+BXPM2DIjSoEZEKwiSbXzlpecOvYN+RFzgEsqMiEsnZEl7d0jM3ME/ZEDwpECje/msDBA
 
1552
AdYgWjcZYBYEDLofAwhL/XJSZWMRjGHgzfGDHLlyVFSeFCGZHUdbnUjkRBGEmFu3iBcu1J0WBows
 
1553
KJeaADdk+ssBRyDPyOFQARiNOEJjghZNR7BzDpOzPrmlAAwHjZ3LZoiOCmXChlu2/DGOIk7xlzBj
 
1554
wASmCPSSeus9V0QGDjjwnoMitGRYZFSMJZVL46DyXyejGdBVMgMYZZRyC530HhPyPZdFFCxZUCJL
 
1555
MR2F2EPHVKERcJvg8FdXOqgz3QA0LYeSA0xkUIQDRbz+l5KQrSVngUs0LjMBh/T85A5YMV3IUnMO
 
1556
MMhgg2sxJVtrLFFh1EtDWKEDK0F0Ek0pPUJEjn0xfqGUWjB8CeF8jBUAW1P6cTYOEjbqgAOHOQWh
 
1557
AFDlWPHSTCXO8FyDlDJ4l4mNzZBASwdeR0wEqxzKyWileCPOOTL9wNRS7mXRZYMpwmYXbNmN+IWL
 
1558
NCqDlRedTMBMYO5QN9hLLKHk3nMPMrHnXWdpuhKd+LEDKjNUbqQDMOOUUyZNKDnnqoOuxjfDsRFC
 
1559
xhJuDxGVShCiiubMBT2ug1wOiM21hXxHvgrDkTC4l9YW2dF7VIj8aUMRtZz4CudXEtX5xRZoyZeF
 
1560
c7D+RiFbWlE466KZA9AmEag49ZqoDv0MJlCQ4zonwsQMuqpyv2MuRRNhFtR21a5ukjqMOfUVS5Vz
 
1561
7jkIq4PeFrAFwGx9wZ+E7djYJic+VRFMmkEl5yxsL2fwnp6YjbmFfk5ZQRs6xHyG6K8KpHadS2XR
 
1562
5ZykD35LNGZ+qtSitlSkqYzTiBpgXj9RlfPkcpeRS+SrWqdYl0rJEYYajRRpxKGHUqftFmEoHyFf
 
1563
Wl0+2GAWBfgZBV1HIIaa2GBZQegFvEKdkykgRQRpdif52diRXmpNtAhRZLxSSw6ZcN2ifLu+kThj
 
1564
pRbVwz9ffHi+QDsXBWzPohYVak1XdPbxg5EFJEv+Bpmlcr4ZZJBF4iqn9PvASts27dObEHi8No1a
 
1565
4WJ2R6s8secNov+c+jLxmPcGJaBO6IIZ5yHY8uxkIm85p3wo+pLKxkUXmihQb3uRHCeg4TfzpMYC
 
1566
bgEfc95TAKFVClndGtPMOvaScYBhTQYQWVfoZ72BsOUI03vPvrqkNWUx6CwiCN1JaBJCq4BjTTlx
 
1567
E05SIZDHifAk+xMBpfqnw7PAZ0xswRxZ2KER+GmiSpXDDWqsVruz7Kt8eTpcvxwzl/VNCD/HwEq7
 
1568
NEGaC/ADHFBBTHaosr8onLBzFGtWdmB0n9o8xGwJY1cVhvAVh9jviS8jUp4W1Dk/IQtgFnyLfYr+
 
1569
gZUYJow45rlNb/R4ErhFDHeukqDF+lXK/YjIHHvzYiZGFpDBgBBzDzvaxIR2vsMVaWJp+VfSUCMT
 
1570
PK5JextkhtSoZpXlHQFgq2zOgrYGSCDCgC6/o8JMsDcAMIAhZK6bITnecg5IsceM/UMcGldmxgqW
 
1571
LiqlS4cqPJmjIKAAXoBz5FQa6C3d/dABaQHmxZRDrKMU44X0pGNFQgmOH+VmPXAbmpeK9EMpTmyI
 
1572
CyEWVMqmg4Rmwlcz1AZlcLOQLWSsihRTlufMmJYhMsUwTPHeCzvqJmbYkWGpmUoOP5fG8qHRAdOL
 
1573
D8SG6RRzzNSjmPAVCswTkB9YgCzggxjcnIP+O/jAakXBFAHENgUjpumKphvESRjRlZRnSgpCqfSp
 
1574
DtFyJMxUkFMymQ5HkXqJ0VQhlOTgTn4WIiuKlc+E3kJLfHq3R6UpLSi8oKsl7Fo5C2lrVRCbmMUW
 
1575
BMEzMqE5zZLZrSxQOofEEazxex39OKaen7lsaODKwGVdhpaVJE0m5khsTf22s6d8jy7sfFCefkrR
 
1576
lR4tmzHK2wD2ghWRLfUrbxEe+BpoVRNOrEgoCqZsvlYm051jAMvg0EITGDxSSsqPu0TjgooE0BQd
 
1577
bZBl2aQVIvBCWSYVMBDpGFSZgsMTxeeqaiUaQKfn2pfMAHvK+KZ7A7QKO8ZOeLc1kUW3lkr+8uoO
 
1578
QhXkKmskcw5kgHMTpeBeOdIDPthYsggi+OFu0beyYLLnsDOo2UO8eWFNeEEjPTJHUbkFMSkeqQhp
 
1579
ZRB5lTSmBAwyOVu0sGIrMQEYB8QtFNYjbNKipweq9oFSvCI2CVm6vBFDwBxCYiMPpJw2JglJucsd
 
1580
xZLU2uwkIDn0og4MtcsMqnUsNQbZzb4e1EM09lKHDsKo0jjbvs60l83mmRdcWGPaH1JUzHQGKK0k
 
1581
DFt0yHZUXTzPfXKDzaAyCMdq7elzGKTV9Q0uIsRtnWiUmTa1OUVI/Zom7hDdsj1pikTAixIYeHC2
 
1582
QOdn0F+rSwmRlNYHAlJozvladrQ5A8P+8EcVONKEAS4gTtTQayZMweycy0dZX5tvdwUY5EwSQBZy
 
1583
IEMHUhAZAmN3K5okwGLnkw8ae7pLSrV0j7RZCX/2poNkzxIrHoSLZFz0MLiptEvj3XTn+KUyttAr
 
1584
AZKZ95rCzYm/aNhW9DWjarWWOB8GsnMYG2ROnVK2b9obExm2Y1E2kxQ553fdOv6r1oIYIZo8hT8D
 
1585
ABnDMbzE87gIUnylapHULckz6ks+Zm1JPJtWb3EvMkSI2Qzt0Fm+8yVuornbXwGWc5SVNGpN4O7b
 
1586
MgkykxH9jIcOsviJXnXFs6gkpkex2QvB8PFLrGLZAbFPZAh9X58+nUgqpzgQF7Kp3Jj+ydEvnLkm
 
1587
cLCLchSEW7txELV1TFUvpVMtKzmJNg17xMC03RIEQsFdB1IZtqwkaHemOA99qDWXlXIu4CtqOF54
 
1588
+UrgAN8BgTZ9qWLVDEQscYiDlQ5PL7OVyBUZEaB1wlYRYyD5eCaRR0lLxxVmHj4wTxG75mKKqQxl
 
1589
AMgSJBBrqZG/qcWc/XchpqYEfQ2hx/yuZspAxfUtoQsPusRt02OKsJVzBLTknfz7e1vG2NJNb1Th
 
1590
GvQAFPWSBTg2Mdm2FIOTAPdCTUSzVhPkWpDhWYzUAQC4bEgAJFDkT3OmKfcjKat2bbaXWQZBOndj
 
1591
MOuHfaUQEEbBOc71J0ISYkbSJVn+EB+yASilQxMVEg46cIKWIAWERw4PEwUzWF5B5Cy74S9o0VIA
 
1592
g1G2IhNHAEIxJ3jB4SsXgAQxkTIXtRhl9BwFMDpB9EwiRBM452NkAxo88QfCUQqO0hoo8Vagk0Oj
 
1593
MxePsSrrYxn6cQQfQ4FnOA9wYgXr8X31AhsAdTR2wSK6ARmeJxNUgHBBAQY8mAlSMAE4AC/8tlzF
 
1594
ci978m6a4nmvBikUNg6PqAmR2BVDkBx7RDvNcxbnRV0FMUTPRmHdNEdnKAiR+IMbs4hbIGEqYTGS
 
1595
ghZgWEqb8kq1QRGzaAgA0AG+ogPoADY/xhr3UhcZgzTUI28REQyhOIUd4DfmoHT+PqY0uGVGpWQx
 
1596
BRCMeMQO13gLE4CMdzUnVMBZTKFHvQM0kgI6v/MQsHSO1wAKRWYaBqIcAGNJu0M9sDhv+HgP0kAg
 
1597
wRIiFuBaELM5akErA3MOClCQPBGJE8BQmPM19+JHijY6jGgOCqCHxegIFhkny5gdaZEkKzc9ElIO
 
1598
SCCLI8kI0rAReVQigdSFIvCRJjAEAxaTi4CMQeAOQMgayLI7EMAZ0/F/PikJklh8uXEZ/OIeeHh1
 
1599
S0kJ9HCBT/kFURZEMICH4BABVVkJHRAEIZJRvdhaL2ECYBmWRAYGA/E70ZExVqEAbHkJE+AoW7CQ
 
1600
vrMd5UCRdUkIBLJcNbgSQ+D+l38JmMuBIjeYA1NymAFiEBlQAy6QYkPgmEmlFEawBEvgADNgmJaJ
 
1601
DzDgA5rpAjrwmZkQmirQACJgmpnwBS6gBEWwlqxpCQPgBDHQAsI3m5UQBC5AAzHgmbr5B1XgABrw
 
1602
AsCpmzoAAy5QBLkZnJIwADMAYijgnJQgFy6ABUdAnZKgA1QwA0pQAUVwnJ9pADShBCvwASYgno4J
 
1603
BveDBUTABJ2pnY2gA0ByBD7wATX4BerJljhQDkzhAy6QAUPUF/J5CGmyHllABAIAG4RRDQVqCPGS
 
1604
ALKRAT7gnkVgFBP5oPhADKzBlbKRJC1hBRewn8WojOhgVmeUEkyBGgoQHg/+ukjjVBdn4QMggAUn
 
1605
AYs6MAEkeg3FgUesAR0ZcAA98AFNQiNVQA3U6QW28T055AMEUAExc1hxJAU7+kUeYY8d6hxMEKB+
 
1606
InmpwUhgYABUOpsTcCUHmjJcskallHBD8E3hUaViGWNUsxCSlSfycXos4RDD1VEO6pgkEC9U8wO6
 
1607
hlkANYcyYwKc0aZ8CqeQ8KfsMA6qojlZg5+Xoh3y9iRqUhF9GpYAwF7CMiJwUzs+oAQOggVY4DOQ
 
1608
cR+6oqOMuggAoAPJABHL0x5LoRvvATpY4APZoRiHSh828qZVGQTDMBLKBYxm0TUPuBt/8jt7Uw9L
 
1609
iQOxOk6qYRBOkRuKATP+TPCe0zgursWsOnABLjqSUmAe9Llh34NRSlFKaeECKgCll7Ib0cGs30Gg
 
1610
PAEAVfBCIGEmk7cpq6Ib0fEeLnADLGWEkjIuToEKoNGqg/B69GMU97Mtq5IAAmlJJOQepcQsbXgU
 
1611
AqawaLgRYJA223QrxtZvvAcDFYAFmAWvFHsWGXMUe4GkBmkeEeCH2gIjiPFbKWNGy4mmsrFGtpMk
 
1612
FnMramKG1yAcp+CWe8VvV8hKKfIeIGax2xE0wMYERXAXBlUF9CoadxUvMUJfueYeduc5IJaTMwEB
 
1613
/IMkRfKFRxEBRNsr2dA9y4FNYNsgO1cEAvAAVPs2m1hKZrRb86FwjGr+AMFAn/B0EtMTMXjnUw7g
 
1614
Aw9QoSD2Nv7Ks/2yoivWmJwgHPkAhFejJIqHRpeWAQLAAhVge8yCLNl2Fl3KFJKBBOrXK/BSHOQA
 
1615
F3wLG2m1Yw7SAjEwuiY0TSx7F7wYomBapfRwXOgQGSiZs53zuUwgADHgAld1IlrjNt2yECCkqFXa
 
1616
FXcVDI/ihMYCOpQFLltzaGq1c9Ozl8pxSEhQpfbkN8ngKDd4sUFkPl9idy6gLPl3aTGjfNlhAVeG
 
1617
BM35Ufe0TIZnFLZqMX+FLxTKAs5rJHWWWVqlFAshGYuiA/+LCX6zERBBBRDQEGe3gJ7jU1sqAC2Q
 
1618
JyzzKrABMNjEFmr+cgoVbJc2IsA5EMN/GFENWD4VwACKW2dX1Ea7kad7SsFuezzzwh1nF33982Qt
 
1619
4Lx22lOJE7lswb/sBcTDl70ftMEl8nXygXeJRnFfMoOn91YKJ8U5AnuliBhPYlbz2D87py9392TO
 
1620
cYoQ3BIp8G0tjHnEITVIxhAlxbdZ3HQZ4AIfIAAs87lvfIgyk6gvVMdEhnX00xRP+XXya6c+AAQg
 
1621
8AD3V14QaDctpKiKTAnYa2tJRzg5G2bl4wI+0AJdoiy6l7/rUVScjCjZMBb81p34A7Z2qlo85HgU
 
1622
1SBFiD+swSk/3MmTcJE2kjYLRHVwkzvJ+3RNhskK6H0SQse9on3+uDE7tNMcXNwlLoC3zcdT+NMa
 
1623
76Q6LySSyoYVdlQdSTdIWQp2EbTNANrMQJOubQQjqpMKQ+bJmudBUWHNX7BKEdRDPCQAIPABf/V4
 
1624
cTZ/SiPOSGC5X8QLX4EYpRUbKpfLXYIFBwxsPDx9Ca2oojZ43xpKyqVHLOHBnpvLPEdFb3w0KPxS
 
1625
GbLQ04zBw6Jcy8GVjudTPvAl/1ZFEXJ6w4Y9yMDQs7REaUIWCNJAT8bAH3AAKJJGamxGV1ykexoB
 
1626
QJ1UHCFyHdMUTKEU4ZXKi+u8WCAAuqNDWpNtukFo3rMXLj0qHdWjMTE7kQIDEWRCWuMDTyAAHwhU
 
1627
RrMUwtZZVgD+Bqw71XYJLxdADMIzIt1oIqQcXgH6ZRTFi0rhY9QqV6fQk653TKX2JAWRi+ID17X3
 
1628
UyNW0C37TIXVPkMw2SLztpMHbUuYUj7VAg9A0LWXuECEPwCzKRRW2mBA2ZTAQfHCedv2fZPktBnw
 
1629
AQS9W99LNDIj2jWxk4uS2yIDLzGWp8yDoBP3Vz6goBKUX/NhZnayon29LtN8VyDiFNBWIl0o1xTK
 
1630
AC2AywVtp93afS+F26D1RVv7FQSReiYSBXaXy/irVtNUq4f9UocEBoCNebxgGm2d2fQ1Aya0c083
 
1631
XkiyxCqqgPTVFm1K4J1AeKXCjvSnG7k8XgXtdCCYZ6f4xIj+JdXidi0WMhXFQjH8DeHr/Tl/pVX4
 
1632
81pkcy0FvsiaZxqcZ4odCoO5zAQfsN7Y7UO8bIjqfC6d8ddu2xXDsEAVfhnh61MuwAIt0AIfcNO7
 
1633
vHLMo86e4g05bpUo4DfukOAPUywro8wU/UOUBCEQyK+U69dpPcYdpDY4t3TnI75JsiBZnsMAdUOv
 
1634
5ZJgPs2pQDVmQi9IE1EFLb9F4J4BitNmlxRB0j5gcAphPswvnDa2oh6KrrhVFOM/lDi1yhbdWGGD
 
1635
nkz3eiXcEdFnRcgx6E8o3ZXUuikAs0nXguJhhcG44RKHlyAT92+DzMbl9VpnnoPAd8/DrBHriGCp
 
1636
Zydpocr+XDxNvQRIvtjsX5MDV2bPGa4KGSwiEnYvTsdDfc7AikcptVpW76hm8/1RxCdSmCMXXrtD
 
1637
EYQFB/ABcS1imDwTR2NBnLTuSaV9sRvDvV5/4scgV14+fc5u+QmGZTIR2r5B62IcQCK7fMc514Y4
 
1638
yrkDH6B7ihbldmNIR2V04tAiJsCJ37LUfvsAIADWR8w7rhWG9tFNqXDpTIkVpjAY+pEDXKUSmEFw
 
1639
gPTHmXanNEFd+1HasAqTdqlMEFFuIk2UDlIEX1Z6lOJXQl9SykEYijrng2dPhb7PQbJ0zZW8ecIE
 
1640
O9dLLTXSRC8RxEXzkaAwvkAO900itQNmVCQAH4AFnTv+NH9CBZgEIx0Xphm+tU+ep0WNGfmXJzRK
 
1641
0EctYr9DXem+Xt7E9pBAHoON8zJsblC5L+dTBEl802Mves0ShiyB7XH0km57XIOxGTH8vpKaewzA
 
1642
zeuWJCSkzkgjtD8s+Y9AHjdfEpPeLUYC1xTqA1pqZ4H0LPQnE/2u25i+JrW1vaS0NZs2v0/2ZRG+
 
1643
JGdOE5zRGQ9fT0Ew2OBgxjgoo6m0xBS3y2S3Pq81by+k9R9lziCSJfraoQUg++nmAAKABRVQA6hM
 
1644
McC0PqnnSICgU6Uz8Wd4iJiouPg3EXQRhDRkRWXx9ZVDdTkD45Dh4AnD5PPC8NCS0QkDI3KUcPl1
 
1645
dEn+9TMwFAGmg8PI22voeKGjkzJgQnWcYzlTkAWT2gxTlOGCCspa5ABzNHO5BftVOySsY+BrrogD
 
1646
qRNhNaBp/KW5BZOVlW3v+ZmRmiECKlJA1jdYA2xF0IGk0LmFjdRN+mECk6YB21g5WyWimb1OoVZl
 
1647
ETFjhqwZVI7ICieIHMOFEwwEGWQlokRYM6LcYyWik4AP/JiIyAkwZKyBBYcoyKVwpS9HQXQMGfCD
 
1648
CgRMNDnlXLUqQwUjGZg4y5gNhtAZCXLM+jEk7bqkSnnhCPIywgCzmGR+2TIDKMgCnTJgAfXJYs4Z
 
1649
ELbJ0vTFljhhbNsuettUwQALUk3kMGuWU5SQILH+wvjggqOqnyFDmqSlWNAQHo57OTJQRXKxujkg
 
1650
lDScwJVYEdIecG0WNmheWd5qDUByEAyA1rxIwNUhe+7lL69gHamdgLOzAxVWgSqCM7sskzmgDjgo
 
1651
bjnzRa+hm98G4fLl+F9MJMi+rNMHHz89+1sWi0jJmGDFUWBcoN56ihjghXtUREQWXVNdZgIE92lW
 
1652
QE5R+ANeJyCZxM0lObRz1BCNKXgIZHJZlldI91E4IHZ5rTLDR7xZMwNd7xB4HhhpkYAie0EYAJ1M
 
1653
pYmU42UFFRSSD06wEgUrDnxozA85GJcYWmAooECCQSJiwATBuAPiERC4WFZBFsjHBBZicVKAaeXF
 
1654
LWmCMQVZgZwC5Xy5YBBvOVVbbfFZlkky8uXgz2VlyYeJkkWlNcktOgDJJzotBaGAU0/ZkoIVT9V5
 
1655
6Cc5mFBQnRYQSmE7Vqia1p6VKjKBFB144dIF6owjCHpGWQEBDBZkCmwECiAhiQJPRToEGEG8yssE
 
1656
OExAAgkTdDBBSzgYUOs4ESDB6wBgRACuDrmMKwxccDHI7ELYVhtrrNRW2wEOEVThxbPV2nttEI44
 
1657
km6/BrDmZb8CD0xwwQYfjHDCCi/McMOtBQIAOw==}
 
1658
 
 
1659
set HourGlass(hglass_4) {R0lGODlhUADwAMYAAFpebLKytIaKjG52hJqepHqCjGZqdNre5JKWnHp6hMLGzG5yfI6SlIaClHZ+
 
1660
jKqqrGJmdHZ2hG5ufJqanM7O1I6OlKKmrIKCjGZufP76/GJibHp+jLq6vIqOlHJ6hKKipOrq7Jaa
 
1661
nF5ibGpqdMrKzHJyfJKSlIaGjHZ6hNbS3IKGjH5+jLK2vIqKlHJ2hJ6ipH6CjOLi5JaWnK6utGZm
 
1662
dJ6apM7S1GpufIqGlF5ebIaKlJ6epGZqfN7e5Hp6jMbGzG5yhI6SnK6qtHZ2jG5uhJqapI6OnKam
 
1663
rIKClP7+/GJidHp+lL6+xIqOnHJ6jKKirO7u9JaapF5idGpqfMrK1HJyhJKSnIaGlHZ6jIKGlH5+
 
1664
lLa2vHJ2jH6ClJaWpGZmfNLS1GpuhP//////////////////////////////////////////////
 
1665
/////////////////////////////////////////////////////////////////////////yH+
 
1666
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
 
1667
lZaXmJmam5ySIlJKSlKjPFMSEjepU6usGFNfozkislIinY8AX6ypqlNERAvBEkDExUBEYUC8PDxf
 
1668
BjQ8EBA5AAC3iKkLQKunEkRVVdpVQC7lLlXnVQPq48RE7qhfECIQBtbXhKmoEgslQP78FqBz4QGF
 
1669
DwcIEyDE4iNCBBdABpaL6GLBFB40lNzDh4HHjRESXJQop40YupHlImzYsMLHBiwohjyswgUmlpsN
 
1670
Hw64aEAjvj88DBjg52IAsRJVkLqIgIUgTAcbfNxE4YKqiyFYbzJk6QPFuBvMNnbiaUpguongXNRM
 
1671
sAHGihX+brui4IKOadcNSzZoKfDSQwkiqXze+hL0Bj+aNdVmNRh1Qxe4BVqiQNH0HBcUCXwUeMwX
 
1672
hYeKYHmI3WSAGY9kA7io5ZLVZWMYWla0hbFhMhcgRs0Ncb0yAURiH211EhF0BA+T59TiZOh6RRcY
 
1673
MPjK9l0sQpUh5Xx0dYAF+4IwHWmMxgQt2g1i57BzkYplJd4CMC48hk7bxxB0Qy5zUT2kOxaH41h0
 
1674
0XiXMGMABKYAsZ9M62m1EnRIZHEBdF0g0cVL/FEWUxUR5NcdXUCgMmAnpZWW4FJYcOEEe1u1hYQK
 
1675
9MFQYUtYOLHVTTU1xdRvREzRkXCb0OBMKTegQ9N1WjH+x9IFKqgwIRIyroATbw1R5gRWEQCXSjQk
 
1676
QkCkBOxwSFV//WEBFwwvMjnhBVFJRdtK7GWFHTg3sMJDJ9EYMEUY4uSmHmVYQOUWDFnEd8EFK/Dl
 
1677
UheRvWRTmen0iMENNOBpojLkFKVgji1CuCYMMPL14GMbcIcVa+WsE+IqlXISFDPe9FkFTA1GBV98
 
1678
Tl4AJXSy7SWbdkNQ5kFBvykD1hed1OPRDe9EhB52N+m1GX1QwjgoX26Vaip2Hd5GjAQX3cnJgTxM
 
1679
+k5aLtxUZntnxofEp3BtAF8XWmgHqGoR0CXQlq1u0syy6KVFJhZ5OQbdoV1Yq2t0gy6hnX/Y5RcO
 
1680
EBb+MZMsM1Ocpw5ENCW5xFsxrimfFrTBpYUWKxUkU7oPRQTuRZ2Ux8Mw49ClnIO3wvXic/JdC0Ne
 
1681
DkhFWTlzgWNsM3i+CuYAapETAWWNnbnZc+/GF2OjDw8960TH+CguaULx0E9Eql0HNVSx8dpFoUy+
 
1682
e0HOcEJaRdG/hUaiiTeUkJpqV3nomoyzVX3ohAwXUK+jThCdjjJek8jMDf0MxLQH/WnnQ3TPrRDh
 
1683
iy/KSB9XG/TnxEP5/WZRR0mXZhaHN0d7OXQuwji4fJu9lZd9c51DFThVSIrsuBgTZU5VU64UmVu6
 
1684
Otmk1ZGtgHJtMT3UIdMLgIs68B6VxLpi7fnwceb+K6h56K70xQYVCt2yhp07qxjguJ6Q17WfVi65
 
1685
RF/4h2ahQsIMw3a4Vg+h26osxgnCZM8s6bCRdvCitoPNzkkUqo+jKpOvcxzDNBfTkzaYhp2rRGtU
 
1686
PWPS8iDIqyX8LCo3ucpMxgGY6wXpcedRiwfQUbyVdOFtIjtUrkoGn5VMRTUfGkcY6vQ1TdBgChrM
 
1687
lGpU9DCX6AxC+iMUk3gFmbxohYZeoRNP8DQCA6SCHHzLkXbycr/ZXUBC93vOCW3CGvSBCAgdcR8n
 
1688
aFAasentKgv64GzgckYYKY9w4aMNyuLElPysAzAYsZQBMBCMtPCHOU4sow4nZK34PIZGKUyXxIz+
 
1689
AhY5bsJLRxQHqmY1pTPpzI9qChXJGOUwreArP84KQ1BiZhzILUBxSHIJGd3inEmCinAkg50P88OU
 
1690
fFGvTp7URNhsSY4ZKsd7D0KT1f6ogkIdL14s4gJTZoiOMLSvEwYUm1m8wpqbOCyYcLmhkxJ2RkDu
 
1691
xT1SGYIHupOcMHgzmZmo4xQ2uJRzOIiBfEyT8pYXzHe2CUspsqA9kRizxw3DaXSpoeegA0ESnglR
 
1692
0mHIh3wwugClAp+Y0JMXxXEdmuymPUtYJcJSWU0IaoFwPpSKQ1IEywV8NIP7JEZNHunEthDOkiQ8
 
1693
FGyGyhKNzu8/qhniDUBaICRCDj0p0aj3SCb+1F82qZrxcd4FSBYbjV7pP+a4wRCZagkvjVQgKsoX
 
1694
TlgyG/qw82BUvCRLuKMu+1gHCEolayV0obpb7qccNwlaXm44KCbpT3ZIeEvVaMOdMeGoHTd11RRG
 
1695
8FR0UKVDOJFNu7IgIZ7dDy4ma4lUnFCTCuI1sv66yD7B4RDAjlEvvMLVVWV70beIFgvz9IFazoGK
 
1696
pYIzKDnFI2bXGkyrEY5wTeIjomSTpKl0MK+OW5ZfrdKidKJJh8sToeykKZugIRUm1hlAb4uYCbPG
 
1697
LyUz7VQX1mu19s7WZCd8WH4aAhEXKJW8Ib2ILdVCusoxUAsWSp7sroqon1pRO5ehJziQAZb+ZOlX
 
1698
G2pxo1SDCaOLQuewhrrhW0rFENZsYD9C9CZ+L6GnjEFYJlkhGBkDiSvZOklCa9owwRyUonVIQMQk
 
1699
evAtr+JBhqAMeYgiYZMKNSOirmQJ/1EJ+iCy0BFb4guugFw5EsMpvMRGqGsicJOAma02/Qe3Rend
 
1700
PZPVkcpSuXLOgwsECYdhUGluV8+LZ01gSQwcu6pO+xxJayvXntiQb6ADpc+ENjzGYPngM0ZDZo5L
 
1701
8Q/AZgcqozqYH7H6SzSp8XY4mkp9v9Pgca3iPEDIF/pc5zwZWeuwgX7S/lZwOyTXiKPJ4YVeKbHI
 
1702
iwjkIU3ZzRKg8hZ2VovSf/ylbCbon+H+AeYGvyONcfbZz6dVzgeQmSJ2RYgr+WTuTQzxwIrUA5ww
 
1703
5GDRT73KqAPlPecYSrYXFt96oRQZALaHNXRRBZCUiQHVgfHLzNGCZymZ6j9WDS7M0bYD1ucCBkuh
 
1704
obYGo2eYA5XnEJnav4SxcRM1wbnUBkR1usG8M+GR7KEoRQocrBQp+qIBn/G6FHKYdijnAKpgfAoH
 
1705
L2BhzPK0yeAkMglr0s6kuEOKIupCWrlZlpThzY3nt1wQfto8A7USNTdJnSZv6RSdI9p4pshmL4t5
 
1706
akeKjoLQz3uSRmPEhQojtkWnAO15STE51iONJ6uLzHaIhsZ4PGpnF9B9/KnlUlSbmWT+XOvKxJg2
 
1707
CmL1BfJxy1ZdmB+v9hIU7pQuVRhiGIze1EXeOl2Aikphrxr1LY8Q2y7pjg+0qQ6x3gDwmdAFkWSY
 
1708
JPe8tOTt3OHiQQUdK66kTENwAp0MQ/myrsIjA3CCEwxiECRPC1TVir3nK3lCvRC7ZZzufSVoABZG
 
1709
VoHwlnONrhJ2MuRTklAOFCY829MUFoZBAt/mBILKlalAJWArUwXZg1RQ8hdbS3ndv1BjbvIVZRDI
 
1710
EsTBaK7lQ41XP3S1AWjkRzxDSQuDTSjkAbdhGDfwf092GreEFSyBNTMmFQ/zFjoHbIMTI3iBQilC
 
1711
BN4wBddQD5BTTi7CXjBQP/7BEvT+USiGMjimdDvswTULoAQpWC5EkC4fQ3tMUiGMtVYF8C5D9hwq
 
1712
QHW/AmnsQRXasAAUCIClgFbt0V4Hw1wOsgLL431n8hKA4h83YR3hMIH4IAU0MAIKggVps14kEy/u
 
1713
EU1pBlqN4ShPcxMKhAXqIAGoxwn04BFEUBOzAR9LgGQj6FbNAxfew4FZo1Eo8BLsMAVTiAlScCkq
 
1714
ETUxxSgy2HRLwBcaVVSTYRBf5hvgwIc/IQh/mDFV4Br1EzrsEj6ahU261BXs4ShDsAGUYxRhMImZ
 
1715
IAUQQAMYEAY2Qj8oxEBoQnW0kXa16EMw4RlhBgS8qAm+WBpryB4cGDQySEVR4Wr+UNMXwUIVTEME
 
1716
/XKKg+CL0AAE88QaQMOIDNQWRWWIIxgTMaEWSYGC5FgIAOCL7FdMzdUfAMVWbfI8L9FBMyGF92gI
 
1717
vliJN5ASKGAjrsYFaGM4XUYynngfRjIO0ZiCSnBE77BbzCF6LhFM2KKJKeQ0EJGRZ+iLGHAuHrlA
 
1718
mtEucnVxKREOKPkT0uAl3+A0TuBdxjgozhMViVMOGHmQjeCLEBA/YOQ9BFN3trUSVjERPEiUjUAP
 
1719
NJAMFLFW0wQbb5FQ5SABySaVjCANwFcOZeJT7LZhVpElswaWCOklYNIx9iMjb+MW4JUl9siWjyAN
 
1720
MXQV2nFdjPKC5lAFN4CXklD+Dz+YLlIRPkiwFzBQfoJJmJOgBDzwTLfIS2/RQUQAmZQAARIQAR7g
 
1721
as6nBQ4wQ0CgmdN3HUvgBABZG0xTk6ZJCAhihC/BHVXgmq9JCDSwFXHRHx4AAbdpCTzwEhdgBTpA
 
1722
GQPwm2XlEkGQBEmgAg5gm8iZDzCgA8ypA3cZnZSwBCoABmAAA9h5CViAAw/wAVjwnZawAEhQATog
 
1723
febJCGGgAxWwAtDZnn9wAzogAxcwn+15A1dAAgiQfvQZCS5wAVsgA4MZoJGgEipQnAgKCTdwE72i
 
1724
n9FpAFKBgIUSARL6m0AQLUYQnxuQoa+5kN2xAS0gA1mgHSAKmTQAlyS6Ay3+0BKC0aCG8A5m4gP0
 
1725
ly2qUQ0yWggxZDBB0AK1URtYAI07OghFch2OUQAtUAEvqHZVgAEpepBFoiCawShXgABXMCEJtQDi
 
1726
IaNTgB4rAh9MogM64AUqkB+qcQMQEKX4cBwbc4W44lkbMBPbQA30+QXk0EwG4zmF4h5Xdwynx6af
 
1727
BCa4wRTyAlotQJzDph7hEAYGIAWCigmcaQwrAh0oowIIMAMdMGwvQY/eJB6RWglKkAzgEHwoVWpX
 
1728
EALxKSovMTpFARj2EKqeAGrPEpJncgItsIQ0AoY7clqxapoicKQRYaqzoW+xNR2T4UNMEW9IpKOE
 
1729
CQA31g7kkHbRYTxtQXH+L1E/UqEfxrKmsroIAPBFJsGCPWQmbUUbnqitDdEQVeAjoMqWM1MMugFp
 
1730
bfIgVwAdBcCqTdd4MME49gCW1EdS5XAlB+Eo7nEFUXCvV3ACb2KtNzKkN4ABXXqQUgA5YbAaHbKT
 
1731
3qVH0jSdRvA5+zpsN4FXGBCjPwEAexIGNNQhdvFPcXh2lfYm9Iqu3YFIzvoT1EcxH9dcjugAbOEe
 
1732
BXACgyZ+2MJWTSFi34qK0sUyNuIZhqYkcZgAOsABHUBFfHE82tgUgGGn+HCUC/ANH0IZ6TWC2Ugb
 
1733
hFIBV3CokJEoTwRwugcW30ocp/CD/7EuZAJtYhpjPvMSCZC3hEV/ngj+EVNgsqSRMRqTJBXal9eV
 
1734
XVmgA0tYAJOxQLryQI8rFS4gAaKRgtlQF1DbLlWDWAirA7xkED97rRQFI1GBcbIqTmEwAP7hALLB
 
1735
K/rzLlGkPC1wBey2EvQqL4MSHdvKZL45HMvyDpTTHIXFP4XiNqBCaWYrI4xyOWyLQlRhgmaofpNi
 
1736
AAIhEwsUTZJWdmd0BQQ2H0jQOf4jHcl4HxSzi2/nI8HQYy6Rr20lO4ciACFwAvojQkoYRQ8igwzh
 
1737
FacVqSZifW0EE3GYKEN4owLQASrQAVnATmQHI7EhkBoFEcwCwJMVXDVBGa2oZos7RQKwAx3wfdUk
 
1738
VAVMI6QZBkQAoJr+oIIaQxCTEQGF2HTg98BNIgNMGoLLM2ysBhU38RnVcwMqnE9LxSz4kQAa7Bom
 
1739
tLxapgIV0AJT5HmIghfQhDiCeQpBLKmC13W5xhvUQklRlHcP3DNxWFSVcWxXfAlHZGKhFgG4EzRx
 
1740
2VKzW01Z0AHgu7wQ5z0Fwx5OECJDdMa+lz3ocBkxsb1UNSEYpgKp6sT8JlT6d2SOgnFATGaTsgAD
 
1741
8DSH1h7cIYNXJSFNQqY6UCjLRx/Zx4wR8Bd97GCrgFYukABXUod8BCq1ywBBcAIVBWPWskAO4yif
 
1742
cVp+PH2rwEhM42wt0hYJc7/LowMCsD+h/HPZukAKxsuOY2JEYxP+KmdDSoxybWPHJwc48KSsuhjJ
 
1743
6hexUkYQHeKPb0x/T/dTxgwj75Io1Rx6hmTGMcMLYPpllsO7Q+Yu8ZHACmzLGsZYeNE99MRgvUxr
 
1744
hksR87QiuXwm/aYDBBACDNBSN1RVFQon9nEfDBaVn/RpmYIle2cwy/O5KtACyZwriBUdCFEwD9k7
 
1745
qLXClAU5TANeN3JR6ex5aJJd+aOlfsoedIEMRBC8pAEW+xTTrREtFHVuy8dO8gsleJHHjyxEyJYs
 
1746
pQHTMmETjsLQsnO/HaDAIjQ41lIAVLLSIfLTtFSFHKIuxOg5CHNViSoAt7vUsKNLFm1IxxAGQL3C
 
1747
EfulgJV5gQL+MpP2RwsbAorc1Yq4iKViVwMAGBJw1+U1WTFUc4ACaQ40QpxHyzUIKs/RIt1TOoBB
 
1748
1urH0dfRIcXHgfShZV4tPogHF61mOXOCwot9MSOg1w5RJvAopkNWTSUtbQujP+4MFW7MHXd1Ck5W
 
1749
CV5CWRA2fLq2QPBxdxfQAQigMF0NJcylrts6DsJNZh4xDIWkUThBUYc1IQLguJwle04SG9t7EJnE
 
1750
x8O9mRl3sR7Exk1UANJG3h0wAY7bcxfCgSrXHdZRPbLkYF70DpyCuG6hPwmYJrgqtHYc19rBHd5F
 
1751
F/eVLB9xXsGyHK8YHzAmYJNWVagbLUHjXbw1VhJOWWTDs4b+h3hNUgEMjOKdhboNLhUOYxVEx9iS
 
1752
Wm/MshRMIYpMd3g6NMcVsOE9Yy3Z6gCuZrkhRuNojGcdiRVhyC5q4i4XIAAMcL8LDkFtsnfpbRhI
 
1753
Xla8oA3l3OS8K3HQ0QIIgAMjvCsj/CuLuBzooAye/Un1tiehhtZbaFw6hARCu8gJ085aAEnLQRIm
 
1754
uOXE7dhejm/c0ZcvFeTdy+HoDBsEs3f2MRHeIOibiUR7khpM8XXRNLkDpedOIt3NTFeZhMJvvsI2
 
1755
TsnEY+H2g+aC9mJK+GJxAUnZVHCTTkskTg7Bsi5/c9qdrD9BILr0d3KYJOowwWSnQOmTcJQZExGi
 
1756
thwHcdT+MPIcHUAAAiAAMpCr6Czkfg7ivVPrc/Q47u0h3I0F8MHJanICCnzbySPK6I1kDtMyzPLa
 
1757
cwQWhqEgETCMDkJV98c/uP3JeZco1hgt3bFg57eWhZnXzL4UkVuhIMPJyqM/J3DtUEKDb8Ei5tSv
 
1758
p+Vbnz0pF3vvY1iLZ6KEOXdVjjtJ7Zx9bjzwZajxG81oThOK9JPE8+3AyiNo8cIQhehKxdDSmXBE
 
1759
HhEGIzEZo3PosGUhWnbIUIJlyYjzWnEfFMzyeF0KwJBgd+gDP3vTyWtYbbM/lJRYmKQkKYIOshYz
 
1760
8ANhNQIT7GgoA0amhhxCuvKTD/ORFaRUyC4J0JAxKlv+WlXBHkFjbn6kAwhQARLCNlelRhPkah8C
 
1761
qGEwjuVFWaZAEwVxJaLuU1V1AS0A7C1Qu7sCdEy/rRHILHUfCev3RdoUYa0nTW4PKldAACE8Sc7h
 
1762
KDlfkiytphLOvpbldQOnmyJz1DBQASEgADmdVQPZSjiiJVBfXmWPGCgykFAxNRX1Sx3w41CSJhMC
 
1763
+8thkb0V+pCAIB2BHvNU4fk+2U+XXZ87aI4S9xiv2IxPHhnzpWmR6f8UPmyjJg2gzPPtJGDNHvut
 
1764
e4mdCtqfl4CAwTMlUeXiMoQSgcXo4LMCcxGpAqOiopN1oQmDRHnRtYE1hOVDioUCBLRwc2Pw9wob
 
1765
Kzv+S/sHcTNIZOiiyIiCtbERCUOcqXIl03FhCdOlIrlSirXEyOg0MLCKW8vd/QoxeLNQVcUV4SLa
 
1766
uLHSVdmVZanScqLZ3qm58WtaHUHOKgHBm8BZ4KbcAOKi3BAnKFCg27CEUyRJFxhU2MSsiyQYK0JV
 
1767
M+ViQJUbBgMOPGlrCgZChpygGxVhiI9glYhZ6tAhCzwYmZA0i+agmrQh54BICBPmC8qTNFTySHUI
 
1768
i4tFXIYIa/bMWaWNli6sWLFpJiNq/FwAYbVtqUAIgjBIABLhV0Msi5as24hxGSVLYJGsKCDtY6lD
 
1769
Rm8QMam2G42VUxYA4eIkgVSi02Bo0eQVkiQVAjr+0CNGrOOGUktkMuJilmSrxN4KNh4w6lRsUgW6
 
1770
rPBJ7JMAExVCCOAIqUCBYPtMcRmgKswNxKxpgcMgrsoiX6N8LInIEUaBrxc6t2jBFzQM4hscNPQx
 
1771
xGyqGwCbcwNnQFyJXopQBF1HzPZXm/GegYa0QQIz+eDDdFysxwpz7sXimgRTJUIXFgn8soEWwwUj
 
1772
zAVI6PUMRcBhOJooqK03BRA5LEiLAVPwIM4hEfjg0BAOeMBIMDMFY5sOOPi34UZ/BbMCKaGk5wIR
 
1773
RNwQBgAoziLFio254AE6vgRVTQJxoYAfAwhkkV1uwDkwWimlcIHakWcpuSSDPIzQIpQDYhFUQ7/+
 
1774
OOHDhMII0EKXNXF0wQaAiYWFB/0sgBQGaKYJCw8sLuACFzWW98tgp0iIoU2SaLSJV2HG+YshqwCh
 
1775
IKIQrOgYQw58JZpcEZzjgX0zwcCAFX5JJEk+gcZFlCFEhJGKCIjKMqoBC8x3I4ijoRDlgwlcZUUF
 
1776
oXE0WkyOHuIoap8ucOivrxigIhDSYYgluKtO5YEDYG6QxQnajXbsIdSOm5CRC7iiLYNf0BAfL/kk
 
1777
MKEigsrZEI1zmXflKcgSmYoqqhzpa72xcAtBfBIQoUpILjCKbKvmNXROCS547MG/cyUkkiFVpEKv
 
1778
wwwqAQG+U6zIokGsyBzGsBtcUIVjC0ggjgRfO1PsmFnknMWDyrTQAIEUSoigdMtIRzzIFMrdEEEC
 
1779
qQDNM1Ja3yCIojwYoJTR3nzxBQRmK60Ey1IkTcOwU+DLAw1ltwwxD+CIrXIONGSLd99+/w144IIP
 
1780
Tnjhhh8ueCAAOw==}
 
1781
 
 
1782
set HourGlass(hglass_5) {R0lGODlhUADwAMYAAFpebK6ytIaKjG52hJqenHqCjGZqdNra3JKWnHp6hKaqrMLGzG5yfI6SlHZ+
 
1783
jGJmdHZ2hKampIKCjG5ufL6+xJqWnIJ+jI6OlGZufPLy9Hp+hGJibLq6vKKipIKGjIqOlHJ6hJaa
 
1784
nK6utM7O1Hp+lF5ibLa2vIqKjJ6ipGpqdOrq7HJyfJKSlHZ6hIaGjLKytHJ2hJ6epH6CjOLi5JaW
 
1785
nKqutMrKzGZmdKqmrJqanGpufPr6/H5+jF5ebIaKlJqepGZqfNra5Hp6jKqqtMbGzG5yhI6SnHZ2
 
1786
jKamrIKClG5uhMLCxI6OnHp+jGJidLq6xKKirIKGlHJ6jJaapLKutNLS1H5+lF5idIqKlGpqfHJy
 
1787
hJKSnHZ6jIaGlLKyvHJ2jH6ClJaWpGZmfJqapGpuhP7+/P//////////////////////////////
 
1788
/////////////////////////////////////////////////////////////////////////yH+
 
1789
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
 
1790
lZaXmJmam5ySJVdOTlejQFkTEzqpWausGFlioz0lslclnY8AYqypqllKSgzBE0XExUVKZEW8QEBi
 
1791
BjdADw89AAC3iKkMRaunE0paWtpaRTDlMFrnWgPq48RK7qhiDyUPBtbXhKmoEwwrRf78GKCDAaKF
 
1792
EAcIEyDkIgQCBBhFBpaLCINBFiA3nNzDhwGIjhQTYKwop40YupHljjRpwkNIEy5cjjzU8oVLC5gM
 
1793
HcIYcNGARnx/gBgwwG8nsRVakMKAwAWGFJsOmgjBCaNFyiNHcLps2WKcDmYbO/U0JTDdRHAwarqU
 
1794
wYOHDCv+Qm5+Qcd0qgYSTawUeAlihZJUP2+JEaqDH82aabHadLnWbYGWNpueUyukABgee1uAqPgV
 
1795
SNhNBpgBSTbgS9ovil1qaMyjCRgZL7l8KTKgiOmlLlc2SQCR2EdbnUoITQHE5Lm0MKcKye1Whoy9
 
1796
rYX0LgJBy8Mvy7k4aHGkIpmONz5jghZNB7Fz3bHD1N2kgAwJYKw4h90Q3RHEKWPGrF7E4kXxlzBj
 
1797
wAOm2IYaBOqt14QMYCThQRKvNQibbDBkBdMRWmBV033joPJfJ6GFVuBSskkxVXIrNeiBDBA6lwRk
 
1798
UhgUGwwwfcFUb0pk0RFwm9zgTCk6oENThjgxtJUEHnj+8FoSzvGQXG5SWSgFVhD4lko0ID4A5ATs
 
1799
WNcCavpx0RySZL4n1VSw4RVXTFl1B44OrADRSTQGZEGGOLVVmNZN2pHAFpLvSSCBXlK59lhsF8KU
 
1800
To4Y6HDDnCIqQ45RX3zBpxB4MQiGBO+BseJeKzHYmgNsolbOOkVMsMqjnAjFjDd4amGTelK5954H
 
1801
gjL5Wmt6RSeEhSAUNN2VYnRSj0c6vBPRed2t19x8nK542XMLjkqqhhDcV4yqzGQJRKPvoFVVmFyw
 
1802
BK2g77EFm3vxLcenaQiGo8WVrG7SDLLEzEXTEdxxgZd8r6EbhXMSMOkeD2Cc2W93HGpjUbecaAlk
 
1803
RAP+QERTkSS09hqD8AkaH2xuWdFaEyDsR+NDEal6USfkATHMOHOVU2R7Td4a8K7PwdaEAydK9iU4
 
1804
ynxVbKuuclkxRBWulxuDtrLIKafOgVGAFQorKutEx+goJydDhSYQRXNBcBNeeTXn1sBkFszuyL9a
 
1805
/XNvnYEoYpBHl5OtWqHCFvDT6Er9HFyxSVGOVUDD2RGIzOjQz0AVg2Dhcjn/GQWSDkbtHEsuMSXF
 
1806
Q/f1ZtHhRHs9knUy4yTVfAsCKii6B1MdJYVaEA4Oo0ODxsyI5Zj2ZG6PsZUE5Umy+BwPIq90k0xL
 
1807
HVExA6qCbrtHwUSEYGLlbtUkD2kXPJ+oPETVwt3+qHXnzioGIA6kQKbSmBwJazlnxerBf8qgFYDj
 
1808
9NDbqV60dY+JB0NTOk9hSN7csjf4Qe1yLqHKUkwzDiWIxlhCyUIwSvOQpJUrRem6VfwOyAM/reRE
 
1809
FZpJA3XgPE0MxgCpmJQU0GEkTDXBTxIoAN8EhSsmscQ9K4HJl2jEoSKQAU7708QNLiJBBpgDOQwR
 
1810
oFvgo0FPAYotCCsAXnDCwq68qSdzIk4Kj6i+5YTqNe9bnYOYVDPnTFEu/IoXMTpSPk4MhhkCqRiC
 
1811
wOSvLyIMSSvC1eTAcBlO5UUqF2LKfdbxF4zI7VvikEhWlrOVCFnAgDJYEcEuAxlF8XAutflKGzf+
 
1812
oaUhisMcsnpScyzAojyS6VMElGLP4KWtcZBBKJ0Qgxa1MTj0CDBTUAwUrmQwuZq9RjcxsREXELQ8
 
1813
OG1SE0OBHi1BcBgB5o1J0TolKtUFyBoxhZnoIAP5YukqcVjKPkqTjwxIeStOTU6SUAQVII9QMjfB
 
1814
gAzaPGYmQiTBSbnJdC+cFg3JFIXgmQ1Uy6ES7HwYT26icBi2ideTXsigqO3yQWWUAGZYksT7CGFz
 
1815
42BAKuSJiVKg0H/Wsc9UVgIwqAGvn7vE3mtIQIIkOkQ22tKoDjh6CS3VyZuSWSRLYDgfJu0xUOpy
 
1816
S8aSWCmYTO+HM51TFj6KPrslEVNL3Jgek7T+IoliL2ROmsqUhmkOHfyQppawqeLQAoKHoKg1DW3o
 
1817
LjPYFkqyhFQX+hV/kArWSugCjiO5jfp4Fiom3TFJ/QxUW9AFG1JZxUJzsVJdKVEn6IHDUslLTmue
 
1818
1U+Tzqctb3lLS7Rak+n5cKMgWqoEkYI8yuDFbBoMngT6ibD3tGWzXCiZdBiIiqRygjz11NNLzxq1
 
1819
pxHMOazdlFURhRPulIOuc0qceWpJI0xlrKe/o2pq0+XXnU0FQTapzgBqG8RM2BQDZVlKtlDkJz7+
 
1820
NoPSdQsp1TQVi6LsnVcyn+Im9ZDxOvctHUMS2jxQWZWa8SXLsVRMFvXD7mJCrLQ8mVoYIs7+KExL
 
1821
eJ4KbLqGSyohoKYJlXKlNg18iTplYb4hVMwFSQCGRxKsqoBNG4va8pKWrkc265jAhuWbYM4lh2q+
 
1822
e9EuPZWkgJHSLbppqUOa8D2IwHNlbnSF4sxBIdNlzAK/Ex4epwo1t7DturHdiRaQsVSWdWS+F8uP
 
1823
EIjnll1CTbqRfCTUXNfeDc2GGDNuFZwkSBcbj5R+nHrNOfmLR2hB8Uwk4JcQNlO4LnONiGVBDHai
 
1824
kk9o5ZG/DDLzfNRUIx0ijQEFDu2HtYGg7ykNs2AYWCSpql/qKqmDUnGxiQSHDl4sdhIGcAUQBHI/
 
1825
3OysbJFEF5pxhSsnjqxIWTniX3RQO2T+EkeCeuLXIsf8HNUlobKqXSs1AQwCE6XHN2ToQWihZ5s0
 
1826
woSvY3pa8HL9IKgZzElGLRdq5qIKHmniW16b1DBF6aJ0JclB+x1jlN1ipGo7QHwwQIYOrsCyUsya
 
1827
HDUpyHKiAtwTS5LX6ILmRIv7BSInFk46cHcmPPLRpbTgS0/JzWsgGkkHoRhQUWYQ+5bjuO2kxStZ
 
1828
IPht+0cXm1zqMaFO0hMhfkBcIQxRSKySMrSp8Y4uFbzkyErJtLOSMkcbxSZ/0IoQttn2yiZmKpM5
 
1829
aC4yVqcUyYsOP7OKV4S25xTggvNG2ZY/XPSaIrpC/FqMS3rX58CudsqrlTYjZUPkmWD+XOvIjGAw
 
1830
YhSXuljP5Eziuaciub29VE82VwfHD8nQdksYHLwr6M7HxyYEdU1ZSdLkdR51JsCYWFi7Xh14LImo
 
1831
g3IEcD3/oqHUxxgtxtt+iiux0BFWOK/CVL4SBNLiAKSg8NJbBrg+DX2fJ01S4qIM0xln2VfAqwXZ
 
1832
CiEBXmyCx6KAWVyZM5JLghp7APmScxyDDBPQdsQuggF5OyABAtxKW0M1uX7uOdJIoh+DPhgbrygD
 
1833
QJYgHKVgRM2VQy9RKAexHrvkYJLkMb1GTYwRW7NRGDoAgJYwGHcCdxlzKFPRUsoxFcSjcz2Wa4R1
 
1834
OZQmG0rgDVlwDfWQgVmxIBCyMRH++ILP0oC/Iyhmw16WRAwM4AQs+C1KQCPPhWLpQgJwNXdJEHWR
 
1835
RnXRwWgnYhUOY4EBOIAXkzrb8yJEZjo8EDxOJFGXExmJYlTgoFFSaAlXoAu2wQUioylWpjPs0SQi
 
1836
Y2WFEhtiAxMhxwXqMAGAFxxakiw1sSA5Y4C45ByPgVmY8oFTcROJ+BLskAVleAlXECkQwH+oxhBS
 
1837
0wSk1HTtAWDl4iSbh2W8AQ56CBSCQA9AogW5wRhNQIPYYwF5IR8r90JxcSKxoRJlVRtk8IiYcAUP
 
1838
cAMYQAavxxDsUy5+4lrUdEGJqAE5FBmbgSq6mAm8GBppeCLKAW6XFR0upiCxxS/+VlExSlAvpDgI
 
1839
vAgNRfAUqIEXPGMkobIgFNVSL4QX3FFkIrECKxiOhQAAvPgt1DFvwEaMb8ESHzRmZDNgSyESDPCM
 
1840
nEAPVzAadtMCT+FiX+AAJNArbPFCjvESGCIk44CQxuIEQ/QOadFc7eVF4rQXhDgj5IAyHHkLo/AA
 
1841
GBAuIamOlfEsf2ZxKREOK8mC0gAE35CSUpCOeRNU0SE45bCR9ugIvPgAY4VwmFIuvfMibQGPR1QE
 
1842
PniUSNmL5kERKDIfAxOHFFIOSlBsVskIO6kDR2MhgHhurWEVS1EErzaWhpCP38BCa7EkB/NxDrEN
 
1843
cCkJ0rBcFbIcwpUz0lGUOrD+l5NQD0HYXGJSMJghA7JTmIY5CU4ABMjxK9XyWt0RcJEJfBMAASDg
 
1844
Yn9kBQ7ATEWwmZZwAxlCAiAAkMZTMTlpmoNAIOvjeKSiBa8Jm4MgBgI0MG0DAg+AmwEiFTwwBVvA
 
1845
Ay3AAMBZUyvRAGVQBi7QBLeZnIOgAzzgA83ZBZApnZbgFmGwBDygnZjQAlFAASLQAuB5CQwgAz8w
 
1846
BG95noowAT4QAh+gfu45CUAgA10gA9HpngzABFjQBPRZn5EAAz6wBVGQAgI6CSCQBE+wBQmQoJGg
 
1847
A0cgA1RAAzywn9JpAOuBBR8gAxCAocBpG2shAS4BorDZesmRhIBkopGJmkf+gCZM8AGAFBgQegjv
 
1848
cATsIwM+4AMBBgPVUKOGYJYRmTAF8AFj4ANEdpwsapWtRx3VoqNM0AUthSEYsKThGCTkwGxg8AHc
 
1849
txLZUhHhAaRZYBItwBJbGAJYQB9WYRo68ABWegvFMQ40AohgIAAXgIUOaX5ZQA0CKgbkkHRCUDwy
 
1850
IAAV8AErchNpcQwD96beFRK1UROTFSg+EAVjIAGrWJSYZgBXwKhhhVARcRPz4R6S1KXlNxfaFB6c
 
1851
KpnJYH5MUS0is2/s4ZAPMQB/YQ+pCgklkJXnUXHNIU4ucAFdwB7Z1RSfZauwmatAow4QsDSXIwEN
 
1852
IAIymoU5xBTstlQ/Gpn+ACBj7VAEWNEY5hIFW7AFlqoBZXomsvElQeOmt5oIAJBCu1oyf3SATZAE
 
1853
UQoy1nUmDVEfOoKqe+kyxSBmyygmLPEiocoerVEuNqEM1gqXNwBm5eA4EMAziZgATYcwJckejpdA
 
1854
XKAMGBCmR3kFikMGIakZDBEVpqcbmCVOhKgByjhZy+hDGECjQAEAdkIGdIEVi4Sw2QeQbBEhI3Nr
 
1855
TaAB6xIThXStQNGw/ZE03bp72PGBKyEBHxBDwtMcumGSANkUG7auwpENNcEFU1JWqJF9raEBHuAD
 
1856
bOEDRpAwsLEuz8JiTfEXfIoPSskA38AdlpIVYMJSC9I0a9sF+dkkUoP+GW7hVzLgtfPiGfggHKcQ
 
1857
hDIRE0/BHSoBLZuyKc8SkO7hMdFyicSaBTK7dSkUSk2Zii4yZe+RBD7QAFHwfgz3NDeYJJgxFTAw
 
1858
AYh7C0o5VsIksbjUa4/Gax8wAhcAGVCiLpE0MFJxcZw6axo1AIqIspfBX88mXXkUBRfgAfIxhyth
 
1859
Gc1RAFNhGj70m8GBLMPQXHxFSaW0u3eXK5fTeJ0nuIBkFSlYgcbSKLNmHfCaNwEjeosnAB/gA9qj
 
1860
a0qSTnkxIRjSH7loLKsAXkbEFDfRHvLRNNHmAzTgA97nHKKnMyBTuHHhSvDLNeeDDsJULq7zJ/HD
 
1861
eKQ7bv7EYjkEu8r+oARvagAp8GH8ACZiM2btYSuBpYQT7CldKANkY6ZTQZpkoAQB6l3f4lVyNEwU
 
1862
e1ptAWlKwl9YIHXDC1xT13RGGBubwTw6MMSYgEIwTA4xsh7WCGlk8gE50AUTbEo+x39TZLiFkX4G
 
1863
/GHEAAFSkADfE7yLNzBUtaNYUFkUvFbsMVSSMWxafAm+uGno8BSChhCAeHIm5wMx0KF4vHzOJYt2
 
1864
mCo/NMhhxX60tHkv6kXNQXagV7Y58AEu0Mce44YvFBsXl8XxS4XNlS2MBIjlNGqRRMqkNm4ywEi5
 
1865
YVR+ccnShwHUp8BTYl2tBcqyR8uj1mdg4EXsY8VGxsqHZsgOoRn+R8BorVUmgQUGPvAB+clrBPNz
 
1866
LYSR5ufLhxZr2hB3yztmUuV9weMCCJCm5CZqqLzLEICL0AwaqQBeThVyzPpQkiQALgDF/4uDe+FF
 
1867
CTRIggwiX7FkXpctoGnK0ZIEDcACG9RPlFtYBtheAUfOnKTJ1tEmCKsb6SJhEgDQpCtcUDNSAYkV
 
1868
W/ZDVYnPcJwfIJAdY1ZmujZqlVPBvyM1irwSELlloMU1Cx0RYFIyaiLL45Z38EMw+1S4eOGBNdLS
 
1869
SuC9nERC4FUxNheBgHjTVMWhEizG6OLTsqjKGiyWHYVx6BNAEdgcJD05LhADIYAANURDhDjJTSkb
 
1870
HTLVseRhZcH+FMuqHFsNfoznASfgAwIAfquDQGIdUF9QG8hA1UIEzLbrbVPhAN03uuiCcgWDR164
 
1871
HM3MMzJBq4UB2ZlQyEsmTEzhgWjFeItnb4x3gzqMwSxVPZ3zF3rtRoh2NB+XHAJ0Luiyowakc+py
 
1872
1IzkJkE8AaSNCc7wwrQWdwnIMxQc3e/xAahr2IntulIUFRJLKvxxChwWVjOVW9xIjAxhK7mSZ0ki
 
1873
APLJ2UxCNfG3d4nl3fH7UXLkaRJLMxQsVbzkAQC903zWFtmXgJJhyd9dCUPkWDLxcaFbGYEiMLxW
 
1874
WZV1QIB0iO1VHczzSgb8wtLTTkkk0rY3amZsd8mMQAunHdv+qwVIVeCUcAMp4ArnUVZ8khyX6+DU
 
1875
bXflFmkTUi48k47nIGO21SMYxyyKuHA0g04DcwJcCmkjviJnko7sw5ZDl9xux9yDs9vU6DTRElhJ
 
1876
4gNyTViSBGASydvjTAZSnskuniFis8BGUgCkNHKbEjz6S2pREGX4mh07ONoskwXMTRcxvh6TBFh8
 
1877
pkE9J1ErN4xJhA4rXObAp+fJkpIKTtM1eCtY8NW3vDrE00JiXhEpqOiUIFbD4BBMwdtIjVIC0AAX
 
1878
wNnz4c1W4C979ysT4Q2cPglDlAJZKV4wAZq2Esolzc2Vji4HW+IKFMS33dEoRAaNYyFbOWrSRcYC
 
1879
0EuRVjn+wLt3NRJwsG4sJGQeA1CHYbIcZfYeveQCAnDLrcsWJwJXluZDpxDrktCwrkCANqcSMp5a
 
1880
gU5DI7d8AJYdPL5l1b5+HkEbIYbslcFHY8RLUaxzdO0cJd5S7IMyyYLceT4aFLF7rVqygIhS5SYo
 
1881
Ws7Zr8vbCJuRyDAB7QkJBALH3QZ31AgwD0XLUUDKmQtFPXPrCftZP64JtVsgnpkVZYoib87EAoAA
 
1882
AD0FPhBd2lN1B5EdGSlTIf8IQ4RxuWNfCuI0vCQov5okAS3PXghgs10jxRDUnMQM7QcOnfZ17WFy
 
1883
PCZdURDQuZYusXHXMYHoXE/zL5wN1mFfC0cCBQAhTzf+qO+c6hJgAZWkjngNA64GQaVgEgL2deU1
 
1884
qqLnAfu7OjhINXaeHUeVCuoeCQSSCuEiEzOsFdp3dyYnxcr+vznuLzihLX9BBuDoXSLyDpbyPZ0M
 
1885
dqV0ShkUZdK29lBdKUEz7ELEC+aB5nG3lUwU+lRVWQ4iUQlz69loMcNW+SJfCi9JDt9zhxfEA9HV
 
1886
4OhU/L0kURhp6LJhJTPvXdf+MiJ2IQxn/VHQAE+cYuXkRzBfUaJI+Q//i0lHfMieKVCzKV3wAYet
 
1887
R7rGKQdrJIDAJdhSVKSkM3Hzt8jY6PgI+feAkYUxoQVzdAQh2NkkIxEKFiUT5SHj0SAgAyqTJFMg
 
1888
JCT+SCLLJaU1cKjzEOn7u/gAZKDDUPQFAXHUMssl9MkKhuoh7YFFgxXNKiHTxHXkHE5YxKCjYwCc
 
1889
/niTBYShNPAFAiHVwmXf1FQQ6vHqwe3hAgIPp5KEksGjGYlOtwYMKKcDiLqJwYBEZABDy5d7DLnw
 
1890
YIVKwqmQHlxICyXBYBN74TpB0KLF3IReFNUJs1hkAAwYt+7ZI5FvWkgwBIuO5IZQQ8dZMAbEzMKr
 
1891
ps2IQAppWdbRQRMeSai9ihJFpAdTpJAmdNCp2SYYRSaQISNGajphBrIw0MlJGRdO+kCe+uvhgw+R
 
1892
r3gcfEaLIQS25iLKBXYT6jEYyjIJEvIRjASu/2T+CEDgg+DJJDxidQy3s60OJTQfRxJGScexLy3s
 
1893
aeISVCTCjz5Ci9QtQxqPfLNIHGn2hTFUdK5fu8syAQZtn3qFWOHxcbeELSyKospeOl/LcF8GkCMT
 
1894
tTmkB5XsZmqRgOPlAgiDI5QgYHBnDx+RNlHahAO1CXEEW4Ug0pp6jdwwDBAMYCQIOODgZt9HW7ky
 
1895
llHYWcFKEwk8IwsnXHxxoDkJKhhMXcXshJU9LRyhFUL5bEVfUaF1JtxwM85yRHIHZlFEDyg6ckMK
 
1896
FumgE1YQtNDEhE3M8swnPETxwQUVjNRKeFs5402BMChxCBkADNkIe1nYNQAItdXGRQJLCpJAbRr+
 
1897
SPlBDhdgcZBBu2llyyxfJHdIETqMSWZFUGGUST4arNmmbc8kUB8psGA3kmEaxIIYF/NowcBbGBBa
 
1898
6B83EHMXT7g5gCp8DoDwDXzPgIRQAYYdtJkGsqDFJiblFHEimbDpAEMLEGCm6KK1zaMmfE0Q1cR1
 
1899
snLDjTeaLrkJJkqQUUgJoTIihgEGPOhMlMR9WNtiyTbhwwdgSPnRcEIos9FOGyW3KwOgbnuDGIjw
 
1900
FCVuz+C6WDLxWaiPjk+2sFPCyeykBZgMMLftIkB0S4wWLaCqQZxLrtmCFMnW9pGAag7SwjypFWIM
 
1901
A4doGzEjwjxwwwSyrVCEFkVktMJiwcYJAgyBIAiABcI7zcNxRk5hYnMRELcczBVOGHADBu40FlHV
 
1902
sjEwwc1dSDBB18Uo0RbYhbAFk6ASMe0I1FeU4PQDbrsNtUWxvXWzgWS4hR565kgNRN8GxIX2Lwa8
 
1903
7bYTVxD+thhvD3OD26MC8cDgZwdeaA/3Uo555ppvznnnnn8OeuiiRxwIADs=}
 
1904
 
 
1905
########################################################################
 
1906
 
 
1907
  proc animate {gameID widget} {
 
1908
        variable GameState
 
1909
        variable HourGlass
 
1910
 
 
1911
        incr GameState($gameID,hg_wc)
 
1912
        if { $GameState($gameID,hg_wc) > 5 } { set GameState($gameID,hg_wc) 1 }
 
1913
 
 
1914
        set time_gone [expr {[clock seconds] - $GameState($gameID,hg_tstart)}]
 
1915
        if { $time_gone <= $GameState($gameID,hg_time_to_go) } {
 
1916
          $widget itemconfigure $GameState($gameID,hg_secs) \
 
1917
                -text [expr {$GameState($gameID,hg_time_to_go) - $time_gone}]
 
1918
          set new_fallen [expr {int($time_gone * $HourGlass(quantity) / \
 
1919
                double($GameState($gameID,hg_time_to_go)))}]
 
1920
  
 
1921
          if { $new_fallen > $GameState($gameID,hg_sand_fallen) } {
 
1922
                set GameState($gameID,hg_sand_fallen) $new_fallen
 
1923
                if { $GameState($gameID,hg_sand_fallen) < $HourGlass(above_cone) } {
 
1924
                  set upper_mark [expr {$HourGlass(cone_start) - $HourGlass(above_cone) + \
 
1925
                        $GameState($gameID,hg_sand_fallen)}]
 
1926
                } else {
 
1927
                  set h [expr {($GameState($gameID,hg_sand_fallen) - $HourGlass(above_cone))}]
 
1928
                  set ch [expr {$HourGlass(cone_end) - $HourGlass(cone_start)}]
 
1929
                  set hx [expr {( 9 * $h * $h ) / $ch} ]
 
1930
                  set upper_mark [expr {$HourGlass(cone_start) + $hx}]
 
1931
                }
 
1932
                set GameState($gameID,hg_lower_mark) \
 
1933
                  [expr {$HourGlass(bottom_mark) - $GameState($gameID,hg_sand_fallen)}]
 
1934
                $GameState($gameID,hg_img_current) copy $HourGlass(img_empty) \
 
1935
                  -from 0 0 $HourGlass(width) $upper_mark -to 0 0 
 
1936
                $GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
 
1937
                  -from 0 $upper_mark $HourGlass(width) $HourGlass(half_mark) -to 0 $upper_mark
 
1938
                $GameState($gameID,hg_img_current) copy $HourGlass(img,$GameState($gameID,hg_wc)) \
 
1939
                  -from 0 $HourGlass(half_mark) $HourGlass(width) $GameState($gameID,hg_lower_mark) \
 
1940
                  -to 0 $HourGlass(half_mark)
 
1941
                $GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
 
1942
                  -from 0 $GameState($gameID,hg_lower_mark) $HourGlass(width) $HourGlass(height) \
 
1943
                  -to 0 $GameState($gameID,hg_lower_mark)
 
1944
          } else {
 
1945
                $GameState($gameID,hg_img_current) copy $HourGlass(img,$GameState($gameID,hg_wc)) \
 
1946
                  -from 0 $HourGlass(half_mark) $HourGlass(width) $GameState($gameID,hg_lower_mark) \
 
1947
                  -to 0 $HourGlass(half_mark)
 
1948
          }
 
1949
        } elseif { [expr {$GameState($gameID,hg_ready) % 2 == 0}] } {
 
1950
          $GameState($gameID,hg_img_current) copy $HourGlass(img_empty) -from 0 0 $HourGlass(width) \
 
1951
                $GameState($gameID,hg_lower_mark) -to 0 0 
 
1952
          $GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
 
1953
                -from 0 $GameState($gameID,hg_lower_mark) $HourGlass(width) $HourGlass(height) \
 
1954
                -to 0 $GameState($gameID,hg_lower_mark)
 
1955
          incr GameState($gameID,hg_ready)
 
1956
        } elseif { $GameState($gameID,hg_ready) == 1 } {
 
1957
          time_elapsed $gameID
 
1958
          $GameState($gameID,hg_img_current) blank
 
1959
          set GameState($gameID,hg_ready) 2
 
1960
        } else {
 
1961
          $GameState($gameID,hg_img_current) blank
 
1962
          incr GameState($gameID,hg_ready)
 
1963
        }
 
1964
        if {[expr {$GameState($gameID,hg_ready) % 2 == 1}] || \
 
1965
        $time_gone <= [expr {$GameState($gameID,hg_time_to_go) + $HourGlass(blink_time)}]} {
 
1966
          set GameState($gameID,hg_animate) \
 
1967
            [after $HourGlass(ani_delay) "::Games::Sketch::animate $gameID $widget"]
 
1968
    } else {
 
1969
          set GameState($gameID,hg_ready) -1
 
1970
          set GameState($gameID,hg_animate) ""
 
1971
    }
 
1972
  }
 
1973
 
 
1974
  proc hourglass {gameID widget} {
 
1975
        variable HourGlass
 
1976
        variable GameState
 
1977
        variable bkg_color
 
1978
 
 
1979
        set HourGlass(width)            79
 
1980
        set HourGlass(height)           239
 
1981
 
 
1982
        set HourGlass(half_mark)        120
 
1983
        #set HourGlass(upper_full_mark)  30
 
1984
        set HourGlass(lower_full_mark)  160
 
1985
        set HourGlass(cone_start)       90
 
1986
        set HourGlass(cone_end)         115
 
1987
        set HourGlass(bottom_mark)      230
 
1988
 
 
1989
        set HourGlass(ani_delay)        300
 
1990
        set HourGlass(blink_time)               5
 
1991
 
 
1992
        set GameState($gameID,hg_img_current) \
 
1993
          [image create photo -width $HourGlass(width) -height $HourGlass(height)]
 
1994
        #
 
1995
        # quantity that filled the upper cone
 
1996
        #
 
1997
        set HourGlass(cone_fill)  [expr {($HourGlass(cone_end) - $HourGlass(cone_start)) / 3}]
 
1998
        set HourGlass(quantity)   [expr {$HourGlass(bottom_mark) - $HourGlass(lower_full_mark)}]
 
1999
        set HourGlass(above_cone) [expr {$HourGlass(quantity) - $HourGlass(cone_fill)}]
 
2000
 
 
2001
        set HourGlass(img_full)  [image create photo -data $HourGlass(hglass_full)]
 
2002
        set HourGlass(img_empty) [image create photo -data $HourGlass(hglass_empty)]
 
2003
        set HourGlass(img,1)     [image create photo -data $HourGlass(hglass_1)]
 
2004
        set HourGlass(img,2)     [image create photo -data $HourGlass(hglass_2)]
 
2005
        set HourGlass(img,3)     [image create photo -data $HourGlass(hglass_3)]
 
2006
        set HourGlass(img,4)     [image create photo -data $HourGlass(hglass_4)]
 
2007
        set HourGlass(img,5)     [image create photo -data $HourGlass(hglass_5)]
 
2008
 
 
2009
        init_hour_glass $gameID $widget
 
2010
        set GameState($gameID,hg_ready) -1
 
2011
    set GameState($gameID,hg_animate) ""
 
2012
 
 
2013
        canvas $widget -width $HourGlass(width) -height $HourGlass(height) -bg $bkg_color
 
2014
        $widget create image 0 0 -image $GameState($gameID,hg_img_current) -anchor nw
 
2015
 
 
2016
        set balloon_msg "[::Games::trans hourglass_courtesy]"
 
2017
        bind $widget <Enter> +[list balloon_enter %W %X %Y $balloon_msg]
 
2018
    bind $widget <Leave> "+set Bulle(first) 0; kill_balloon"
 
2019
 
 
2020
        set GameState($gameID,hg_secs) [$widget create text 8 8 -font 12x24 \
 
2021
          -text "$GameState($gameID,hg_time_to_go)" -fill red -anchor nw]
 
2022
  }
 
2023
 
 
2024
  proc init_hour_glass {gameID widget} {
 
2025
        variable GameState
 
2026
        variable HourGlass
 
2027
 
 
2028
    set GameState($gameID,hg_time_to_go)        $HourGlass(time_to_go)
 
2029
        set GameState($gameID,hg_wc)                    1
 
2030
        set GameState($gameID,hg_ready)                 0
 
2031
 
 
2032
        set GameState($gameID,hg_sand_fallen) 0
 
2033
 
 
2034
        $GameState($gameID,hg_img_current) blank
 
2035
 
 
2036
        set upper_mark [expr {$HourGlass(cone_start) - \
 
2037
          ( $HourGlass(quantity) - $HourGlass(cone_fill) ) + $GameState($gameID,hg_sand_fallen)}]
 
2038
        set GameState($gameID,hg_lower_mark) \
 
2039
          [expr {$HourGlass(bottom_mark) - $GameState($gameID,hg_sand_fallen)}]
 
2040
 
 
2041
        $GameState($gameID,hg_img_current) copy $HourGlass(img_empty) \
 
2042
          -from 0 0 $HourGlass(width) $upper_mark -to 0 0 
 
2043
        $GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
 
2044
          -from 0 $upper_mark $HourGlass(width) $HourGlass(half_mark) -to 0 $upper_mark
 
2045
        $GameState($gameID,hg_img_current) copy $HourGlass(img,$GameState($gameID,hg_wc)) \
 
2046
          -from 0 $HourGlass(half_mark) $HourGlass(width) $GameState($gameID,hg_lower_mark) \
 
2047
          -to 0 $HourGlass(half_mark)
 
2048
        $GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
 
2049
          -from 0 $GameState($gameID,hg_lower_mark) $HourGlass(width) $HourGlass(height) \
 
2050
          -to 0 $GameState($gameID,hg_lower_mark)
 
2051
  }
 
2052
 
 
2053
  proc stop_hour_glass {gameID widget} {
 
2054
        variable GameState
 
2055
        variable bkg_color
 
2056
        variable err_bkg_color
 
2057
 
 
2058
        # Cancel possibly running hourglass
 
2059
    if {$GameState($gameID,hg_animate) != ""} {
 
2060
          after cancel $GameState($gameID,hg_animate)
 
2061
        }
 
2062
        $widget configure -bg $err_bkg_color
 
2063
  }
 
2064
 
 
2065
  proc start_hour_glass {gameID widget} {
 
2066
        variable GameState
 
2067
        variable bkg_color
 
2068
 
 
2069
        # Cancel possibly running hourglass
 
2070
    if {$GameState($gameID,hg_animate) != ""} {
 
2071
          after cancel $GameState($gameID,hg_animate)
 
2072
        }
 
2073
 
 
2074
        $widget configure -bg $bkg_color
 
2075
    init_hour_glass $gameID $widget
 
2076
        set GameState($gameID,hg_tstart) [clock seconds]
 
2077
    animate $gameID $widget
 
2078
  }
 
2079
}