tkxsltproc.tcl

Go to the documentation of this file.
00001 /* !/bin/sh
00002 */
00003 /*  \
00004 */
00005 exec wish "$0" "$@"
00006 
00007 /*  tkxsltproc --
00008 */
00009 /* 
00010 */
00011 /*  Simple GUI for xsltproc-style transformations
00012 */
00013 /* 
00014 */
00015 /*  Copyright (c) 2005-2007 Explain
00016 */
00017 /*  http://www.explain.com.au
00018 */
00019 /*  Copyright (c) 2003-2004 Zveno
00020 */
00021 /*  http://www.zveno.com/
00022 */
00023 /* 
00024 */
00025 /*  See the file "LICENSE" in this distribution for information on usage and
00026 */
00027 /*  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
00028 */
00029 /* 
00030 */
00031 /*  $Id: tkxsltproc.tcl,v 1.11 2005/05/20 14:08:10 balls Exp $
00032 */
00033 
00034 /*  Global initialisation
00035 */
00036 
00037  VERSION =  1.9
00038 
00039 /*  Temporary hack for TclApp-wrapped executables
00040 */
00041 lappend auto_path [file dirname [info nameofexecutable]]
00042 
00043 /*  v3.1+ gives us the "-indent", "-resulturi" and "-profilefilename" options
00044 */
00045 package require xslt 3.2
00046 
00047 package require msgcat
00048 catch {namespace import ::msgcat::mc}
00049 
00050 package require uri 1.2
00051 
00052 /*  We need common routines from tkxmllint
00053 */
00054 source [file join [file dirname [info script]] common.tcl]
00055 
00056 /*  Pre-load "standard" XSLT extension packages
00057 */
00058 
00059 catch {
00060     package require xslt::resources
00061     ::xslt::extension add http://www.zveno.com/resources ::xslt::resources
00062 }
00063 catch {
00064     package require xslt::ret ess
00065     ::xslt::extension add http://www.zveno.com/process ::xslt::process
00066 }
00067 catch (
00068     type package , type require , type xslt::, type utilities
00069     ::, type xslt::, type extension , type add , type http://, type www., type zveno., type com/, type utilities ::, type xslt::, type utilities
00070 )
00071 
00072 tk appname tkxsltproc
00073 
00074 # Init --
00075 #
00076 #   Create the GUI
00077 #
00078 # Arguments:
00079 #   win toplevel window
00080 #
00081 # Results:
00082 #   Tk widgets created
00083 
00084 proc Init win {
00085     upvar \#0 State$win state
00086 
00087     if {[info exists state(initialised)]} {
00088     return
00089     }
00090 
00091     set w [expr {$win == "." ? {} : $win}]
00092 
00093     array set state {
00094     src {}
00095     ssheet {}
00096     result {}
00097     cwd {}
00098     profile 0
00099     profilefilename {}
00100     nonet 0
00101     nowrite 0
00102     nomkdir 0
00103     writesubtree None
00104     }
00105 
00106     wm title $win "Tk XSLTPROC"
00107 
00108     switch [tk windowingsystem] {
00109     aqua -
00110     classic {
00111         set metakey Command
00112         set metakeylabel Command-
00113     }
00114     default {
00115         set metakey Control
00116         set metakeylabel Ctrl+
00117     }
00118     }
00119 
00120     menu $w.menu -tearoff 0
00121     $win configure -menu $w.menu
00122     $w.menu add cascade -label [mc File] -menu $w.menu.file
00123     menu $w.menu.file -tearoff 0
00124     $w.menu.file add command -label [mc {New Window}] -command NewWindow -accel ${metakeylabel}N
00125     bind $win <${metakey}-n> NewWindow
00126     $w.menu.file add separator
00127     $w.menu.file add command -label [mc {Reload Stylesheet}] -command [list Compile $win] -accel ${metakeylabel}R
00128     bind $win <${metakey}-r> [list Compile $win]
00129     if {[tk windowingsystem] != "aqua"} {
00130     $w.menu.file add separator
00131     $w.menu.file add command -label [mc Preferences...] -command Preferences
00132     $w.menu.file add separator
00133     $w.menu.file add command -label [mc Quit] -command {destroy .} -accel ${metakeylabel}Q
00134     }
00135     bind $win <${metakey}-q> {destroy .}
00136 
00137     $w.menu add cascade -label [mc Help] -menu $w.menu.help
00138     menu $w.menu.help -tearoff 0
00139     $w.menu.help add command -label [mc {About tkxsltproc}] -command tkAboutDialog -accel ${metakeylabel}?
00140     # This fails on Linux
00141     catch {bind $win <${metakey}-?> tkAboutDialog}
00142 
00143     if {[tk windowingsystem] == "aqua"} {
00144     $w.menu add cascade -label tkxsltproc -menu $w.menu.apple
00145     menu $w.menu.apple -tearoff 0
00146     $w.menu.apple add command -label [mc {About tkxsltproc}] -command tkAboutDialog
00147     $w.menu.apple add command -label [mc Preferences...] -command Preferences
00148     }
00149 
00150     frame $w.controls
00151     grid $w.controls -row 0 -column 0 -sticky ew
00152     button $w.controls.xform -text [mc Transform] -command [list Transform $win]
00153     button $w.controls.reload -text [mc {Reload Stylesheet}] -command [list Compile $win]
00154     # TODO: add nice icons
00155     grid $w.controls.xform -row 0 -column 0 -sticky w
00156     grid $w.controls.reload -row 0 -column 1 -sticky w
00157     grid columnconfigure $w.controls 1 -weight 1
00158 
00159     Doc $win src -title [mc {Source Document}] -row 1
00160     Doc $win ssheet -title [mc {Stylesheet Document}] -row 2 -command [list Compile $win]
00161     Doc $win result -title [mc {Result Document}] -row 3 -type save
00162 
00163     labelframe $w.options -text [mc Options]
00164     grid $w.options -row 4 -column 0 -sticky ew
00165     checkbutton $w.options.validate -text [mc {Skip validation}] -variable State${win}(novalidate)
00166     checkbutton $w.options.timing -text [mc {Display timing}] -variable State${win}(timing)
00167     checkbutton $w.options.xinclude -text [mc XInclude] -variable State${win}(xinclude)
00168     checkbutton $w.options.nonet -text [mc {No network}] -variable State${win}(nonet)
00169     checkbutton $w.options.nowrite -text [mc {No write}] -variable State${win}(nowrite)
00170     checkbutton $w.options.nomkdir -text [mc {No mkdir}] -variable State${win}(nomkdir)
00171     label $w.options.writesubtreelabel -text [mc {Write subtree}]
00172     button $w.options.writesubtree -text [file tail $state(writesubtree)] -command [list WriteSubtree $win]
00173     button $w.options.profile -text [mc Profile...] -command [list Profile $win]
00174     if {$::tcl_platform(platform) == "windows"} {
00175     $w.options.profile configure -state disabled
00176     }
00177     button $w.options.security -text [mc Security...] \
00178     -command [list SecuritySettings $win]
00179 
00180     ### xsltproc options not yet provided
00181     # novalid
00182     # nodtdattr
00183     # maxdepth
00184     # maxparserdepth
00185     # catalogs
00186     # load-trace
00187 
00188     grid $w.options.validate -row 0 -column 0 -sticky w
00189     grid $w.options.timing -row 0 -column 1 -sticky w
00190     grid $w.options.xinclude -row 1 -column 0 -sticky w
00191     grid $w.options.profile -row 1 -column 1 -sticky w
00192     grid $w.options.nonet -row 0 -column 2 -sticky w
00193     grid $w.options.nowrite -row 1 -column 2 -sticky w
00194     grid $w.options.nomkdir -row 0 -column 3 -sticky w
00195     grid $w.options.writesubtreelabel -row 1 -column 3 -sticky e
00196     grid $w.options.writesubtree -row 1 -column 4 -sticky w
00197     grid columnconfigure $w.options 5 -weight 1
00198 
00199     labelframe $w.parameters -text [mc Parameters]
00200     ShowParameters $win
00201     text $w.parameters.t -wrap none -height 8 \
00202     -xscrollcommand [list $w.parameters.xs set] \
00203     -yscrollcommand [list $w.parameters.ys set]
00204     scrollbar $w.parameters.xs -orient horizontal \
00205     -command [list $w.parameters.t xview]
00206     scrollbar $w.parameters.ys -orient vertical \
00207     -command [list $w.parameters.t yview]
00208     $w.parameters.t insert end [mc {No parameters defined}]
00209     $w.parameters.t configure -tabs {4c right 5c left} -state disabled
00210     grid $w.parameters.t -row 0 -column 0 -sticky news
00211     grid $w.parameters.xs -row 1 -column 0 -sticky ew
00212     grid $w.parameters.ys -row 0 -column 1 -sticky ns
00213     grid columnconfigure $w.parameters 0 -weight 1
00214 
00215     set state(messages) [labelframe $w.messages -text [mc Messages]]
00216     grid $w.messages -row 7 -column 0 -sticky news
00217     text $w.messages.log -wrap none \
00218     -state disabled \
00219     -xscrollcommand [list $w.messages.xscroll set] \
00220     -yscrollcommand [list $w.messages.yscroll set]
00221     scrollbar $w.messages.xscroll -orient horizontal \
00222     -command [list $w.messages.log xview]
00223     scrollbar $w.messages.yscroll -orient vertical \
00224     -command [list $w.messages.log yview]
00225     grid $w.messages.log -row 0 -column 0 -sticky news
00226     grid $w.messages.yscroll -row 0 -column 1 -sticky ns
00227     grid $w.messages.xscroll -row 1 -column 0 -sticky ew
00228     grid rowconfigure $w.messages 0 -weight 1
00229     grid columnconfigure $w.messages 0 -weight 1
00230 
00231     SetProperties $win $w.messages.log
00232 
00233     frame $w.feedback
00234     grid $w.feedback -row 8 -column 0 -sticky ew
00235     label $w.feedback.msg -textvariable State${win}(feedback)
00236     set state(progress) [canvas $w.feedback.progress \
00237                  -width 100 -height 25]
00238     set state(progressbar) [$w.feedback.progress create rectangle 0 0 1 25 \
00239                 -fill blue -disabledfill white -state disabled]
00240     grid $w.feedback.progress -row 0 -column 0
00241     grid $w.feedback.msg -row 0 -column 1 -sticky ew
00242     grid columnconfigure $w.feedback 1 -weight 1
00243 
00244     grid rowconfigure $win 7 -weight 1
00245     grid columnconfigure $win 0 -weight 1
00246 
00247     set state(initialised) 1
00248 
00249     return {}
00250 }
00251 
00252 /*  tkAboutDialog --
00253 */
00254 /* 
00255 */
00256 /*  Information about this application
00257 */
00258 /* 
00259 */
00260 /*  Arguments:
00261 */
00262 /*  None
00263 */
00264 /* 
00265 */
00266 /*  Results:
00267 */
00268 /*  Displays window
00269 */
00270 
00271 ret  tkAboutDialog () {
00272     catch {destroy .about}
00273     toplevel .about
00274     catch {::tk::unsupported::MacWindowStyle style .about floatProc}
00275     wm title .about [mc {About tkxsltproc}]
00276     label .about.libxsltlogo -image libxsltLogo
00277     label .about.tcllogo -image tclLogo
00278     label .about.tkxsltproclogo -image tkxsltprocLogo
00279     text .about.msg -width 40 -height 10 -font Arial
00280     .about.msg insert end [mc [format "tkxsltproc - A GUI for xsltproc
00281 
00282 Version %s
00283 
00284 Powered by:
00285 \tlibxml2\tv%s
00286 \tlibxslt\tv%s
00287 \tlibexslt\tv%s
00288 \tTclXSLT\tv%s
00289 \tTcl/Tk\tv%s
00290 
00291 http://tclxml.sourceforge.net/tkxsltproc.html
00292 " $::VERSION $::xml::libxml2::libxml2version \
00293     $::xslt::libxsltversion $::xslt::libexsltversion \
00294     [package require xslt] [info patchlevel]]]
00295 
00296     .about.msg configure -state disabled
00297 
00298     grid .about.tkxsltproclogo -row 0 -column 0 -rowspan 2 -sticky news
00299     grid .about.msg -row 0 -column 1 -rowspan 2 -sticky news -padx 20 -pady 20
00300     grid .about.libxsltlogo -row 0 -column 2 -sticky news
00301     grid .about.tcllogo -row 1 -column 2 -sticky news
00302     grid rowconfigure .about 0 -weight 1
00303     grid rowconfigure .about 1 -weight 1
00304     grid columnconfigure .about 1 -weight 1
00305 
00306     return {}
00307 }
00308 
00309 /*  Preferences --
00310 */
00311 /* 
00312 */
00313 /*  Manage application preferences
00314 */
00315 /* 
00316 */
00317 /*  Arguments:
00318 */
00319 /*  None
00320 */
00321 /* 
00322 */
00323 /*  Results:
00324 */
00325 /*  Preferences dialog displayed
00326 */
00327 
00328 ret  Preferences () {
00329     catch {destroy .prefs}
00330     toplevel .prefs
00331     wm title .prefs [mc {tkxsltproc Preferences}]
00332 
00333     labelframe .prefs.extensions -text [mc Extensions]
00334 
00335     grid .prefs.extensions -row 0 -column 0 -sticky news
00336     grid columnconfigure .prefs 0 -weight 1
00337 
00338     button .prefs.extensions.load -text [mc Load] -command [list Preferences:LoadExtension]
00339     entry .prefs.extensions.script -textvariable ::preferences(extensionScript)
00340     button .prefs.extensions.browse -text [mc Browse] -command [list Preferences:Browse]
00341 
00342     grid .prefs.extensions.load - -row 0 -column 0 -sticky w
00343     grid .prefs.extensions.script -row 1 -column 0 -sticky ew
00344     grid .prefs.extensions.browse -row 1 -column 1 -sticky e
00345     grid columnconfigure .prefs.extensions 0 -weight 1
00346 
00347     return {}
00348 }
00349 
00350 ret  Preferences:LoadExtension () {
00351     set fname [.prefs.extensions.script get]
00352 
00353     if {![string length $fname]} {
00354     tk_messageBox -icon warning -message [mc {No extension script has been given}]
00355     return {}
00356     }
00357     if {![file readable $fname]} {
00358     tk_messageBox -icon error -message [mc {Unable to open extension script}]
00359     return {}
00360     }
00361     if {[catch {uplevel \#0 source $fname} err]} {
00362     tk_messageBox -icon error -message "An error occurred while loading the extension\n$err"
00363     return {}
00364     }
00365 
00366     return {}
00367 }
00368 
00369 ret  Preferences:Browse () {
00370     set fname [tk_getOpenFile -title [mc {Load Extension Script}]]
00371     if {![string length $fname]} {
00372     return {}
00373     }
00374     .prefs.extensions.script delete 0 end
00375     .prefs.extensions.script insert 0 $fname
00376 
00377     return {}
00378 }
00379 
00380 ret  WriteSubtree (type win) {
00381     upvar \#0 State$win state
00382 
00383     set w [expr {$win == "." ? {} : $win}]
00384 
00385     set dir [tk_chooseDirectory -parent $win -title [mc {Choose Write Subtree}] \
00386            -mustexist 1 -initialdir [expr {$state(writesubtree) == "None" ? [pwd] : $state(writesubtree)}]]
00387     if {$dir != ""} {
00388     set state(writesubtree) $dir
00389     $w.options.writesubtree configure -text [file tail $dir]
00390     }
00391 }
00392 
00393 ret  Profile win (
00394     type upvar \#0 , type State$, type win , type state
00395 
00396     , type set , type w [, type expr , optional $win === "." =? { : $, type win)]
00397 
00398     catch {destroy .profile}
00399     toplevel .profile
00400     wm title .profile [mc {tkxsltret  Profile}]
00401 
00402     set f [labelframe .profile.f -text [mc Profile]]
00403     grid $f -row 0 -column 0 -sticky news
00404     grid columnconfigure .profile 0 -weight 1
00405 
00406     checkbutton $f.state -text [mc Enabled] -variable State$(type win)(profile)
00407     entry $f.fname -textvariable State${win}(profilefilename) -width 30
00408     button $f.browse -text [mc Browse] -command [list Profile:Browse $win]
00409     grid $f.state - -row 0 -column 0 -sticky ew
00410     grid $f.fname -row 1 -column 0 -sticky ew
00411     grid $f.browse -row 1 -column 1 -sticky w
00412     grid columnconfigure $f 0 -weight 1
00413 
00414     return {}
00415 }
00416 
00417 ret  Profile:Browse win (
00418     type upvar \#0 , type State$, type win , type state
00419 
00420     , type set , type fname [, type tk_, type getSaveFile -, type title [, type mc , optional Save =Profiling Data]]
00421     , type if , optional ![string =length $fname] , optional 
00422     =return {
00423     )
00424 
00425     set state(profilefilename) $fname
00426 
00427     return {}
00428 }
00429 
00430 /*  Doc --
00431 */
00432 /* 
00433 */
00434 /*  Setup a document pane
00435 */
00436 /* 
00437 */
00438 /*  Arguments:
00439 */
00440 /*  win toplevel window
00441 */
00442 /*  p   pane
00443 */
00444 /*  args    configuration options
00445 */
00446 /* 
00447 */
00448 /*  Results:
00449 */
00450 /*  Widgets created and positioned
00451 */
00452 
00453 ret  Doc (type win , type p , type args) {
00454     upvar \#0 State$win state
00455 
00456     set w [expr {$win == "." ? {} : $win}]
00457 
00458     array set options {
00459     -type open
00460     -title {}
00461     -command {}
00462     }
00463     array set options $args
00464 
00465     labelframe $w.$p -text $options(-title)
00466     grid $w.$p -row $options(-row) -column 0 -sticky ew
00467     label $w.$p.url -text [mc URL:]
00468     entry $w.$p.urlentry -width 60 -textvariable State${win}(${p})
00469     button $w.$p.browse -text [mc Browse] -command [list Browse $win $p -title $options(-title) -type $options(-type) -command $options(-command)]
00470     grid $w.$p.url -row 0 -column 0 -sticky w
00471     grid $w.$p.urlentry -row 0 -column 1 -sticky ew
00472     grid $w.$p.browse -row 0 -column 2 -sticky e
00473     grid columnconfigure $w.$p 1 -weight 1
00474 
00475     return {}
00476 }
00477 
00478 /*  NewWindow --
00479 */
00480 /* 
00481 */
00482 /*  Create another toplevel window
00483 */
00484 /* 
00485 */
00486 /*  Arguments:
00487 */
00488 /*  None
00489 */
00490 /* 
00491 */
00492 /*  Results:
00493 */
00494 /*  Tk toplevel created and initialised
00495 */
00496 
00497 ret  NewWindow () {
00498     global counter
00499 
00500     Init [toplevel .top[Incr counter]]
00501 
00502     return {}
00503 }
00504 
00505 /*  Compile --
00506 */
00507 /* 
00508 */
00509 /*  Manage loading the stylesheet
00510 */
00511 /* 
00512 */
00513 /*  Arguments:
00514 */
00515 /*  win toplevel window
00516 */
00517 /* 
00518 */
00519 /*  Results:
00520 */
00521 /*  Compiles stylesheet, adds widgets for parameters
00522 */
00523 
00524 ret  Compile (type win) {
00525     global stylesheets
00526     upvar \#0 State$win state
00527 
00528     set w [expr {$win == "." ? {} : $win}]
00529 
00530     Log clear $win
00531     catch {unset state(stylesheetLoaded)}
00532 
00533     Feedback $win [mc {Loading stylesheet document}]
00534     if {[catch {LoadDoc $win ssheet [mc stylesheet]} ssheetdoc]} {
00535     puts stderr "Compile: unable to load stylesheet due to \"$ssheetdoc\""
00536     return {}
00537     }
00538 
00539     Feedback $win [mc {Compiling stylesheet}]
00540     set time(precompile) [clock clicks -milliseconds]
00541     if {[catch {XSLTCompile $win $ssheetdoc} ssheet]} {
00542     Log add $win $ssheet
00543     Feedback $win [mc {Compiling stylesheet failed}]
00544     after 2000 [list Feedback $win {}]
00545     return {}
00546     }
00547     set time(compile) [clock clicks -milliseconds]
00548     Log timing $win "Compiling stylesheet took [expr $time(compile) - $time(precompile)]ms\n"
00549 
00550     set state(ssheet_cmd) $ssheet
00551     set stylesheets($ssheet) $win
00552 
00553     $ssheet configure -messagecommand [list messages $win]
00554 
00555     PopulateParams $win
00556 
00557     set state(stylesheetLoaded) $state(ssheet:mtime)
00558 
00559     Feedback $win [mc {Loading stylesheet completed}]
00560     after 2000 [list Feedback $win {}]
00561 
00562     return {}
00563 }
00564 
00565 /*  XSLTCompile --
00566 */
00567 /* 
00568 */
00569 /*  Stub for compilation of the stylesheet
00570 */
00571 /* 
00572 */
00573 /*  Arguments:
00574 */
00575 /*  win toplevel window
00576 */
00577 /*  doc DOM document token of stylesheet to compile
00578 */
00579 /* 
00580 */
00581 /*  Results:
00582 */
00583 /*  Returns stylesheet command or error message
00584 */
00585 
00586 ret  XSLTCompile (type win , type doc) {
00587     return [::xslt::compile $doc]
00588 }
00589 
00590 /*  PopulateParams --
00591 */
00592 /* 
00593 */
00594 /*  Add widgets for stylesheet parameters
00595 */
00596 /* 
00597 */
00598 /*  Arguments:
00599 */
00600 /*  win toplevel window
00601 */
00602 /* 
00603 */
00604 /*  Results:
00605 */
00606 /*  Widgets added for each stylesheet parameter
00607 */
00608 
00609 ret  PopulateParams win (
00610     type upvar \#0 , type State$, type win , type state
00611     , type upvar \#0 , type Parameters$, type win , type params
00612 
00613     , type set , type w [, type expr , optional $win === "." =? { : $, type win)]
00614     set t $w.parameters.t
00615 
00616     ShowParameters $win
00617 
00618     $t configure -state normal
00619 
00620     foreach child [winfo children $w.parameters.t] {
00621     destroy $child
00622     }
00623     $t delete 1.0 end
00624 
00625      state = (parameters) {}
00626 
00627      parameters =  [$state(ssheet_cmd) get parameters]
00628     if {[llength $parameters] == 0} {
00629     HideParameters $win
00630     }
00631 
00632     foreach parameter [lsort $parameters] {
00633     foreach {name ns select} $parameter break
00634 
00635     /*  Bug workaround: Variables cannot be resolved when passed
00636 */
00637     /*  in as parameters, so do not attempt to set a default
00638 */
00639     /*  value that computes using a variable reference.
00640 */
00641     if {[string first \$ $select] >= 0} {
00642          select =  {}
00643     }
00644 
00645     /*  Workaround #2: XPath select expressions may need to be
00646 */
00647     /*  resolved against the base URI of the stylesheet that
00648 */
00649     /*  defines the parameter.
00650 */
00651     if {![regexp {^("|').*("|')$} $select]} {
00652          select =  {}
00653     }
00654 
00655     if {[string first . $name] >= 0} {
00656          splitname =  [split $name .]
00657          head =  [lindex $splitname 0]
00658         if {[winfo exists $t.menu$head]} {
00659         if {[winfo class $t.menu$head] != "Menubutton"} {
00660             Log add $win "Unable to add parameter entry for \"$name\""
00661             continue
00662         }
00663         } else {
00664         menubutton $t.menu$head -text $head -menu $t.menu$head.menu
00665         menu $t.menu$head.menu -tearoff 0
00666         $t window create end -window $t.menu$head
00667         $t insert end \n
00668         $t insert end \t\t
00669         entry $t.menu${head}_value -width 50
00670         bindtags $t.menu${head}_value "[bindtags $t.menu${head}_value] parameter"
00671         $t window create end -window $t.menu${head}_value
00672         $t insert end \n
00673         }
00674          root =  .menu
00675         foreach step [lrange $splitname 1 [expr [llength $splitname] - 2]] {
00676         if {![winfo exists $t.menu$head${root}_$step]} {
00677             $t.menu$head$root insert 0 cascade -label $step \
00678             -menu $t.menu$head${root}_$step
00679             menu $t.menu$head${root}_$step -tearoff 0
00680         }
00681         append root _$step
00682         }
00683          tail =  [lindex $splitname end]
00684          m =  $t.menu$head$root
00685         $m insert 0 command -label $tail -command [list NestedParameter $win $name $ns $t.menu$head $t.menu$head$root $t.menu${head}_value]
00686          params = ($name) $select
00687         lappend state(parameters) [list $name $ns [list  ::Parameters = ${win}($name)]]
00688     } else {
00689         entry $t.value$name -width 50
00690         if {[string length $name] > 15} {
00691         $t insert end $name\n\t\t
00692         } else {
00693         $t insert end \t$name\t
00694         }
00695         $t.value$name insert 0 $select
00696         $t window create end -window $t.value$name -stretch yes -align center
00697         $t insert end \n
00698 
00699         lappend state(parameters) [list $name $ns [list $t.value$name get]]
00700     }
00701     }
00702 
00703     $t configure -state disabled
00704 
00705     return {}
00706 }
00707 
00708 ret  ShowParameters (type win) {
00709     upvar \#0 State$win state
00710 
00711     set w [expr {$win == "." ? {} : $win}]
00712 
00713     grid $w.parameters -row 6 -column 0 -sticky news
00714 
00715     return {}
00716 }
00717 
00718 ret  HideParameters (type win) {
00719     upvar \#0 State$win state
00720 
00721     set w [expr {$win == "." ? {} : $win}]
00722 
00723     grid forget $w.parameters
00724 
00725     return {}
00726 }
00727 
00728 /*  NestedParameter --
00729 */
00730 /* 
00731 */
00732 /*  Displays parameter value for a "nested" parameter.
00733 */
00734 /* 
00735 */
00736 /*  Arguments:
00737 */
00738 /*  win toplevel window
00739 */
00740 /*  name    parameter name
00741 */
00742 /*  ns  parameter's XML Namespace
00743 */
00744 /*  mb  menu button for this parameter group
00745 */
00746 /*  menu    menu widget for this parameter
00747 */
00748 /*  entry   entry widget to display parameter select value
00749 */
00750 /* 
00751 */
00752 /*  Results:
00753 */
00754 /*  Widget display changed
00755 */
00756 
00757 ret  NestedParameter (type win , type name , type ns , type mb , type menu , type entry) {
00758     upvar \#0 State$win state
00759     upvar \#0 Parameters$win select
00760 
00761     set w [expr {$win == "." ? {} : $win}]
00762 
00763     set t $w.parameters.t
00764     $t configure -state normal
00765 
00766     set tags [$t tag ranges $mb]
00767     foreach {start end} $tags {
00768     $t delete $start $end
00769     }
00770 
00771     $t insert [list $mb + 1 chars] \t$name $mb
00772 
00773     $entry delete 0 end
00774     $entry insert 0 $select($name)
00775 
00776     bind parameter <Key> [list ChangeParameter $win $name $entry]
00777 
00778     $t configure -state disabled
00779     return {}
00780 }
00781 
00782 /*  ChangeParameter --
00783 */
00784 /* 
00785 */
00786 /*  Keep track of parameter values
00787 */
00788 /* 
00789 */
00790 /*  Arguments:
00791 */
00792 /*  win toplevel window
00793 */
00794 /*  name    parameter name
00795 */
00796 /*  entry   entry widget containing value
00797 */
00798 /* 
00799 */
00800 /*  Results:
00801 */
00802 /*  State variable updated
00803 */
00804 
00805 ret  ChangeParameter (type win , type name , type entry) {
00806     upvar \#0 State$win state
00807     upvar \#0 Parameters$win select
00808 
00809     set w [expr {$win == "." ? {} : $win}]
00810 
00811     set select($name) [$entry get]
00812 
00813     return {}
00814 }
00815 
00816 /*  Transform --
00817 */
00818 /* 
00819 */
00820 /*  Perform XSL transformation and display report
00821 */
00822 /* 
00823 */
00824 /*  Arguments:
00825 */
00826 /*  win toplevel window
00827 */
00828 /* 
00829 */
00830 /*  Results:
00831 */
00832 /*  Documents read into memory, parsed, transformed and report displayed
00833 */
00834 
00835 ret  Transform win (
00836     type upvar \#0 , type State$, type win , type state
00837 
00838     , type set , type w [, type expr , optional $win === "." =? { : $, type win)]
00839 
00840     Log clear $win
00841 
00842     if {![info exists state(stylesheetLoaded)]} {
00843     tk_messageBox -parent $win -message [mc "Stylesheet has not been 
00844     return {}
00845     }
00846 
00847      time = (start) [clock clicks -milliseconds]
00848 
00849     Feedback $win [mc {Loading source document}]
00850     if {[catch {LoadDoc $win src [mc source]} srcdoc]} {
00851     return {}
00852     }
00853     if {![info exists state(ssheet_cmd)] || \
00854     [string equal $state(ssheet_cmd) {}] || \
00855         $state(stylesheetLoaded) < [LastModTime $state(ssheet)]} {
00856     Compile $win
00857     }
00858 
00859      parameters =  {}
00860     foreach parameter $state(parameters) {
00861     foreach {name ns entry} $parameter break
00862      value =  [eval $entry]
00863     if {[string length $value]} {
00864         lappend parameters $name $value
00865     }
00866     }
00867 
00868     $state(ssheet_cmd) configure -resulturi [$w.result.urlentry get]
00869     if {$state(profile)} {
00870     if {[catch {open $state(profilefilename) w} profilech]} {
00871         tk_messageBox -icon error -type ok -parent $win -message "Unable to write profiling data to \"$state(profilefilename)\" due to \"$profilech\""
00872         return {}
00873     }
00874     $state(ssheet_cmd) configure -profilechannel $profilech
00875     }
00876 
00877     Feedback $win [mc {Perform transformation}]
00878     if {[catch {eval $state(ssheet_cmd) transform [list $srcdoc] $parameters} resultdoc]} {
00879     catch {close $profilech}
00880     Log add $win $resultdoc
00881     Feedback $win [mc {Transformation failed}]
00882     after 2000 [list Feedback $win {}]
00883     return {}
00884     }
00885     catch {close $profilech}
00886      time = (xform) [clock clicks -milliseconds]
00887     Log timing $win "Transformation took [expr $time(xform) - $time(start)]ms\n"
00888 
00889     /*  When the stylesheet's method is NULL, the type of the result document
00890 */
00891     /*  determines the default output method.
00892 */
00893      method =  [$state(ssheet_cmd) cget -ret ]
00894     switch -glob -- $method,[dom::node cget $resultdoc -nodeType] (
00895     ,type HTMLdocument , optional 
00896         =set method =html
00897     
00898     ,* , optional 
00899         =set method =xml
00900     
00901     )
00902 
00903     if {[string length $state(result)]} {
00904 
00905      fname =  {}
00906      state = (result) [$w.result.urlentry get]
00907     if {[catch {uri::split $state(result)} spliturl]} {
00908         /*  Treat as a pathname
00909 */
00910          fname =  $state(result)
00911          state = (result) file:///$state(result)
00912     } else {
00913         array  urlarray =  $spliturl
00914         switch -- $urlarray(scheme) {
00915         http {
00916             tk_messageBox -message "Saving to a http URL is not yet supported" -parent $win -type ok -icon warning
00917             Log add $win [Serialize $win $resultdoc -ret  [$state(ssheet_cmd) cget -method]]
00918         }
00919         file (
00920             type set , type fname $, type urlarray(, type path)
00921         )
00922         default {
00923             tk_messageBox -message "Saving to a \"$urlarray(scheme)\" type URL is not supported" -parent $win -type ok -icon warning
00924             Log add $win [Serialize $win $resultdoc -method [$state(ssheet_cmd) cget -method]]
00925         }
00926         }
00927     }
00928 
00929     if {[string length $fname] && [catch {open $fname w} ch]} {
00930         Log add $win $ch
00931         Feedback $win [mc {Unable to save result}]
00932         after 2000 [list Feedback $win {}]
00933         return {}
00934     }
00935     fconfigure $ch -encoding utf-8
00936     puts $ch [Serialize $win $resultdoc -ret  $method -indent [$state(ssheet_cmd) cget -indent]]
00937     close $ch
00938     } else (
00939     type Log , type add $, type win [, type Serialize $, type win $, type resultdoc -, type method $, type method -, type indent [$, type state(, type ssheet_, type cmd) , type cget -, type indent]]
00940     )
00941     set time(finish) [clock clicks -milliseconds]
00942     Log timing $win "saving result took [expr $time(finish) - $time(xform)]ms\n"
00943     Log timing $win "total time for processing: [expr $time(finish) - $time(start)]ms\n"
00944 
00945     Feedback $win [mc {Processing completed}]
00946     after 2000 [list Feedback $win {}]
00947 
00948     return {}
00949 }
00950 
00951 /*  Serialize --
00952 */
00953 /* 
00954 */
00955 /*  Stub for serializing DOM document
00956 */
00957 /* 
00958 */
00959 /*  Arguments:
00960 */
00961 /*  win toplevel window
00962 */
00963 /*  doc DOM document
00964 */
00965 /*  args    additional arguments
00966 */
00967 /* 
00968 */
00969 /*  Results:
00970 */
00971 /*  Document text
00972 */
00973 
00974 ret  Serialize (type win , type doc , type args) {
00975     return [eval dom::serialize [list $doc] $args]
00976 }
00977 
00978 /*  messages --
00979 */
00980 /* 
00981 */
00982 /*  Display messages emitted by the stylesheet
00983 */
00984 /* 
00985 */
00986 /*  Arguments:
00987 */
00988 /*  win toplevel window
00989 */
00990 /*  args    messages
00991 */
00992 /* 
00993 */
00994 /*  Results:
00995 */
00996 /*  Updates message display
00997 */
00998 
00999 ret  messages (type win , type args) {
01000     upvar \#0 State$win state
01001 
01002     foreach msg $args {
01003     if {[catch {Log addMessage $win "$msg"} errmsg]} {
01004         puts stderr "messages: $args"
01005     }
01006     }
01007     update
01008 
01009     return {}
01010 }
01011 
01012 /*  LoadDoc --
01013 */
01014 /* 
01015 */
01016 /*  Load a document into an in-memory DOM tree
01017 */
01018 /* 
01019 */
01020 /*  Arguments:
01021 */
01022 /*  win toplevel window
01023 */
01024 /*  type    type of document
01025 */
01026 /*  label   display label
01027 */
01028 /* 
01029 */
01030 /*  Results:
01031 */
01032 /*  Returns DOM tree token
01033 */
01034 
01035 ret  LoadDoc (type win , type type , type label) {
01036     upvar \#0 State$win state
01037 
01038     set w [expr {$win == "." ? {} : $win}]
01039 
01040     set state($type) [$w.$type.urlentry get]
01041 
01042     if {![string length $state($type)]} {
01043     tk_messageBox -parent $win -type ok -icon error -message [mc "You haven't specified a $label document"]
01044     return -code error "unable to load $label document"
01045     }
01046 
01047     if {[catch {uri::split $state($type)} spliturl]} {
01048     # Try the URL as a pathname
01049     set fname $state($type)
01050     set state($type) file:///$state($type)
01051     array set urlarray {scheme file}
01052     } else {
01053     array set urlarray $spliturl
01054     switch -- $urlarray(scheme) {
01055         http {
01056         set fname $state($type)
01057         }
01058         file {
01059         set fname $urlarray(path)
01060         }
01061         default {
01062         tk_messageBox -message "\"$urlarray(scheme)\" type URLs are not supported" -parent $win -type ok -icon warning
01063         return -code error "unable to load $label document"
01064         }
01065     }
01066     }
01067 
01068     set time(start) [clock clicks -milliseconds]
01069 
01070     if {[catch {ReadAndParseXML $win $type $fname $state($type) time \
01071             -noent 1 -nonet $state(nonet)} doc]} {
01072     return
01073     }
01074 
01075     set state(${type}:mtime) 0
01076     # HTTP downloads will not have mtime set
01077     catch {set state(${type}:mtime) [file mtime $fname]}
01078     set state(${type}_doc) $doc
01079 
01080     # BUG WORKAROUND: store the source doc's directory
01081     set state(${type}_dir) {}
01082     catch {set state(${type}_dir) [file dirname $fname]}
01083 
01084     return $doc
01085 }
01086 
01087 /*  LastModTime --
01088 */
01089 
01090 ret  LastModTime (type uri) {
01091     if {[catch {uri::split $uri} spliturl]} {
01092     # Try the URL as a pathname
01093     set fname $uri
01094     } else {
01095     array set urlarray $spliturl
01096     switch -- $urlarray(scheme) {
01097         http {
01098         # Not yet supported
01099         return 0
01100         }
01101         file {
01102         set fname $urlarray(path)
01103         }
01104         default {
01105         return 0
01106         }
01107     }
01108     }
01109 
01110     return [file mtime $fname]
01111 }
01112 
01113 /*  ::xslt::security --
01114 */
01115 /* 
01116 */
01117 /*  Implement restrictions on stylesheet operations
01118 */
01119 /* 
01120 */
01121 /*  Arguments:
01122 */
01123 /*  name    name of requesting stylesheet
01124 */
01125 /*  op  requested operation
01126 */
01127 /*  value   additional info
01128 */
01129 /* 
01130 */
01131 /*  Results:
01132 */
01133 /*  Returns boolean
01134 */
01135 
01136 ret  ::xslt::security (type name , type op , type value) {
01137     global stylesheets
01138 
01139     upvar #0 State$stylesheets($name) state
01140 
01141     switch -- $op {
01142     readfile {
01143         return 1
01144     }
01145     writefile {
01146         if {$value == {}} {
01147         # This is the console
01148         return 1
01149         } elseif {!$state(nowrite)} {
01150         if {$state(writesubtree) != "None"} {
01151             set towrite [file split [file normalize $value]]
01152             set ok 1
01153             set split [file split $state(writesubtree)]
01154             for {set count 0} {$count < [llength $split]} {incr count} {
01155             if {[lindex $towrite $count] != [lindex $split $count]} {
01156                 set ok 0
01157             }
01158             }
01159             return $ok
01160         } else {
01161             return 1
01162         }
01163         } else {
01164         return 0
01165         }
01166     }
01167     createdirectory {
01168         return [expr !$state(nomkdir)]
01169     }
01170     readnetwork -
01171     writenetwork {
01172         if {$state(nonet) && \
01173             ([string match http://* $value] || \
01174              [string match ftp://* $value])} {
01175         return 0
01176         } else {
01177         return 1
01178         }
01179     }
01180     }
01181     # shouldn't be here
01182     return 0
01183 }
01184 
01185 /*  Image data - end of script
01186 */
01187 
01188 image create photo libxsltLogo -data {
01189 R0lGODlhtABEAPf/AP///wAAAP7+/vz8/AUKAjU1Mvv7+729vd7e3SwtKWJi
01190 XPb29pKTjpSVkUtMSoODfIuMiXFyb/T09La2sYmKhpmaldnZ2BscGtHRzdXV
01191 1fPz8yQmI9LS0c3NyeHh4ZydmWprZDs8OdnZ1UtSUubm5sXFweTk5P39/Q4O
01192 DcnJxfj4+FlaVTEyLsHBvL6+ufDw8BMWEnR1ckNFQtXV0YGCgPLy8rm5sQAE
01193 ACwwKu7u7qysqvL18SgqJnFycAACALm5rFFSTbKyprW1ruTl4q2tpTk5N0RL
01194 TKGhnaSkoezs7DtFRm9wbcrKyMHBudzc2icpJPr6+s7OzElKRuDg3mxuah4i
01195 HWVmZMnJwgIHAGpsaenp6FZYVn1+fOjo5rGxrhEWDmRlYrm6tcbGw8LCwMzM
01196 xfb49cXFvXp8eYSFgl1dWO3u7KmpoXh5djI1L7Gxqebm5GFiYHx9el1eXKam
01197 mu/x7qampcDAtOrq6hQYE3d4dWdoZYKDgaWlnXZ2dO7w7uzs6mlqaH+Afvv6
01198 +L29tnl7eKCgmvP18qqqpTY4NX19cV9gXebp6mJjYVpaWXJ0cQ4SDPX29KCg
01199 lVpcWr29sfPz8lpdXebo5oWHhOrs6UFDP5eYlFdXVSEjHqqqnff69ldaWcXF
01200 uVVVUXt7cFFSUOnr6Pn8+EZIRK6uoo6QjBgYFlBUU4eIhQoKCU5QTK6vq1FX
01201 Vezu6+js7dDQysjIvbq7uUFHSfHx8ba2qAsPCaeno/X19V1hYL6/vMfIxejq
01202 5z4/PAQHAQMDA0lPUC02NgwMC6GioOTm5AYLBCYrKNrb2dbZ2s3S1OLl4dPT
01203 zp2fnH19duzu7qKkoSAlIwYGBry8uS8wLICAdczMwvv8+fz7+G1ubAgMBuHm
01204 6d/j5vH08NfX1re3taOjnVNXV8/PxwIFALOzq8/Qz9jc3fj799PT09PW1J6e
01205 j+3w8fb6+szMyvP29v3+/MPEvmJlZdvf4MPEw6Sjm4iHgrO0ruDi36+vp29y
01206 cPv7+gIGApCQjQIIAICAgCH5BAEAAP8ALAAAAAC0AEQAAAj/AP8JFBjIkYNq
01207 wQIoXMiwocOHECNKnEixosWLGDM+DFbNgaNAA0MK5MJCo8mTKFOqXImSBReR
01208 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
01371 CAA7
01372 }
01373 image create photo tclLogo -data {
01374 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
01429 5V+g+JBhTvOaGyEIADs=
01430 }
01431 image create photo tkxsltret Logo -data (
01432 type R0lGODlh8AAPAfcAMf///84, type SB0kMDM6JGS4JCVZWVs3NzczMzNacJdOJitGR
01433 , type HsrKytujpNOVIJKSkpCQkJSUlBAODpiYmIyMjJaWloCAgI6Ojvfr0JycnJ6e
01434 , type noqKiqurq5qamqCgoMDAwIWFhaOjozMzM4iIiIKCgrCwsKWlpISEhKenp6mp
01435 , type qa2trcdqa7a2tq6urrOysrS0tOSiI7m4uH5+, type frEwMbq6usPDw25ubry8vHx7
01436 , type e76+, type vnp6esjIyNypLcXFxcTExHh4eHBwcOKYHHRzc8h8EiIiInV1deeqKnJy
01437 , type ctCPHO3Trevr67hHR+, type G1Ne3NlfTh4UFBQd+, type xMpxiDtWYIuXBPevCO92tMGBg
01438 , type YMqBFPHhVasSCerNRocRC/, type rx8dmjKffuXu/, type bUcuCFfbpq5URC3gRDLkSCNmt
01439 , type atakUsd6EfDw8OG2d8yGIem5NO7S0ubEQOm1MtqlKvHUSrJxce3VTOS1WuK5
01440 , type OE1NTbWKi5lpaqoYGeOdIGsQDPr04ezRSvTncsyGGO3TeOiyL/, type PlWFwODNWd
01441 , type SujKRJowMdOWPtHMxWhoaMh8EdfFqfDeUsqCFvTpXJJPTe/, type YTuO8OoBQC/, type Xn
01442 , type j9O5kMyFF/, type z48e3JQefGQeq+, type OOO9PMl+, type E+, type vQSM+, type MG9qmK9abI+, type jIQ+/, type NRMuD
01443 , type FU8wBnIIBe3US+, type WmPfTnWsl9Er6mheG3NqOBgYsHCMh7EdGTNOanJ76goO7L
01444 , type QnlmZtzT09igJzMgBeLXyJh2SObBYOO+, type PNGUKdCNHPPgwebBiKMNBMmAFKGR
01445 , type kerOR8ewsc6LL9zAl+, type S9OtObMuGzQ6EZGmRAC+, type fHQvDSSMqAE+, type bm5s+, type OMOXl
01446 5, type ePj4+, type Tk5OLi4uDg4OHh4d7e3t/, type f39vb293d3dzc3NefJ9ra2tnZ2djY2NfX
01447 19, type XV1dbW1tTU1NPT09LS0tHR0dDQ0HYVFaASC8p/, type E+, type fn59igKOnCwr5XV+, type Kz
01448 , type s+, type evLZkICezGPvDQRqQhIsqCILCgoMB+, type G3wlJciaXNXDwK19Iqh9QejIUJJ9
01449 , type emcaGsuZJ8+, type OJqQJCgAAACH5BAEAAAAALAAAAADwAA8BAAj/, type AAEIHEiwoMGD
01450 , type CBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX
01451 , type MGPKnEmzps2bOHPq3Mmzp8+, type fQIMKHaqwCdGjSEGmu2M0qdOnFIFhkQG1qlWG
01452 , type CeDducq168AEd6gCAOa17FMVvJSADZDArFug6xKog4elLpZ2d7AweMtXp9a6
01453 , type vO5i4SVjb8IEcFQkaNq3MUoVUxMowQKPscAEFwrKGMPrTmd1mB2LNqkOi7qC
01454 , type SsIWHBOmM692vDqr0DO6NkgZWFQMTIcbr26BTTwP9uya8GLbyDVqbQtgXd47
01455 , type eccMZICF+, type ODOsDsrSc49oWGFF+, type C1/4, type XTGZ66sIwvAEuQQAW84nk7y0jXvf7A
01456 , type tA0v3BmDZXtesgDYYZlAS2FXnFj2cRccZcwpdB5muCWwjgr7/, type WYQWHW1M9x2
01457 , type DDFgYYJXNaEhbGPQp9AaAEAGnXCeNVjQOq4JhgWA3lUHYlfpDDcYPHBkdtgd
01458 , type Gt6hhHuDuViQVDLmphADrGGxzo1XpYNXcZ09idAFeCmhCwPPGWlQaUC2thVC
01459 , type YIUxBjw+, type QgmVVK/, type F5pln6pho0DrpNAFWWFYCMOBXYQCW154AgFWenGo+, type xeWb
01460 , type bsbWGRwJKREYPASdR+, type Z7gXVG6GVYhHEHpIVaJeh1ir45hhLfESQDL8ylQ2Fn
01461 , type pU6XV5+, type xXf8Kx2BTpdmpodl1hiiQbsJDG2PpmJhaca0KhFaiWFimAmtC3srV
01462 , type BaveRVxs0p6p1aZGNTHrm3ckQJtBelAKJGUDNaHiHeoA6qxTa7w33GuIVucm
01463 , type h03whxejCeFmHS+, type nGRtYO/2, type u61VW1mkIL7X8NkUhmgpt6+, type Zge5kr2IcCeyUD
01464 , type cUDmNaJwMzbXma2aueYZbGOmhpe3Fb+1, type zrB19ZlhXfvFORmCBCVwsWBTwrPG
01465 , type BaV1hnLKfIGlYXV43dXOlHdQ2E6eAHBJF5VFAnBqi0A7RsuyLg+, type dIXFmPrkO
01466 , type HHTJK62umKVWnZdVv7UGkBqG0bbI8kFn73XW3UHfe3gVm/, type Zb6mj/, type LS1gbhYd
01467 , type WNbVMtrufvAwvTdf6fwrJNFUwo3dy/, type gCAA+, type lly7+, type FhxDt8Ubra+9, type PGVgSTPw
01468 , type rUBKcLapDIoxUKfmZvHXJ2NZkfwv5BlnnoDB8rIoZGiwV6WCpmNUTqBwQ7uc
01469 , type ZJwE2dmeDMqP2LsMoEkIcvA+6, type eemQfriNbTW7Wh6dkJrSJaxm+, type cjKgPa2OOU
01470 , type gGtGcpkk3bwQLp/, type ezccFhxJ/, type uYYXkChqH0+, type gg5dLKaFoU1JCa2Q0Opgp4XQM
01471 0, type UM64HAqRSlJgDp5n2coRov4uKwt6+, type jby3TksvWpSyHpYEB7OITBm+, type iBV2NC
01472 , type jcHCQLMyCac17WBWXmRwwhYe5X11odh0//, type QVwHJBBjAwEwzx4ABBHybFUbDJ
01473 , type XM0CVpAmyMB70oJNEu+, type gOCcKZQONeJMoQhACJzihAAWoQQ1iEIMJOMAXDiCB
01474 , type HA0QizoCYA0MoIv07qKpzuRGil7cCQn+8, type Q9VYIeQiEykIhe5SHJURzCOO9r4
01475 , type AtmTDTiBkAK4jigSGQEBCCACjAxlIgUghqEVZ4Z30AI9hkBGM6JRjWx0owM2
01476 , type IEcS0LGOSaCkSAygSFF4TwCIzEObeBEIURrzHwJozb+, type KM5gwhGGTx4zmP4Yw
01477 , type hA3oMiMkuGQiCVA0VSByHwjrzD4KcEYzltEJ1KQmKBdJgEDUD3S7yhQwpXnM
01478 , type WFzTIkkIASNVIf+, type YeXITPhragEBpWctYGOCgsTCEQg+6, type AQdMgI10GZfBxhWb
01479 , type dqyTnosswD0pEosYEGCRQ2hEpigTA0zaBT4xaChB52jLWxoiCbFIgkLXkIQk
01480 , type XABs77xLYMaWCoc+, type FBZqRCM5naDPUNpzoxEZJCNT2ojB2WEChNzHxnjFC33E
01481 , type UaC13MBBSVDHhMYUpoaIaULbNbaxwcYAhlgDWg16UITGwgGhrAFSIWIAbSqy
01482 , type Bg4wgC9ENYEJDAGZgNEiL+, type DhgFmqlARaneNBX4rLmsL0sWs4z8G+, type Z4A1eJWt
01483 , type bTUAVDmJSGvOtSE1YGQIEOqKix3NDg69JDeVSRwlFNaNcqRlYrm62Jj/, type hrWm
01484 , type YgWbvG4XpK7WMbMMveg/, type IqDNCHyWIRsoaiKHMIE62tIXLiNsXwuAyQV2hhCy
01485 , type nMBAV2rLWHQ3oY41BAPUIabQJUlTvq1jWLf6V0RGYALrNMBxFULdRcYgpgg1
01486 , type wHnwgtq+, type lhSR0AtDAR6a3Yb6gruZTahCU3EHVeTQbSMjGswIkdBb/, type vagyiXk
01487 , type BLTphPkihAQZJmQ1xcpWEowLC270byILwEZ9tFGWhd3uHBN70FTAQVPcitFI
01488 , type x9bcsHZ1vXYlJF4ROQEPG+, type S/, type iuwwbn9LAgXWxQ5wdGgMlBuCNbLxxYWN8UAR
01489 , type awA56sN70wocJAWTOJq+1, type Md1DO2KLYnIXBpZ/, type yCxqK8iJ0DTx8LUAMB4kwyi
01490 , type TGA5/, type wOWV+5, type rllU6UDjYIcyj29cd+, type sS6W8r00V3dLCKdMMv2xuDNAkmCcBFJ
01491 , type Asde1qB2IJprG/, type pQNq5YjVbuK4w3oF07tCnR6LPdYGRAR5mG9cy2TsIGFBmC
01492 , type wv7XuJh2xab/, type EQIS0PSrjDUopVBMav/, type GoL3/, type cAKgYwljOyiwohhLVOg6EwYV
01493 , type MACyj370S5NAAmgP1427JuSl35zuRRqgpu/+, type Kn5DnSVXzNK/, type a6RyDFAd6AmE
01494 , type sWjQCZyBeFUdhSYbpsiu6RoMwUtOstoBav6HfI0MV5DWurGPZTg8xDdQVbOx
01495 , type BnaNwL5hqY8CEEKLmf9SlMoRlkMV+, type MIQTTC4p2s67jP7+, type R9trDQhQ4DpUMZb
01496 3, type mC9cCwGOkuffjziEVjjGuGRw+, type pkG2nTgg4c6ngBgysUt1eX6cKTcPMaoFvS
01497 , type RzVyxCcNiwl8l+, type Zd3WqXBfraUqtxxY2gx9E0Nra8jI3bQ2rp1cdt56/, type SPAlI
01498 , type JiSls9zeDmNaqcZ0Qht9awCtEp0ERt/3, type s6MqyZTzNnS5CkstG39QcUPazuNu
01499 , type t4iz7NDOYlogIT7mOdUoS7a7XY2EyEP4gvS9EQ5tU0/, type dvGL3XmfH2toQrlDk
01500 , type EEjvALu6GdOxwKgxhyBtNsKiEeGT0QJvmMT6EUIfkHdFVrvM+, type b3PPNzm/, type of/
01501 , type oLO8TgfoRLPOZ30sc076wyKWxi1FKMJ9r6eW2DUEQCXjsOkZgU56Mg+, type iQA6q
01502 , type AGGEs2iNoA/, type oZlgIZksyF1O9lwQGEGLsV1j1NQQ5EQvhp3waKEoRkE5lVACe
01503 9, type RGiZ1AkqFk1kHobqEgRQAACQAAEQFRnhEaSl3Nsp3feF25B9meqlmKItG42
01504 , type EXgpGIT854MdcVFO0FYMR4IG1VD7VgAhkIFCGIXulWQ76EZyNnE14WcREAha
01505 , type kAde6IUCEAhh6Elk2EnDJYXSFHYbgXj/, type EH9oNla/1, type VUQOAEniIZ26F4+, type NX7r
01506 , type ZHg1UXHIpApjEACCOIiEGACBaIiFmIiHOAaMyIiC/8, type EafeJMqvBRIrZGBQBt
01507 , type Q6CGGqFcNeBW6uVbuJZeSWBZiNVXsDBUQ9B/, type dyhNIVCFD4VImhgTyWdSjViL
01508 , type g1GLuJiLhsiIAYAFgfiLg8iLiNiLk6ZwABBniXR8GuGHEZB2onhrEJhxdhZu
01509 , type saAHvodbpbhvRPWE+, type xeEA1aFiCRXNiFpWqA8fWIwnOFH1GIXdjEG0dGOdcEf
01510 7, type OiIvhgYlBgCo0hiSSBpPMcRSZBI92VhoLhkoihWx+, type ZYD/, type hpvtVd7/, type daV9aE
01511 5, type DRU2xh+, type LyZochaCNFFU++, type BMHMmR4VOObtORzhQ+, type iyaSJhmJKFkdZqIFRIZw
01512 , type uBRW/, type NgRftiGlpVetjVuuP8kb35nW141ii/, type laELHVUKZVWx3VVm2g0HWim30
01513 , type YsqFE+, type ukClogBlowlVQ5lWFQleVolVR5lVl5lV4Jklb5lR8pBogEDDnpkmsg
01514 , type Z0SYEdB2XwMZirhUkzo5jT35WLGwcMCldkSpUkV3lKpmbktJYJKGkTRBSBEg
01515 , type BoiZmOQgBou5mIrJmJCpmFFJDlPJmFRJmVQplVg5T/9, type gky6Jgaa3EUgWAs9I
01516 , type c5Y1jTLFk7h1jY2Vdo0nlI5HlEX3cH75iojEXBUJXzuXE4b5hb75m3kgBsEp
01517 , type nME5nMJ5nIhpnMNZnMmJnJxJYp/, type oW8pFAhthCInkAOC1d/, type Fml3K4mn5nlwjn
01518 , type Y3n/, type aUuIFVtE11C12UZBpnilRodExpvDFYaBkAdh6JsCQJ/4, type eZ9gOJ9fyJ95
01519 , type EAj86Z/, type A+, type YXPaZPpxYYcMXbq9Xe4hmt/, type R5dox3AK9VuGEJvct5eGBWN5aGoA
01520 , type KZgToFyxOBPtJYYkSob/, type N4aeJIZkSJ8oep8nCqAkGqMAmp+, type cZqDOuAHrlIka
01521 , type oWmI5AANamae13diNXNiNaGYpZfl+, type X5sh55t518T4GdDsH5ttE4alRNyZqJY
01522 , type KgCzkKVc2qVYqqJc2ll5mV9tJWl8iBFy5gS2xgBWJ3O39Z3h9YaMx1BbZUsE
01523 , type taSsRpsbOmWJZGVMiUg70W6dxIKE2oIsaKKHuqWedKiL/+, type qlXcqCiFQAYzqm
01524 , type EXemFsGGG5CaDPqg3+, type edOOma3uVdM/, type Z+, type kFeU2eVsbARt7xVoSCaOFeFpW8V2
01525 , type G2Fus+, type CCtmqrK+, type iChvpRBLCluXqruWqGteqCgzqoLihikzqmarmJiBQCbmpb
01526 4, type cZ34eZpSeiabaVVa6ek6MmkeVhqHCp4DxkDdkWdCSFTiOUAI0dGUKhIG5EE
01527 , type qvoPBNB/8, type QpMLbiCwfpJn4Sr+, type cqCnfSrt/, type qvlIhzyZqXymV+, type GDGLhLQBWfd7
01528 , type vrewGQetc9pl5FlL5TmbxOdxV2ZuLBZo0CaRT5iKdghsGtFwUghKJrtO/, type Zey
01529 , type hsmr8AqvAfsP2DqwCAVt5HoRdv9VAA8qXo/, type GAHA6pOLmmrTEVtz1eHqKqh83
01530 , type Zw85dqu4SJZ6sDe3tBs4BPE3sEOXoyGaVImEVps6rbj1gMl2YdyXrVkFeRnq
01531 , type l0t5ZX6meA/, type Zje6VitTUSq7EYjVQdrKUg3/2, type EcgItUGYiSVIR/, type nFVt6VjBhx
01532 , type UTjLppzaoL6HbOpFpxcqqg1ZlOl5ZWqUYd4aA3I2BDLIRu23XVsWW0MZC3b7
01533 , type Dwb7ERDYVknKlxcbmLBwdKeYRmhUTmZkTq2UTpMWh6CohHVkphjBhiQgc1x7
01534 , type jdEKVm0lqhJLsYbVl00art9KbOGqXLnZejEWR4ZFsRKLYZxFSDXLFXY1AQJp
01535 , type o7k7aRj/0, type ZYOynDhVb65ZnB1WrwYyq3JK7k1kLbhOmlVSHysVp5YxVUCJap3
01536 , type BW1F1BXb673pZQDLShEOIFwRsLBpBbzme2Z01FJctpdFiZ47mLRqBJhKFwMX
01537 , type Nb/, type Ri6f3+8, type CNZ25OIHpu0QSJxFUA7FvQRpgN4a5LxalJ8G2H+8, type IMl75dNnTm
01538 , type ibq0ibEfx0Z+, type VmUZ26w7OGja1VBKunlBO5PEBnnu9RYsPFyZKofQ6ZIRGJoO
01539 4, type QCYGGTvlnXS6n23hlYOHJvauq0ppsOSp0ZBdsEZ9o0a2pcyxlK2pJu3aVjN
01540 , type yheIl4mfOaSVhUuIJ7IMYW4RQEdt+, type cLXKK3fdmYzHKqNt1IR/3, type xvTeqtVlbB
01541 , type t/, type lxIaZqpBfGHUyeHaWCsoVkTesV7eYEwMCd+, type miQJICyVzsQSHxfChVxQwBW
01542 0, type sqghuzFdbqXpXpvY1y5SgdLiRQCTchJWPZai3y/8, type Ke04jdQSFalfCFpOJua
01543 , type cgqeuosQCCtiE2qu13m+5, type WvIC6W+, type xVuDerqhlTtydRiO73tX48fGnbt5rtB4
01544 , type T6uAGxBxa+, type kWarlWQzrP+, type fjMBAF4qtqJ4sZwl+, type u7XBvLNUyeskVLx8ukHofL
01545 , type qFYD+, type VwDwvWNR8mX5xxbXWa3KbVdA9wYduWjWVdh84db7nzP4de7W2d1JCu6
01546 , type wMumV7dVhuDGFItVRQdjTiq54DzOkf+, type qtAXgUO0XY5CXpOTZeKkHW8eb0aIB
01547 , type mk48yn33WHXVowIBhDVwl7+, type XzYZwfzRXczTHAGi10tXb0rXMrRO8wwnNp4Y5
01548 , type efIL04SGVXfKfVacUQS91nalwnxxUe8Gnn63nbGgXJJmmJ0Gjba2WIiVtWt6
01549 , type k6WrsHb6mjecpzD9zQkNaND2hMuF00Jc1itF2BkYA1dVgw4wnbVRxxgHdAdJ
01550 , type bsMWAZLqeTOcWbaEiQYHraON1RQbxsjbrTINziO3XHO2xhzMXXJUwIuEV+, type cK
01551 0, type dB2ym5Rx6tJjbf2VUgMs/, type v8e6Stv53lptnMeRd6wzGmoTHtvl+9, type rsy1avc2
01552 0, type PdrAFYtepH/, type yrnbBcf/, type oIyioczBTaQQaNN3Ob5W17sOnNSEVABXV8imq77Q
01553 , type DbltF66JXcai5HX0O5tbNltAGN843H4XxR12FQPB/, type Z3eHQF5/, type WhqRdJoRcNj
01554 , type h3amq7COl8iPp12k19Vl/, type NXiGkoDRr9D3MaJPOA4d1VDbHbbepvd8b+, type jaJcC
01555 , type rEih3aDYrNpdttLvB21O0Nx8zXnavaQd7mwPlcu5zEYoSGkpBtHsvNpP+2, type cF
01556 , type PWgvDb4Kkki+, type BVPebdLZKW5WjYQ0/, type Jp33Wl6udKypaRFV8uu7dUgvkbDdt3R
01557 , type zbmzRLHeBYWtN8Rlq10f3R1E3YbOlYNHGHN/, type V8jrhYTxN7FyBG2d/0, type jozw3n
01558 , type Erynas5vsETMzEV8Uh7RybVUUf7SEixnRVYfml3c5oe40Gi6o01LYitHSKdl
01559 , type YAzdFuvNFBzpMzjZ0EvEZi3nWT5cOc2teqpcWNgdOCpiNE6dfEfVo13fM2bf
01560 , type t85I7fVX6dTsrOTsrPSEZAS3qYdXOd3kD5zWKpiAqHuUpAdt5M0dKD4BDDrS
01561 , type L8WmKt14FUqngp1VKK63x+, type R1q3aenbsBviBaO/3, type fZEt8Bw4idx1tnVZnjJVW
01562 , type Z2ZQK+1, type dYWvoLS1Q6wrvolXOEB3gXSbWieQEHL6tlE7pSwwiQNhK+4, type ZucvST
01563 , type mXXwQwnkqy1QdDjt1DRNDr9IvSZLW93GiP+, type F4jdNm+, type yb8X1F5Qny7/, type Tktsx3
01564 , type TjEoVH6KZRze6rXpdjPtukIVkbHb9DAIg5Sd6wqYVcScdMB89TjvcTpvH+/, type e
01565 8, type sIXAXArbe/, type bb8rr1SOnvK64wYVFy40XukX/, type cKRG6a4oZ8hsH5KmTl4vhcze
01566 7, type NIe9kKfag7FpODNZcUHUtKd8UePbz14I4OJrZBX5Ga08nk/+, type dMU7WfEekOc
01567 , type gYOH8VnvitO1+, type CDih9xLY2W+8, type BuKakIVux+78, type g1P+, type ULodXHf+, type Z5PYEId+, type kQm
01568 , type toRNyyiPp0WP8/, type n9vuSk8qro+, type sc0fEsu+64, type opcrl1snhh3H0wKtNqnFusQZ9
01569 843, type spBiL0EoPu6r/, type r/, type LNPvxBaPGBL/, type fdWoVnu5S8fiPOb98Lb9bS23Gzucbl
01570 763, type fTMFnf8FlTGDPK934BvyRDxBDIvwjSLCAgwkOECpkOMHhQ4cxJsSgWHHi
01571 , type hCEFYwHg2NHjR5AhRY4kWdLkSZIbCk4gYYDES5gkNsyc6aDmBoY4Ge5ECDHi
01572 , type xYoUawitMdRoUaRCg06U+, type DBnQ5w0N8AcWPAgz54+, type fUqkyLRr1X9JUI4lW9bs
01573 , type WY4OVsqM+, type VKqTRI2N0yYaxNrQ4hdg+4, type dGqOoX6RG/, type e5tCnEnXbkO4sqc+, type TKj
01574 1, type cNaH+6, type NSDgGWLSZNW8mq5Igy7Y049JMrBAnYp5am1pWChhwYMFLCzvk/, type xnV
01575 , type tNSpLwsSrNEwa16gXrnuLTiE83HkydV+, type Do1b8c6odGlHBj48aF/, type BsAdvtzh7
01576 +, type ty6z3HH3P3voOTJlVnHgDVhaEEnyeXPN0uiYIyYuHGOrnkYq2qg+, type FIKNgIJ
01577 , type u8gw6G7Tzy0DPCuoBvSYEq6AEB4jKIIIKgwhhPvo8/, type DDkewjCD/, type GSNvvOYUW
01578 , type u+, type u3n6zjKzvtLEOvthNLbAymmcqDML2uJPSrPCCDnABEIokU8R8S3xrNJsR0
01579 , type uksyvSzL7rW/, type YpPNp9oUXHADlwxY7sGfArSIwyDLLM+, type BItOUz8EY9HMuRdOe
01580 3, type Eq9ivoarMC/, type DDzQqQRvGi+, type mBr8ckavghjPz0P/, type yQlBz0c0MuO+, type mxHSybUUA
01581 17, type uTwKTs7A7LPu1aENCWBP0HQhctAgu+, type hBCKoYACnKiwzBoYlbW+, type R6cSD7yn
01582 5, type KzORTurpNI17iziNE4VbcwtlgYNcImECcoj1DIgI4jFkCSqNeRabC+, type IoUwS
01583 , type ZvX2JEd5q2nJ06LTlcf1qsSTNcn6jKox0WBaFpiWDGh2N8osspC3avv1N4lY
01584 , type tj1UrG8LDulIiabSidklmUwNOB/, type rbE1dXzUdjlPwpFPs3dzknQpZLjcQ+, type D7W
01585 , type nHA2CWoB/, type jdcRGMw+, type GWPWK7h3dIQOo26MC09Ck8r9Ro2Tk//9, type LhLEmIhwZCR
01586 , type RxQOMB1jiWUNlWOpFtn/, type fc00DmaYZZ4pobjsUihVvFTrjihgMW2tR+9, type ySog0
01587 , type Y+, type XtkktllUW2ht0iYAoWpU4NYVqpU5ba6TJfLc8ArF9mOWFPgX5416Wxu1Q7
01588 , type iwlFEKqo+, type Os4NGXrrZfugiIItqjdhjAA2b+, type jTsLk8pwoOuDUCzc4lgdP9A/, type n
01589 , type ypYmDDvILd5zcqDZjndoZUMeXVnOCRqiTqPKm8CQNZx2mlpqi3/, type QeadRL8j1
01590 , type gmHnTTpJ/6, type vU9sd5NjBtmxO/, type CUd5W5KJ6LjjLiD0O/2, type y/, type p8hDKF+, type WpSTEPUf
01591 , type J4Z3/, type t6CEA57s9LeqHQCtsXlJUrXkZjZ1qOVhnTtfFIZGtxeMrz2xeJ9BQnB
01592 /2, type v8cipkjc55KFuDIebHP6OFcHRHIsgGBkjABykugbVjzc6olKl8QfApNLMR
01593 , type qF5itJaoUG7V200IKLabAgjRAIZYoiEcVJCpKGsCtYjB6PY1pBcyKglg6s8M
01594 , type J5OuAQUmWJT5WcbGRUGPFa1BRktW3Kg3PydQ6VRwa5+, type ymAgkurjEAVCAwgDu
01595 4, type QoAIimLjCrgeby3FZ25Zl3B2h1tmhQnN62vJVxSXwrreD84wiZ0daxj0v4R
01596 , type ArdsABJCGIAQ7lFKSBwjFOYZ5KIKOLND8ihiitxZpvI0Nh3ajC77+, type dT6orjG
01597 , type DQjRfk6bGpl4Exhj/, type sMBTOSkspKJpNzAopRCoGY1Sf8phHqsoZVqsgoCWbQa
01598 2, type zmulmKUEaceyTE0UnJZ7BOi86hFzH0VICkWGsL9nCY3EpxqCDSZABSs+, type c9q
01599 , type DkAQSNgmiLa4PdrRqYZEWeSVMLa2oMmlYw3agCsyV69L2rNa8RQMEu3pPAN4
01600 , type kmsbCAVATVpNMhTUQwc1T9iqA75aerBnPjNn9ySKRlB1SadufJ7pknCqisBC
01601 , type ehMgpj0NUZ4h2KWfJ2UqGfSg0vlAhkUKFY44zXZLMvIpUhtDpw8v2BL7ZXCE
01602 , type KVOZs4oygVORAGDvRJnTnsg/, type u8DiCExtKlTlI9VKleooNySnQ3nXPd/, type lRnjq
01603 , type bOYQ8UfWvjmrK3XLH8DwBzD/, type T8bAZqOk60nTwAS7IqebiATjdiAnsaXk0jSp
01604 , type Es2NJum2NmbUsdZKQgmrVbc64QtbZIXeCVNVA39WlqkXyCxnNvtF8HEHU77K
01605 , type Ie92KZcetuWCLjFE0TAqQuqxlrVHxRdFNtjCa6EMetndVwgSMoFQzFW3J0VD
01606 , type bzcDGcY1cK9inKnkEPSuXW4Np0Zj4gWbSzqe/, type q1v2p2W/, type Vg4hIvMT7r9gp6O
01607 , type IpLb8Z7UvJr5bamkNNwxulerO6ycab9KyeY2U6N9m221nng8h1hvCNodsP6U
01608 , type J5ECJJiuguDtgs3SzYsJiL0OzOpfI8rViYYqc8h6rmFLR+, type Br7TeQAJ6IMZ2A
01609 , type MgNY/, type wt6Sbgu/, type SpSAPGq2KRpaLGLx/, type KYAjj4bOvFYeR29zXbnK9EytXcjsU6
01610 , type QmKmjK39GvJDLHRk5imZu/, type CTCGWlzNTyWhklWH4WA2lJzsh5ZzpqOyNOMxe8
01611 , type H2LQjmn2V3//9, type TfpedchFqpBh5PAgH4lqi92vvNJEdAEPZvkMU4I7q8gfCXy
01612 7, type fCmpV2W+, type pbLxvw+, type lq20VVm1mkzqSVulidqFHssIYsQawALBnT5pIQga6pHw
01613 , type WcaeZS9ohYWxoMUXpxf82Arllt/8, type kVXO2a31rRkClgIEr4nZZSH/, type hhICYo/3
01614 2, type MgGCZmyfLvwNVtPvItoL33Jvh67s7ED5nZjpZZMJzCE0v9frVdz3+, type qEojhh
01615 2, type OmeMmbZ/, type RHUkbqBf84TVns0rC66ybQNggkQ7xnrbPsLW1D7l7XiKXCrKKzV
01616 , type yhKVPGMQgigznKnrfjgAyBTHAcV7r8W1cb1/52, type qXsFGJ0VUzbbW972uVpwBR
01617 , type sdDSFdYWUeF8CHSNuUmnyVQq15wjEb/, type dVWUk6JyA50QKs3CyOl40OkJ3hLxm
01618 , type ALYI3C/, type XJh2J0nnzThjzkqjjDd0yv/, type rVrymENGgdAFy/, type FF/, type j59cJ46q0Pzd7
01619 , type YdVOzGwX/, type e1ALvBuYLkBY3p3UjdJHUVKmu5phh6gpdyF1jlH6hl3mYxgZ5IZ
01620 /, type TTRkGG0x9DNH+, type SBLHJuz1bu99n/, type pYgXQlrFBPKTReZ7QP9OzVKmQRCmJwjC
01621 , type dZ6U8dX0nF2lJGHVx8l71n7fJXa72/, type Pna2jOpMkIAps+, type K7Jwv1ez6sYvZfqv
01622 , type OYAqIzvi4ySupsI0uTD3Mjccv68az8zof8m9bfM+, type JFMemkga+3, type OKE3IAiqAH
01623 , type vxuAq1s/, type a+, type o7q6OmPGO30xuu9pKQv5q+, type n/, type uqLuk/, type sZo1OeO1ACxB6FmDcosv
01624 , type QfEc+5, type MI6RmViDiGWqhA9xu945tAISiEmjs998gddsE4YrG3o1kfccMvwwo5
01625 , type yqM13KsWTOuXt5KofLK8AqEIPKIIBoyBhUswCsTBmhMYhFM9nks8SHo9Brm+
01626 6, type zs00qGe/, type yW7PSZku+, type zyPlF5OpEpIlM7N6WbjIwQgGPYQmpavy78p/, type aruXsB
01627 , type NhuatwnTkne5O2qLCSDqkhCKLg4zwe5TsxIqOt1zovK4nA3YF+, type SpkhPynAlw
01628 , type glOJAPSzOggUPR0UAgQgxOaLEd2ZDawArOQ6w51iJsNqQ92bLtwTQF4zhCcM
01629 , type pAggOBJoMs95kRiomkOphzT4wxwkpfYzPvYTgpR6ODAEFkTUKh6KpEZ0Ilzc
01630 , type gGsBuf3SxV8cQExkAKnJH2HsOJd4KwBjDUSBDwBAgvFqP/, type drP5oLtUJ0nHyR
01631 , type xSx5PQtTJ/, type VpLlxcop7SRUzcRV4swZBLGlDCN0/6, type JFZhFeyIx/8, type IMAQAuAC6
01632 , type SsX3E0Ro1DrP6CDiAid6Wxi4SCf+, type Sy1wxEXomcTtcsJMRMFrabs4nK6k6R/, type h
01633 , type cZ94/, type LVDiQBtAgBaULFolMZqfLjlwLnoI78wWzVWu7c0ZKaaVMKa3MXc6zAC
01634 , type VLMkkJ4aALrra7KdjJZu4QgmmEAKTMWhJMt8DLWjHMNBC7u3MLSpaC6MKsiX
01635 , type JLG6LLnGskpLa7vGYoAmCzd8Ip2iicivpB+, type C4QhBiDkIRL6/, type W0yPbEWQbD7Z
01636 , type cK9Oyb8boSQQzLCMekKs3L4mfMmElC410yB82Sk3WqGXU8ZDqYGN4Ag9KANA
01637 , type fD97dEzkg0BdEDwRQcqL08bbYEpOREP/56, type JLfbs0ytu+, type SuwXTCs6zpzJlJmf
01638 , type CTCzM1syt3KPEDiVAPoIKtjIaDzLgCrKmgsXnGuku5CUT8FM5gKr9sGWnjLO
01639 , type qszEfrPK20uCJKut3YCboZM1v1EZkpOJ64qFJkCCXSADZtBOs6TN2oQ/, type wQMA
01640 8, type GykQRs7jcsPzeQSqHSjvJRKfgPGcow8DXVCtouFZMI+, type Nlwyv0lHf3mfCDiG
01641 , type QrjB0Ws/, type BTBLQRyAtGS33GQ9SIqU8RBI9jHN+, type RTRkju6vHxPAXzCkGvJJPjQ
01642 , type aztIkSuxqUkHSbgHf1LRFy3QAp3AC8TN5msXh/, type EaW6EglRM3OmLJIW3CChXS
01643 7, type ns7HuVLdBRR/0, type NIpo+, type qUM90LDIwUC6czY78J8hMUADQHlzjE8Q4rgeVJLbQ
01644 , type UTuyUIbEy1+, type UPA4d0nRMTpShJzZcKzdtLfkEBgGFUqaSUkz9J2bA0444qIDT
01645 , type Rq5JkV4KHmYCq7SrSSGNz39BRyUTUprszEMtU5QBi3rSL6RrQwOAAxedU7M8
01646 , type ghaVUgUAqCpNUE9NxKDhGMz5Ks20o6kUTW17w+, type xKx6sEGEZlVBHFNLDYm8My
01647 , type U2oxgARghj6yVLJMRX5IxV/, type NVICiBU7lCOoKuMqUwp9jIgtCFrokMUZVMuI8
01648 , type Tmf1Pr6criCzy8jbDSewnyWklg24ByGYqzQQ19kcAH44grny1WAdgP8WVYCK
01649 , type vcE75dSDuorK1L91Wi5OytDIe9Ze9FdZDVPizJ/, type kpBaPktbs2gA0kAEEoKZT
01650 , type ulRoJFcIhFiIrViLpdhzvcH449TmgxP54sajoShSnb0O48v23LZWzR8AsDT3
01651 , type ZCL1pJa2OywWSqK3IwGEPaXFVFFgtVhfpVid7VmLPVvHTL9hFVr+4, type R4Fuakz
01652 , type NMIirKM4nFpKJDHpItGo3EVMiwUyHVJMY6EasBYDYAJ8uIc0WFiwvVmzRICz
01653 5, type VlfdVyfPdc6rSZBALV17QiDcL0KuxGO05wiVCKrtVvoWdmjs9YyTV38cbRm
01654 , type vRZBiQH5dAAhgIK5QgCOXFGz3AGH5dnHVQD/, type ybXdnv1a9wu8zPWI5iPPrmoL
01655 , type olnW9qk95nTP4iTHqAxTWrPap82u160HBEjcB8Rdhx0ABChX8O3dx3XcseVI
01656 7, type qQmZgjazDUI8aCLMaM2/, type ks0uq1b6O03E3RDTKTeulXZltyuezHFI0hf790B
01657 2, type z1g8B1f3XVcBdiBYD2CmWXM7bw6Hizej3DfLf0dzEzDJDhaZo1Vu5289oxW
01658 , type mgxTzlTZu8VQQygAAoCEAZBA3C1XBEBgx63hI9Bd3zXbtN3O4xsA77RgjhiI
01659 , type g+, type AlCwPBuJEJFULVqe1fvMzEqHU7a+1, type LYNxW690uQ7ADfihX3YLANFhgAwbf
01660 , type HbjhA+7, type ZGR7bjvza/2, type dEUCC+, type YOMJAXnaJVvkSrrk0SU2Om6dSjoewLZSU16T
01661 , type ImZY2C0egDQ4YASA4Bmm4TKW3ExFX78rBIdbY48ooGjJsplISfSMG9A8TgJM
01662 , type WfYk2SHVy5BD0/, type zZgAHAA8ADvOGtTX5wYAPOYdvV3TC+, type YV8d4OBlZO6EUUgO
01663 , type CfArkwgYApdLu0FFyJiEVg5VTxS20CpG4Uo0ADsoBFNW3O6tzUP2XVY+5, type Bn2
01664 , type XQh+4, type QHGVHv8O34ggxjN5Y6IhQl4JkTxZQdYor4UU7z8Wzf8UQzt1+, type xi2qhE
01665 , type RweggkKgJtsdNtGDQH4oZAR4gVcG40PeWW6m2Paz3WpKg3AWZ5EwmolwAv/, type V
01666 , type BJIhMCLJUucTzt9I3S5pFc09Ttl5zrbkJIFT+, type OOEndnb7TtBNuBDNmCWdmAE
01667 , type cGDw1dmDXsw0AOefdGjNYJaJLhNSS7J2TlKFrN4LVVOjtgNBVmkeJqUudmkE
01668 , type IIUBcGoDnmXfzVmI5WYhKAP21enjaBDq7OndIACEo4t+, type hWc3tV6UWU5lVmZD
01669 , type OAXw5QfG7WZ7/, type GenjukdcGmYTmDbnemr/, type lUEKAMkoIWn4mo1SYINiMF4/, type Omj
01670 , type o7UopkTJS1P8ESjdxWqyDOiYtuuobuAcrmoEfmHb9dUyuE3CNpjYnYBW2ckM
01671 , type GWsu4cVrfbuV/, type WgmgoNCOALxTcVTQljZVABS2AH/, type KsDru77rQ05gCNzrQh4A
01672 , type OUACzB3tAYoFB5DowoyApeNRe10yVhVRA0jgyfYj4f1afliCF7jrAehtu/5, type t
01673 , type v9Zr4S6DwVbugjIaBqSQr3SCLFOMTI685DQAfCgERZbS90MA8X6Cu+7, type t3wZu
01674 , type CPZd8d3rAUADdVVvKzOEUSxMJwPHSzNqA0hMgbZlaGTqJwhvKQhwDpdY8z2C
01675 , type F3hYgdpqBXcxiI4B547HIYBvyVIrJsIHa67pqF6CJ6ACAP/, type vALfmax7gHWSC
01676 9, type C5xPCWBZHRwJ6ACQQDv7X5hhI3q395w3q5x3l4CmIZgiYXYHfxxIC9el/, type AL
01677 , type wQkSKCiEVjbwVNxmJq/, type x/, type yd4ASpYAhp/, type giUAcB1HaSF45CznagbcF2awcQW4
01678 4, type ZregSfYcCl4AjZ/, type ckCHZQiucGpKAyyfc8KO3VqwcZd2UfTlcxpXc0qXAkr/
01679 7, type RneAUAegDJIbkUvcRungvDObkylAktP8yx4glTfgSXIgt8GY4784U9Xbj1A
01680 , type A0enAjGXUja39FT/, type c0tXc0z/, type YvFCg0SfdcIGAwWwcf7OdbPs81b38x1wdSlY
01681 9, type fHm8QM39iwvhjbnbVIvUARQ81639F+, type n8Rz/2, type rXFdsImgzQP8INW9T6XAnjP
01682 , type Ang/9, type XJPWFlHd67WBWB39IOmglSX9yzIgiWY9z+, type vd073dHwnbD+, type gAjYHcAjs
01683 , type dv/, type ejoOAl/, type Y4kAKJ928oV+, type gjWL6EV289kINBJwVcf+, type EXrm1VD/, type hWl/, type hWF3hA
01684 53, type doFO2OH20kWHP/, type XgIxz2Y+, type jwMqiIMn0Hkv8IIl4HlAr3GOJPGYh2Q9gHc2
01685 , type b/, type gB/, type uxUfAIvyIKol3iq5/, type k1X4IWJaVzP/, type pc1oVUH3r/, type juqcneyA94I4OPuJ
01686 , type l3eh7+1, type UJF6uV/, type h/, type H/, type gnKO5sLmR/, type P3u8zwK8//, type NtT8VCQPi3F2c0GPhoH/, type So
01687 , type pmEqMHu8X3x/, type b3yzLL3AJ2x5h/, type eBx3UqB+, type gjMHvF13yJ//, type cv9ufIJ2yvF/, type iB
01688 , type l3LznlkEiIOf1/, type yfv4KJ/3, type wINPrQL14kEHh5r/, type wZBl//, type gN6BK7gCL+, type j91Xd9
01689 0, type jfwMph9rgaDP+, type jz218CijVgVjRgReh96Zd+, type V4+, type DAm1o48/, type cqLd9wg/, type jGs70
01690 6, type Q//, type oJ/7700, type DmM9+, type SEYDi3d1vYdqL7bdYgj/6, type c8Chs/, type ZAXgC9HdoRdD7Z5eC
01691 , type PwAIBQgEDkQg5coVPgkXZsnihcqANAMQoAFg8SLGjBo3cuzo8SPIkCJHkixp
01692 8, type mRJPw0bPnkiZQeCIzsm7liCcOHNK1moPJmIYAAYlEKHEi1q9CjSk5GyLMki
01693 , type hSUCBDB3KNiRRaFCnA3jwPSZ9CvYsGLHGkXzJo4UtFx37JDJ1qoihFmvePGS
01694 , type Lw7En/, type zI8u3r929SMHGyoHX6/5, type JtVKn55N7k4yUOZJhHEAgCbPky5swXL3hZ
01695 , type mfbJVKlSs+, type Bk/, type HjtgB1UNLNu7RopYbUNQ7+92, type lihIshcByog8/, type o38OAe9ajU
01696 , type bfUtYrhY5So6vcRnReHSp/+, type OpJtwFuRvF5dGWDfOksRyqJMvf1mwbrXaazJO
01697 , type mFWRouwxo5uvbx+, type sruuQD7+, type lYjPrXFfEVUxittx3IIJFnbZfHKRoZ1N7pe2m
01698 , type AH0JWnghSEgsGNkOfyzBFim2LRTgG1LtMB6GKaqYkS4IpSdFSzGy11hOCE1V
01699 , type xoo5rshHc9fF2NISVMQFYHvZ1aQjkheCcUV6cfwIWlNxjVjjW7okeeV9LboI
01700 , type GVMtSf+, type xBJhDCticlFd8uEOFWKo5HV1tQvaEk09kFyZCiixRDJgNnbnDBWv6
01701 , type KR0S3p2WxRNLFMpUUzp9KcUfpLzw6Asd7qLHn5X+5, type h1dg1k12BJSOIroH39A
01702 +, type igeO4BGqaWpahYJpo/, type l2VCojy4x6gtAPArEl0ugqCqvgC3ZKqdZvDArpMQC
01703 , type YWutQIAJZp+9, type OsuXHjfV1dBTX976AqO04gGEh8QG9Sy4Yi05mBTllruEqI9W
01704 , type G2q6j8b6KBLhyvsVGG9QO6uH7/7, type xxpfp4urhqEBYOS/, type BRsWR77voqtsvpEBc
01705 , type ETAQuxQ8MVH5KHytudgyXOuwUshhy8fxUjzySWAQmyy2sf5pwaiotsZaDMkx
01706 , type CwWGHKSQsjK/7, type b6g8sVAyPzzzIq80fMLCOXcLtBJm1TvxTvbtDEQpCg99UhL
01707 8, type luuqCu/, type C4TIVHvtkdUsu5tuMV1/, type ffZGOoF5q9S6oIo23Bsp8u4LZsd9N0YX
01708 , type ECv1mgEBADs=
01709 )
01710 
01711 # Filter out the process serial number on Mac OS X
01712 if {[set idx [lsearch -glob $argv "-psn*"]] >= 0} {
01713      argv =  [lreplace $argv $idx $idx]
01714 }
01715 array  args =  {
01716     -inline 1
01717 }
01718 array  args =  $argv
01719 
01720 if {$args(-inline)} {
01721     Init .
01722 }
01723 

Generated on 21 Sep 2010 for Gui by  doxygen 1.6.1