q-lang-cvs Mailing List for Q - Equational Programming Language (Page 23)
                
                Brought to you by:
                
                    agraef
                    
                
            
            
        
        
        
    You can subscribe to this list here.
| 2003 | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec (106) | 
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 | Jan (219) | Feb (152) | Mar | Apr (92) | May (45) | Jun (3) | Jul | Aug (3) | Sep (111) | Oct (52) | Nov | Dec | 
| 2005 | Jan | Feb (1) | Mar (1) | Apr (2) | May (23) | Jun (46) | Jul (158) | Aug (22) | Sep | Oct (26) | Nov (11) | Dec (49) | 
| 2006 | Jan (57) | Feb (196) | Mar (10) | Apr (41) | May (149) | Jun (308) | Jul (11) | Aug (25) | Sep (15) | Oct | Nov | Dec (15) | 
| 2007 | Jan | Feb | Mar | Apr (15) | May (204) | Jun (112) | Jul (7) | Aug (16) | Sep (134) | Oct (313) | Nov (262) | Dec (83) | 
| 2008 | Jan (81) | Feb (83) | Mar (21) | Apr | May | Jun (1) | Jul (2) | Aug (6) | Sep | Oct | Nov | Dec (2) | 
| 2015 | Jan | Feb | Mar | Apr | May (2) | Jun | Jul | Aug | Sep | Oct | Nov | Dec | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 06:15:46
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv17302 Modified Files: qcalc.q Log Message: comment change Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -d -r1.49 -r1.50 *** qcalc.q 30 Oct 2007 18:21:48 -0000 1.49 --- qcalc.q 31 Oct 2007 06:15:43 -0000 1.50 *************** *** 19,23 **** - CSV format import and export (use Eddie Rucker's CSV routines). ! - Improve the print output. - Maybe add a second interpreter running interactively in the log pane. --- 19,24 ---- - CSV format import and export (use Eddie Rucker's CSV routines). ! - Improve the print output (configurable margins, alignment and html markup ! for headers and footers). - Maybe add a second interpreter running interactively in the log pane. | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 06:04:05
      
     | 
| Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv15317/examples Modified Files: example.qcalc Added Files: simpson.q Log Message: added Eddie Rucker's linear regression and normal distribution examples Index: example.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/example.qcalc,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** example.qcalc 30 Oct 2007 18:40:42 -0000 1.1 --- example.qcalc 31 Oct 2007 06:04:01 -0000 1.2 *************** *** 1,6 **** ! // qcalc 1.0, created Fri Oct 26 14:15:15 2007 ! // [((0,1),"Erathosthenes' prime sieve"),((0,3),"Playing with sums etc."),((0,4),"Squares"),((0,5),"Cubes"),((1,3),"1"),((1,4),"= square D2"),((1,5),"= cube D2"),((2,0),"Q stream of *all* primes"),((2,1),"= primes"),((2,3),"2"),((2,4),"= square D3"),((2,5),"= cube D3"),((3,0),"The first 50 primes"),((3,1),"= list $ take 50 B3"),((3,3),"3"),((3,4),"= square D4"),((3,5),"= cube D4"),((4,0),"The 111th prime"),((4,1),"= B3!111"),((4,3),"4"),((4,4),"= square D5"),((4,5),"= cube D5"),((5,0),"Product of the first 50"),((5,1),"= prd B4"),((5,3),"5"),((5,4),"= square D6"),((5,5),"= cube D6"),((6,1),"(This is a HUGE number, make the column bigger to see it all.)"),((6,3),"6"),((6,4),"= square D7"),((6,5),"= cube D7"),((7,3),"7"),((7,4),"= square D8"),((7,5),"= cube D8"),((8,1),"Some calculations with rationals:"),((8,3),"8"),((8,4),"= square D9"),((8,5),"= cube D9"),((9,0),"Op1"),((9,1),"= 5%3"),((9,3),"9"),((9,4),"= square D10"),((9,5),"= cube D10"),((10,0),"Op2"),((10,1),"= 81%53"),((10,3),"10"),((10,4),"= square D11"),((10,5),"= cube D11"),((11,0),"Sum"),((11,1),"= B10+B11"),((12,0),"Product"),((12,1),"= B10*B11"),((12,2),"Sum"),((12,3),"= sum D2:D11"),((12,4),"= sum E2:E11"),((12,5),"= sum F2:F11"),((13,0),"Quotient"),((13,1),"= B10 % B11"),((13,2),"Product"),((13,3),"= prd D2:D11"),((13,4),"= prd E2:E11"),((13,5),"= prd F2:F11"),((14,3),"Note that the range D2:D11"),((15,1),"Complex numbers:"),((15,3),"becomes a Q list:"),((16,0),"2^(1/i)"),((16,1),"= 2^(1/i)"),((16,3),"= $D$2:$D$11"),((17,0),"log2 of that"),((17,1),"= lg B17"),((18,0),"abs, arg of the log2"),((18,1),"= (abs B18,arg B18)"),((19,3),"Geometric series:"),((20,1),"Complex rationals:"),((20,2),"Enter Q:"),((20,3),"= 1/3"),((21,1),"= (1+:2)%(3+:4)"),((21,2),"Series:"),((21,3),"= geom_series D21"),((22,1),"= square (5+:-5%18)"),((22,2),"1"),((22,3),"= D$22!C23"),((23,2),"2"),((23,3),"= D$22!C24"),((24,2),"3"),((24,3),"= D$22!C25"),((25,2),"4"),((25,3),"= D$22!C26"),((26,2),"5"),((26,3),"= D$22!C27"),((27,2),"6"),((27,3),"= D$22!C28"),((28,2),"7"),((28,3),"= D$22!C29"),((29,2),"8"),((29,3),"= D$22!C30"),((30,2),"9"),((30,3),"= D$22!C31"),((31,2),"10"),((31,3),"= D$22!C32"),((32,2),"11"),((32,3),"= D$22!C33"),((33,2),"12"),((33,3),"= D$22!C34"),((34,2),"13"),((34,3),"= D$22!C35"),((35,2),"14"),((35,3),"= D$22!C36"),((36,2),"15"),((36,3),"= D$22!C37")] // [] ! // [(0,155),(1,404),(2,57),(3,174)] // Start of script. Please do not remove this line. --- 1,6 ---- ! // qcalc 1.0, created Wed Oct 31 06:34:14 2007 ! // [((0,1),"*** Erathosthenes' prime sieve ***"),((2,0),"Q stream of *all* primes"),((2,1),"= primes"),((3,0),"The first 50 primes"),((3,1),"= list $ take 50 B3"),((4,0),"The 111th prime"),((4,1),"= B3!111"),((5,0),"Product of the first 50"),((5,1),"= prd B4"),((6,1),"(This is a HUGE number, make the column bigger to see it all.)"),((8,1),"*** Linear Regression (Eddie Rucker) ***"),((9,0),"1"),((9,1),"3"),((10,0),"2"),((10,1),"5"),((11,0),"3"),((11,1),"7"),((12,0),"4"),((12,1),"9"),((13,0),"5"),((13,1),"10"),((14,0),"6"),((14,1),"13"),((15,0),"Least squares:"),((15,1),"= regress A10:A15 B10:B15"),((16,0),"Enter X:"),((16,1),"7"),((17,0),"Value at X:"),((17,1),"= B16 B17"),((19,1),"*** Normal Distribution (Eddie Rucker) ***"),((20,0),"Enter A:"),((20,1),"-1"),((21,0),"Enter B:"),((21,1),"1"),((22,0),"P(X>=A):"),((22,1),"= normal_above B21"),((23,0),"P(X<=B):"),((23,1),"= normal_below B22"),((24,0),"P(A<=X<=B):"),((24,1),"= normal B21 B22"),((26,1),"*** Playing with sums etc. ***"),((26,2),"Squares"),((26,3),"Cubes"),((27,1),"1"),((27,2),"= square B28"),((27,3),"= cube B28"),((28,1),"2"),((28,2),"= square B29"),((28,3),"= cube B29"),((29,1),"3"),((29,2),"= square B30"),((29,3),"= cube B30"),((30,1),"4"),((30,2),"= square B31"),((30,3),"= cube B31"),((31,1),"5"),((31,2),"= square B32"),((31,3),"= cube B32"),((32,1),"6"),((32,2),"= square B33"),((32,3),"= cube B33"),((33,1),"7"),((33,2),"= square B34"),((33,3),"= cube B34"),((34,1),"8"),((34,2),"= square B35"),((34,3),"= cube B35"),((35,1),"9"),((35,2),"= square B36"),((35,3),"= cube B36"),((36,1),"10"),((36,2),"= square B37"),((36,3),"= cube B37"),((38,0),"Sum"),((38,1),"= sum B28:B37"),((38,2),"= sum C28:C37"),((38,3),"= sum D28:D37"),((39,0),"Product"),((39,1),"= prd B28:B37"),((39,2),"= prd C28:C37"),((39,3),"= prd D28:D37"),((40,1),"Note that the range B28:B37 becomes a Q list:"),((41,1),"= B28:B37"),((44,1),"*** Geometric series ***"),((45,0),"Enter Q:"),((45,1),"= 1/3"),((46,0),"Series:"),((46,1),"= geom_series B46"),((47,0),"1"),((47,1),"= B$47!A48"),((48,0),"2"),((48,1),"= B$47!A49"),((49,0),"3"),((49,1),"= B$47!A50"),((50,0),"4"),((50,1),"= B$47!A51"),((51,0),"5"),((51,1),"= B$47!A52"),((52,0),"6"),((52,1),"= B$47!A53"),((53,0),"7"),((53,1),"= B$47!A54"),((54,0),"8"),((54,1),"= B$47!A55"),((55,0),"9"),((55,1),"= B$47!A56"),((56,0),"10"),((56,1),"= B$47!A57"),((57,0),"11"),((57,1),"= B$47!A58"),((58,0),"12"),((58,1),"= B$47!A59"),((59,0),"13"),((59,1),"= B$47!A60"),((60,0),"14"),((60,1),"= B$47!A61"),((61,0),"15"),((61,1),"= B$47!A62"),((63,1),"Some calculations with rationals:"),((64,0),"Op1"),((64,1),"= 5%3"),((65,0),"Op2"),((65,1),"= 81%53"),((66,0),"Sum"),((66,1),"= B65+B66"),((67,0),"Product"),((67,1),"= B65*B66"),((68,0),"Quotient"),((68,1),"= B65 % B66"),((70,1),"Complex numbers:"),((71,0),"2^(1/i)"),((71,1),"= 2^(1/i)"),((72,0),"log2 of that"),((72,1),"= lg B72"),((73,0),"abs, arg of the log2"),((73,1),"= (abs B73,arg B73)"),((75,1),"Complex rationals:"),((76,1),"= (1+:2)%(3+:4)"),((77,1),"= square (5+:-5%18)")] // [] ! // [(0,139),(1,308),(2,120),(3,163),(4,188)] // Start of script. Please do not remove this line. *************** *** 19,20 **** --- 19,48 ---- primes = sieve {2..}; sieve {N|Ns} = {N|sieve {M:M in Ns,M mod N<>0}}; + + /* Simple regression (Eddie Rucker). */ + + regress X Y = \Z . A + B * Z + where B = (sxy X Y) / (sxy X X), + A = (mean Y) - B * (mean X); + + mean L = sum L / #L; + sxy X Y = (sum $ zipwith (*) X Y) - (sum X * sum Y) / #X; + + /* Normal distribution (Eddie Rucker). + + normal A B => probability of (A<=X<=B) + e.g.: normal (-1) 1 => 0.682688 + + normal_below A => probability of (X<=A) + normal_above A => probability of (X>=A) */ + + import simpson; + + normal = integrate normal_f; + normal_f X = 0.3989422804014327 * exp (-0.5*X*X); + + normal_below A = 0.5 + integrate normal_f 0.0 A if A > 0; + = 0.5 - integrate normal_f 0.0 A if A < 0; + = 0.5 otherwise; + + normal_above A = 1.0 - normal_below A; --- NEW FILE: simpson.q --- /* Numeric integration using the Recursive Simpson's Rule, by Eddie Rucker. */ public integrate F A B; private rsr F A FA B FB Err Sum; integrate F A B = rsr F A (F A) B (F B) 0.0005 ((abs (M-A)/6.0) * (FA + 4.0*(F M) + FB)) where FA = F A, FB = F B, M = 0.5 * (A+B); rsr F A FA B FB Err Sum where S = A+B, M = 0.5*S, C = abs (M-A)/6.0, FM = F M, L = C * (FA + 4.0*F (0.5*(A+M)) + FM), R = C * (FM + 4.0*F (0.5*(M+B)) + FB), C2 = L+R-Sum: = L + R + C2/15.0 if abs C2 <= 15.0*Err; = (rsr F A FA M FM (0.5*Err) L) + (rsr F M FM B FB (0.5*Err) R); | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 06:04:05
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv15317 Modified Files: Makefile Log Message: added Eddie Rucker's linear regression and normal distribution examples Index: Makefile =================================================================== RCS file: /cvsroot/q-lang/qcalc/Makefile,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Makefile 30 Oct 2007 18:48:51 -0000 1.8 --- Makefile 31 Oct 2007 06:04:01 -0000 1.9 *************** *** 16,20 **** PIXMAPS = pixmaps/qcalc.png pixmaps/flag.png pixmaps/1rightarrow.png ! DISTFILES = Makefile COPYING README $(app).desktop $(app).q *.ui $(PIXMAPS) doc/Makefile doc/*.html doc/*.png doc/*.xml examples/*.qcalc all: --- 16,20 ---- PIXMAPS = pixmaps/qcalc.png pixmaps/flag.png pixmaps/1rightarrow.png ! DISTFILES = Makefile COPYING README $(app).desktop $(app).q *.ui $(PIXMAPS) doc/Makefile doc/*.html doc/*.png doc/*.xml examples/*.qcalc examples/*.q all: *************** *** 36,40 **** cp COPYING README *.ui "$(DESTDIR)$(appdir)" cp doc/*.html doc/*.png "$(DESTDIR)$(appdir)/doc" ! cp examples/*.qcalc "$(DESTDIR)$(appdir)/examples" cp $(PIXMAPS) "$(DESTDIR)$(appdir)/pixmaps" sed -e 's?#! -p/usr/local?#! -p$(prefix)?g' < "$(app).q" > "$(DESTDIR)$(appdir)/$(app).q" --- 36,40 ---- cp COPYING README *.ui "$(DESTDIR)$(appdir)" cp doc/*.html doc/*.png "$(DESTDIR)$(appdir)/doc" ! cp examples/*.qcalc examples/*.q "$(DESTDIR)$(appdir)/examples" cp $(PIXMAPS) "$(DESTDIR)$(appdir)/pixmaps" sed -e 's?#! -p/usr/local?#! -p$(prefix)?g' < "$(app).q" > "$(DESTDIR)$(appdir)/$(app).q" | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 19:58:24
      
     | 
| Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv1991/doc Modified Files: qcalc.xml Log Message: documentation fixes Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** qcalc.xml 30 Oct 2007 18:21:48 -0000 1.1 --- qcalc.xml 30 Oct 2007 19:58:20 -0000 1.2 *************** *** 7,15 **** <author> ! <firstname>Albert</firstname><surname>Gräf</surname> <affiliation><address><email>ag...@mu...</email></address></affiliation> </author> ! <copyright><year>2007</year><holder>Albert Gräf</holder></copyright> <date>2007-10-30</date> --- 7,15 ---- <author> ! <firstname>Albert</firstname><surname>Graef</surname> <affiliation><address><email>ag...@mu...</email></address></affiliation> </author> ! <copyright><year>2007</year><holder>Albert Graef</holder></copyright> <date>2007-10-30</date> *************** *** 160,164 **** <section id="view"><title>View Options</title> <para> ! There are a few options which allow you to change the visual appearance of spreadsheet and script display: </para> <itemizedlist> --- 160,164 ---- <section id="view"><title>View Options</title> <para> ! There are a few options which allow you to change the visual appearance of the spreadsheet and script display: </para> <itemizedlist> *************** *** 168,179 **** </para> </listitem> <listitem> <para> ! You can also change the font of the spreadsheet or the text editor by selecting the corresponding tab and invoking the <guimenuitem>Choose font</guimenuitem> operation. Fixed width fonts seem to work best for most purposes, although YMMV. Also note that the fonts are also used for printing, see below. </para> </listitem> <listitem> <para> ! The <guimenuitem>Zoom in</guimenuitem> and <guimenuitem>Zoom out</guimenuitem> (<keycap>Ctrl-+</keycap> and <keycap>Ctrl--</keycap>) commands allow you to quickly change the font size on either the sheet or the script page, and, as already mentioned, the <guimenuitem>Syntax highlighting</guimenuitem> toggle (<keycap>Ctrl-H</keycap>) switches syntax highlighting in the script editor on and off. These settings are global and are remembered across invocations of the program. </para> </listitem> --- 168,184 ---- </para> </listitem> + </itemizedlist> + <para> + The following settings are global and are remembered across invocations of the program: + </para> + <itemizedlist> <listitem> <para> ! You can change the font of the spreadsheet or the text editor by selecting the corresponding tab and invoking the <guimenuitem>Choose font</guimenuitem> operation. Fixed width fonts seem to work best for most purposes, although YMMV. The configured fonts are also used for printing, see below. </para> </listitem> <listitem> <para> ! The <guimenuitem>Zoom in</guimenuitem> and <guimenuitem>Zoom out</guimenuitem> (<keycap>Ctrl-+</keycap> and <keycap>Ctrl--</keycap>) commands allow you to quickly change the font size on either the sheet or the script page, and, as already mentioned, the <guimenuitem>Syntax highlighting</guimenuitem> toggle (<keycap>Ctrl-H</keycap>) switches syntax highlighting in the script editor on and off. </para> </listitem> *************** *** 209,213 **** <chapter id="credits"><title>Credits and License</title> <para> ! QCalc is Copyright © 2007 Albert Gräf and is distributed under the <ulink url="gplv2.html">GNU General Public License</ulink>. This document is Copyright © 2007 Albert Gräf. The documentation is licensed under the terms of the <ulink url="fdl.html">GNU Free Documentation License</ulink>. </para> <para> --- 214,218 ---- <chapter id="credits"><title>Credits and License</title> <para> ! QCalc is Copyright (c) 2007 Albert Graef and is distributed under the <ulink url="gplv2.html">GNU General Public License</ulink>. This document is Copyright (c) 2007 Albert Graef. The documentation is licensed under the terms of the <ulink url="fdl.html">GNU Free Documentation License</ulink>. </para> <para> | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 18:49:10
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv3595 Modified Files: Makefile Added Files: qcalc.desktop Log Message: add desktop file --- NEW FILE: qcalc.desktop --- [Desktop Entry] Comment= Comment[en_US]= Encoding=UTF-8 Exec=qcalc GenericName= GenericName[en_US]= Icon=/usr/local/share/q/apps/qcalc/pixmaps/qcalc.png MimeType= Name=QCalc Name[en_US]=QCalc Path= StartupNotify=true Terminal=false TerminalOptions= Type=Application X-DCOP-ServiceType= X-KDE-SubstituteUID=false X-KDE-Username= Index: Makefile =================================================================== RCS file: /cvsroot/q-lang/qcalc/Makefile,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Makefile 30 Oct 2007 18:40:42 -0000 1.7 --- Makefile 30 Oct 2007 18:48:51 -0000 1.8 *************** *** 16,20 **** PIXMAPS = pixmaps/qcalc.png pixmaps/flag.png pixmaps/1rightarrow.png ! DISTFILES = Makefile COPYING README $(app).q *.ui $(PIXMAPS) doc/Makefile doc/*.html doc/*.png doc/*.xml examples/*.qcalc all: --- 16,20 ---- PIXMAPS = pixmaps/qcalc.png pixmaps/flag.png pixmaps/1rightarrow.png ! DISTFILES = Makefile COPYING README $(app).desktop $(app).q *.ui $(PIXMAPS) doc/Makefile doc/*.html doc/*.png doc/*.xml examples/*.qcalc all: *************** *** 39,42 **** --- 39,43 ---- cp $(PIXMAPS) "$(DESTDIR)$(appdir)/pixmaps" sed -e 's?#! -p/usr/local?#! -p$(prefix)?g' < "$(app).q" > "$(DESTDIR)$(appdir)/$(app).q" + sed -e 's?/usr/local?$(prefix)?g' < "$(app).desktop" > "$(DESTDIR)$(appdir)/$(app).desktop" chmod a+x "$(DESTDIR)$(appdir)/$(app).q" test -d "$(DESTDIR)$(bindir)" || mkdir "$(DESTDIR)$(bindir)" | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 18:41:00
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv32229 Modified Files: Makefile Removed Files: example.qcalc Log Message: move examples to separate subdirectory, install examples in application directory --- example.qcalc DELETED --- Index: Makefile =================================================================== RCS file: /cvsroot/q-lang/qcalc/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Makefile 30 Oct 2007 18:21:48 -0000 1.6 --- Makefile 30 Oct 2007 18:40:42 -0000 1.7 *************** *** 16,20 **** PIXMAPS = pixmaps/qcalc.png pixmaps/flag.png pixmaps/1rightarrow.png ! DISTFILES = Makefile COPYING README $(app).q *.ui example.qcalc $(PIXMAPS) doc/Makefile doc/*.html doc/*.png doc/*.xml all: --- 16,20 ---- PIXMAPS = pixmaps/qcalc.png pixmaps/flag.png pixmaps/1rightarrow.png ! DISTFILES = Makefile COPYING README $(app).q *.ui $(PIXMAPS) doc/Makefile doc/*.html doc/*.png doc/*.xml examples/*.qcalc all: *************** *** 32,38 **** --- 32,40 ---- test -d "$(DESTDIR)$(appdir)" || mkdir -p "$(DESTDIR)$(appdir)" test -d "$(DESTDIR)$(appdir)/doc" || mkdir -p "$(DESTDIR)$(appdir)/doc" + test -d "$(DESTDIR)$(appdir)/examples" || mkdir -p "$(DESTDIR)$(appdir)/examples" test -d "$(DESTDIR)$(appdir)/pixmaps" || mkdir -p "$(DESTDIR)$(appdir)/pixmaps" cp COPYING README *.ui "$(DESTDIR)$(appdir)" cp doc/*.html doc/*.png "$(DESTDIR)$(appdir)/doc" + cp examples/*.qcalc "$(DESTDIR)$(appdir)/examples" cp $(PIXMAPS) "$(DESTDIR)$(appdir)/pixmaps" sed -e 's?#! -p/usr/local?#! -p$(prefix)?g' < "$(app).q" > "$(DESTDIR)$(appdir)/$(app).q" *************** *** 47,51 **** dist: rm -rf $(dist) ! mkdir $(dist) && mkdir $(dist)/doc && mkdir $(dist)/pixmaps for x in $(DISTFILES); do ln -sf $$PWD/$$x $(dist)/$$x; done rm -f $(dist).tar.gz --- 49,53 ---- dist: rm -rf $(dist) ! mkdir $(dist) && mkdir $(dist)/doc && mkdir $(dist)/examples && mkdir $(dist)/pixmaps for x in $(DISTFILES); do ln -sf $$PWD/$$x $(dist)/$$x; done rm -f $(dist).tar.gz | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 18:41:00
      
     | 
| Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv32229/examples Added Files: example.qcalc Log Message: move examples to separate subdirectory, install examples in application directory --- NEW FILE: example.qcalc --- // qcalc 1.0, created Fri Oct 26 14:15:15 2007 // [((0,1),"Erathosthenes' prime sieve"),((0,3),"Playing with sums etc."),((0,4),"Squares"),((0,5),"Cubes"),((1,3),"1"),((1,4),"= square D2"),((1,5),"= cube D2"),((2,0),"Q stream of *all* primes"),((2,1),"= primes"),((2,3),"2"),((2,4),"= square D3"),((2,5),"= cube D3"),((3,0),"The first 50 primes"),((3,1),"= list $ take 50 B3"),((3,3),"3"),((3,4),"= square D4"),((3,5),"= cube D4"),((4,0),"The 111th prime"),((4,1),"= B3!111"),((4,3),"4"),((4,4),"= square D5"),((4,5),"= cube D5"),((5,0),"Product of the first 50"),((5,1),"= prd B4"),((5,3),"5"),((5,4),"= square D6"),((5,5),"= cube D6"),((6,1),"(This is a HUGE number, make the column bigger to see it all.)"),((6,3),"6"),((6,4),"= square D7"),((6,5),"= cube D7"),((7,3),"7"),((7,4),"= square D8"),((7,5),"= cube D8"),((8,1),"Some calculations with rationals:"),((8,3),"8"),((8,4),"= square D9"),((8,5),"= cube D9"),((9,0),"Op1"),((9,1),"= 5%3"),((9,3),"9"),((9,4),"= square D10"),((9,5),"= cube D10"),((10,0),"Op2"),((10,1),"= 81%53"),((10,3),"10"),((10,4),"= square D11"),((10,5),"= cube D11"),((11,0),"Sum"),((11,1),"= B10+B11"),((12,0),"Product"),((12,1),"= B10*B11"),((12,2),"Sum"),((12,3),"= sum D2:D11"),((12,4),"= sum E2:E11"),((12,5),"= sum F2:F11"),((13,0),"Quotient"),((13,1),"= B10 % B11"),((13,2),"Product"),((13,3),"= prd D2:D11"),((13,4),"= prd E2:E11"),((13,5),"= prd F2:F11"),((14,3),"Note that the range D2:D11"),((15,1),"Complex numbers:"),((15,3),"becomes a Q list:"),((16,0),"2^(1/i)"),((16,1),"= 2^(1/i)"),((16,3),"= $D$2:$D$11"),((17,0),"log2 of that"),((17,1),"= lg B17"),((18,0),"abs, arg of the log2"),((18,1),"= (abs B18,arg B18)"),((19,3),"Geometric series:"),((20,1),"Complex rationals:"),((20,2),"Enter Q:"),((20,3),"= 1/3"),((21,1),"= (1+:2)%(3+:4)"),((21,2),"Series:"),((21,3),"= geom_series D21"),((22,1),"= square (5+:-5%18)"),((22,2),"1"),((22,3),"= D$22!C23"),((23,2),"2"),((23,3),"= D$22!C24"),((24,2),"3"),((24,3),"= D$22!C25"),((25,2),"4"),((25,3),"= D$22!C26"),((26,2),"5"),((26,3),"= D$22!C27"),((27,2),"6"),((27,3),"= D$22!C28"),((28,2),"7"),((28,3),"= D$22!C29"),((29,2),"8"),((29,3),"= D$22!C30"),((30,2),"9"),((30,3),"= D$22!C31"),((31,2),"10"),((31,3),"= D$22!C32"),((32,2),"11"),((32,3),"= D$22!C33"),((33,2),"12"),((33,3),"= D$22!C34"),((34,2),"13"),((34,3),"= D$22!C35"),((35,2),"14"),((35,3),"= D$22!C36"),((36,2),"15"),((36,3),"= D$22!C37")] // [] // [(0,155),(1,404),(2,57),(3,174)] // Start of script. Please do not remove this line. /* Two little helper functions to compute squares and cubes. */ square X = X*X; cube X = X*X*X; /* You can do nice things in Q that won't work in Excel, like computing with infinite series. Try, e.g., geom_series (1/3)!N for different values of N. */ geom_series Q = scanl (+) 0 $ iterate (*Q) 1; /* Another stream (infinite list) example: Erathosthenes' prime sieve. */ primes = sieve {2..}; sieve {N|Ns} = {N|sieve {M:M in Ns,M mod N<>0}}; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 18:39:26
      
     | 
| Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv31701/examples Log Message: Directory /cvsroot/q-lang/qcalc/examples added to the repository | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 18:31:26
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv28076 Modified Files: README Log Message: update README Index: README =================================================================== RCS file: /cvsroot/q-lang/qcalc/README,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** README 30 Oct 2007 00:42:59 -0000 1.11 --- README 30 Oct 2007 18:31:16 -0000 1.12 *************** *** 16,27 **** different way. But if you've ever worked with MS Excel or its OpenOffice and KOffice equivalents, you should feel right at home. The only major difference ! is that each cell may hold either text, a number *or* any Q value. ! ! Also note that there's only one spreadsheet (of fixed size) and one script per ! file in the current implementation. But the provided 128x26 cells should be ! plenty for most purposes, considering that each cell may hold an arbitrarily ! complex Q value. And the user script may import other source files as ! necessary, using Q's import/include statements, so the single script page ! doesn't really limit what you can do. IMPLEMENTATION NOTE: This program uses forkpty to implement the pipe to the Q --- 16,21 ---- different way. But if you've ever worked with MS Excel or its OpenOffice and KOffice equivalents, you should feel right at home. The only major difference ! is that each cell may hold either text, a number *or* any Q value, and that ! the full Q interpreter is used to evaluate your formulas. IMPLEMENTATION NOTE: This program uses forkpty to implement the pipe to the Q *************** *** 43,59 **** ----- ! As usual, real documentation still needs to be written, so here are some basic ! instructions which will hopefully help you to get started using QCalc. Please ! also have a look at the spreadsheet in example.qcalc (included in the tarball) ! for some examples. After installing the program, you can simply fire it up using the command 'qcalc' or 'qcalc mysheet.qcalc'. To exit the program, use the 'Quit' option ! of the 'File' menu or just press Ctrl+Q; you will be warned and get a chance to abort the operation if the current file hasn't be saved yet. ! QCalc saves spreadsheets in a text format which is in fact valid Q script ! syntax, but uses the '.qcalc' extension by default. (The contents of the ! spreadsheet are stored as comments at the beginning of the script; it goes without saying that you shouldn't remove or alter these lines if you edit the file with a text editor!) It is also possible to open any plain Q script, --- 37,53 ---- ----- ! Documentation can be found in the doc directory, and is also available online ! with the F1 key or the corresponding options in the Help menu of the ! application. Please also have a look at the spreadsheets in the examples ! directory for some examples. After installing the program, you can simply fire it up using the command 'qcalc' or 'qcalc mysheet.qcalc'. To exit the program, use the 'Quit' option ! of the 'File' menu or just press Ctrl-Q; you will be warned and get a chance to abort the operation if the current file hasn't be saved yet. ! Note that QCalc saves spreadsheets in a text format which is in fact valid Q ! script syntax, but uses the '.qcalc' extension by default. (The contents of ! the spreadsheet are stored as comments at the beginning of the script; it goes without saying that you shouldn't remove or alter these lines if you edit the file with a text editor!) It is also possible to open any plain Q script, *************** *** 61,262 **** script. ! FORMULAS AND EVALUATION ! -------- --- ---------- ! ! Q expressions to be evaluated are written in the customary '= <expr>' format. ! (Note that the '=' symbol must be the first character, the formula won't be ! recognized as such if it is preceded by whitespace). Thus, e.g., if you have ! the literal values '1' and '2' in cells A1 and B1, and A2 contains '= A1+B2', ! then you will get the value '3' there. The cell will also show a little arrow ! symbol to indicate that there is a computed value there, so it will actually ! look like '> 3'. ! ! In your formulas you can use relative and absolute cell references like A1, ! B$2, $C5 or $E$9 just like in any other spreadsheet. These work exactly the ! same, as far as evaluation is concerned, but behave differently when they are ! copied or filled (see "EDITING" below). You can also employ ranges of the form ! A1:A10, which are mapped to Q lists (or lists of lists, if they span multiple ! rows *and* columns, as in B5:C12). ! ! You can also do calculations with strings, of course, using Q's string ! operators and functions, but note that to get an empty string value you'll ! have to use the formula '= ""'. That's because the value of an empty cell ! defaults to the integer 0 (rather than the empty string) in calculations. ! ! In fact, this spreadsheet is much more powerful than others in that cells can ! hold *any* Q value and you can do calculations with *any* kind of Q data, ! including "infinite" values such as streams (lazy lists). And, because of Q's ! term rewriting heritage, you can do symbolic calculations, too! ! ! Also note that if an expression doesn't evaluate because some arguments don't ! match, this is not an error in Q -- the expression is then considered a normal ! form and will be printed "as is". So, if the computed value in a cell looks ! "weird", take a second look at the computed formula; you will always find that ! there's something in there which "doesn't compute", as they say. Actually, ! this feature is quite useful, as it really shows you where your computation ! went wrong, instead of just giving you some silly error message. ! ! On the other hand, it *is* an error if an expression doesn't have a value, ! either because it is not valid Q syntax, or because it raises an exception ! (e.g., by calling 'halt' or 'throw') when evaluated. In the former case, the ! cell will just show the formula as literal text (without the arrow symbol). ! The latter kind of error is flagged (quite literally) with a little red flag ! instead of the arrow symbol, showing the offending formula as the contents of ! the cell. (Currently QCalc doesn't show you the actual exception raised by an ! expression, but you can easily find out about these by making judicious use of ! Q's built-in 'catch' function.) ! ! When you enter a new or edit an existing cell value, the evaluation algorithm ! used by QCalc will only reevaluate the cells affected by this change. Cyclic ! computations (e.g., if cell A1 is computed using A1 itself, or if there is a ! cyclic chain of cell dependencies, such as A1=A2+1 and A2=A1-1) are not ! permitted; the red flag will appear on all affected cells in such cases, and ! you will have to edit (at least) one of the cells to break the cycle. ! ! The entire spreadsheet is reevaluated each time it is loaded, or when you ! recompile the script of the spreadsheet (see "THE SCRIPT" below). ! ! Note that QCalc doesn't limit your spreadsheet to operations which always ! terminate. If a computation (indicated by the status message "Computing...") ! takes longer than expected, or just loops indefinitely, you can abort it with ! Ctrl-G (this is the only operation active while an evaluation is in progress), ! and correct the offending spreadsheet cells and/or definitions in the script. ! In the latter case you can then force a reevaluation of the entire spreadsheet ! by recompiling the script with F9 (see "THE SCRIPT" below). ! ! EDITING ! ------- ! ! The editing operations provided by QCalc are rather straightforward. You can ! browse through your spreadsheet with the mouse or the cursor keys. F3 edits a ! cell, Esc aborts the edit (reverting the cell to its previous value), and F2 ! or Return stores the edited value (and does any necessary computations). You ! can also force reevaluation of a cell by pressing F2 while the cell is ! selected. There are menu operations and toolbar buttons to achieve the same, ! and a double click opens a cell for editing. You can also just start typing ! when a cell is selected, to overwrite its current value. All editing is done ! in place, right there in the cell; there is no separate line edit control as ! in other spreadsheets. Cell indices and formulas are shown in the status line ! when you click on them. ! ! Rectangular ranges of spreadsheet cells can be selected by dragging the mouse ! over them as usual. You can also click a row or column header to select the ! entire row or column. Such ranges can be cut, copied and pasted as usual, also ! between different instances of QCalc, with automatic adjustment of relative ! column and row indices in formulas. Thus, if you copy a cell containing the ! formula '= foo A1' to a position at an offset of, say, 2 rows and 3 columns ! from the original position, it will become '= foo D3'. As usual, you can use ! the '$' symbol to indicate absolute row or column indices (or both) which will ! not be adjusted. ! ! The Copy operation only works with the QCalc program, but there is also a ! second "Copy values" operation to just copy the literal cell contents (without ! the formulas). This uses a tab-delimited textual format to store the selection ! in the clipboard, which can readily be pasted into almost any other ! application, including text editors and other spreadsheet programs, just as ! well as QCalc. On X11, the global selection is also supported; just select a ! range of cells, and you can paste their contents in textual format into any ! other application with the middle mouse button. ! ! There's also a special "fill" operation which basically works like dragging ! the little "hook" in other spreadsheets to copy a value or formula to adjacent ! cells. To use this, select the range (a sequence of cells in either a single ! row or column) that you want, with the value to be copied in the topmost or ! leftmost selected cell, and then just push the "Fill" button (the one with the ! magic wand symbol on it), or press Ctrl-L. This will copy the formula in the ! principal cell to the adjacent cells, adjusting it across the range as usual. ! The same operation also allows you to fill a series of cells with an ! arithmetic sequence. For this purpose, the topmost/leftmost one or two cell ! values determine the first member(s) of the sequence. ! ! Note that drag and drop of selected cells isn't currently supported, but ! cut/copy/paste works just as well for most purposes. ! ! Last but not least, there's also an unlimited undo/redo facility, so if you ! mess up your spreadsheet you can always go back and forth in time as needed. ! ! THE SCRIPT ! --- ------ ! ! You get to the script page by switching to the corresponding tab located right ! below the menu and toolbar. In the upper pane of the script page, there is a ! full-featured text editor with syntax highlighting for Q scripts. In the ! editor you can enter any Q script, which is submitted to the Q compiler when ! you invoke the Compile operation (F9). If there are any errors or warning ! messages, they will be shown in the lower "log" pane of the script page. (The ! log pane is also used to show output produced by Q's I/O operations like puts ! or printf. But note that the log is just that, a log of everything that is ! printed either by the Q compiler or the operations in your spreadsheet; it's ! *not* an interactive kind of terminal window, so it isn't possible to enter ! any input to operations like gets and scanf there. Also note that the log is ! cleared automatically whenever you recompile your script or load a new ! spreadsheet.) ! ! You *must* correct all errors in your script before you can evaluate anything. ! As soon as your script is error-free, after pressing F9 the entire spreadsheet ! will be reevaluated, using the definitions from your script. ! ! For instance, if you want to use a function 'square' in your spreadsheet, ! which isn't provided by the Q library, you can define it yourself as follows: ! ! square X = X*X; ! ! Enter this definition in the script editor and press F9. Voila, the new ! function is now available and you can use it in your spreadsheet just like any ! other function. E.g., you can now type the formula '= square 9' into a cell ! and it will evaluate to 81. ! ! The script editor has two additional editing operations provided for your ! convenience, the Find/Replace dialog (Ctrl-F) which lets you, well, find text ! and replace it, and the "Goto line" (F5) operation to locate the given line ! number, which comes in handy to find the lines listed in compiler error ! messages. ! ! NOTE: With the Qt3 highlighting engine, the syntax highlighting of the script ! editor can slow things down quite a bit with large scripts. As a remedy, if ! the highlighting makes the editor unresponsive and sluggish, you can disable ! it with the "Syntax highlighting" toggle (Ctrl-H). ! ! OTHER OPTIONS ! ----- ------- ! ! Row and column sizes can be changed by dragging the borders in the row and ! column headers, and you can also quickly adjust the size by double-clicking on ! the border. The sizes will be remembered on a per-file basis when the ! spreadsheet is saved and then reloaded. ! ! You can also change the font of the spreadsheet or the text editor by ! selecting the corresponding tab and invoking the "Choose font" operation. ! Fixed width fonts seem to work best for most purposes, although YMMV. Also ! note that the font set for the spreadsheet is also used for printing, see ! below. ! ! The "Zoom in" and "Zoom out" (Ctrl-+ and Ctrl--) commands allow you to quickly ! change the font size on either the sheet or the script page, and, as already ! mentioned, the "Syntax highlighting" toggle (Ctrl-H) switches syntax ! highlighting in the script editor on and off. These settings are global and ! are remembered across invocations of the program. ! ! Cell formatting is fixed in the current implementation. In particular, the ! format used for displaying floating point numbers ("%0.6g" by default) is ! hard-coded (see the FFORMAT variable at the beginning of the qcalc.q script), ! but you can easily change this in qcalc.q if you know what you are doing. ! ! You can print a spreadsheet with the Print command. This isn't very ! sophisticated right now, but at least it lets you choose the target printer or ! file, does simple pagination, and adds some formatting. You can choose which ! sections to print (spreadsheet, script, or both) and whether to print just the ! cell values, just the formulas, or both. There are also configurable headers ! and footers showing the spreadsheet filename and page numbers. These options ! are available in the "Print options" dialog in the File menu, and will be ! remembered across invocations. TODO ---- ! Online documentation is missing, from the options in the Help menu only the ! About box is implemented right now. ! ! Other stuff that would be nice to have in future releases: - CSV file import and export. --- 55,69 ---- script. ! Also note that there's only one spreadsheet (of fixed size) and one script per ! file in the current implementation. But the provided 128x26 cells should be ! plenty for most purposes, considering that each cell may hold an arbitrarily ! complex Q value. And the user script may import other source files as ! necessary, using Q's import/include statements, so the single script page ! doesn't really limit what you can do. TODO ---- ! Some stuff that would be nice to have in future releases: - CSV file import and export. | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 18:21:53
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv23150 Modified Files: Makefile qcalc.q qcalc.ui Log Message: add online help Index: qcalc.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.ui,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** qcalc.ui 29 Oct 2007 22:52:49 -0000 1.11 --- qcalc.ui 30 Oct 2007 18:21:48 -0000 1.12 *************** *** 315,318 **** --- 315,326 ---- <action name="helpContentsAction"/> <action name="helpIndexAction"/> + <action name="helpIntroAction"/> + <action name="helpUsageAction"/> + <action name="helpEvaluationAction"/> + <action name="helpEditingAction"/> + <action name="helpScriptAction"/> + <action name="helpViewAction"/> + <action name="helpPrintingAction"/> + <action name="helpCreditsAction"/> <separator/> <action name="helpAboutAction"/> *************** *** 600,604 **** </property> <property name="accel"> ! <string></string> </property> </action> --- 608,612 ---- </property> <property name="accel"> ! <string>F1</string> </property> </action> *************** *** 607,610 **** --- 615,621 ---- <cstring>helpIndexAction</cstring> </property> + <property name="enabled"> + <bool>false</bool> + </property> <property name="text"> <string>Index</string> *************** *** 616,619 **** --- 627,633 ---- <string></string> </property> + <property name="visible"> + <bool>false</bool> + </property> </action> <action> *************** *** 891,979 **** </property> </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="2087">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000007ee49444154588595977f881c6719c73fb17bf00eac38031b98b75e70472e90592e34bbb4e06d0c72c1085e10eca9482fed1f4d5a446229b5178bda0ad21ca22452cb5d6bd54ba5f42e7fd46c8be96daab5db6ae36c3097ddd3a43b57eecc2ce4cc2cbdd1997adbcce86d72fe319bdc5d2f97ab0fbc7cf9be0cf33ceff3f37d372d2d2db169d326d6932b8fa0461eaf90e2738e07860a04800a4ed0e61e9002db033305910742053b00538568c5f7a60a91c7fb91cac8a77fc90f376d64c0b9fb98320577445da0252104143e02b64049ac837350aa831af2835b1af0affbb89b14056d1bd0fb24a41f878e756dfd88e2c3eb3be1ac8d33c53f3eb6c1d7593702eeea81f401e8809a6d81eb523b6f81ebb771995be58915fb6bd199b161cf04610a047cf29606d82d36657440e4a14385c51a195542041a26a5299b4ca709116db4c9ea1988a21b3cc6656ea812167594ac890ddcd2002301350fe8ec85b00c1d1aa52987d2eb307ab28a75565299ad821ae17a555025b667ade2312e73c7ab40470001981b19400b322960ae8a3f6b32764c10fa59422979fcd06e841004759dda74091541385d4226d415bc88daf4a99d3e82ead9845363180258b020651201b74cc28b4fec7fbaa69b0f69ea419c968db95532e21cc6a68a33eb7062578db1972d469ece41e88062e0ce94905bf370e904e08017414adc40f7ed02d214d008709f0f6eee818bbf5fbaffa2b53455c93efa90b17d105b2be2c822a5d618c30347e8dfd50f59b05a058ca48173aa028a84b0825425cc8c4282b85fe8e62a945240a30e6a80bdb82204e7fe7259bdfcb7a547de285daca372cc6d3977387a83a14b0730ba34fa3fdb4fd01d70fbdbb773c83b4423d960a47c18a533a2784ac66e5524eef428a83e0436e8ac41378862de04a3a36dc0b9cad253862a1d027eba7b9bf1a9627394523486990af9d5c030aeea32e40d31343544900aa005fa369d46a2c1c09e1c56c3c69954a13a8ec481e93aa0c174a38dcb5ca662e57402d73d602479d86df9aabc13f227f3f476f7d0f7993eb4b4c6a033c8d1e651c6ebe388b4406fe9a449a39d949cbbe722910ab233cbd8eb0de80a71131aec4883f06187dec665ee46dcf000d7ab206a70522634ac8645d6cc52a64ca95562707a900205ecc0c6ec32d16775fa1bfd1c6698da172b70c141aad0d39b210ab25057901f8af99a1cd005b48d70ae5741ed4dff0b4e14fc6eefe70d72c773b00b6ccf46a4046a534589147a9b7d1cdcf6285248b426d45e1e21b36700eb4783e49f1b65df374e30b0cd46660be4d21227083154652d362c8cee003c70beb75c868977feb474514bb0c5eeb43850df472e9dc39ff539a01f24ab7e858c8cab8a2454de2a910b4378751c4e16a8bcf0064122cfd8cba31cf9e6189a50404d43505f8ba202a2114fc7fdcb5570b53c630db94e88993039d135c1fee6414abd25fa3a63e58e138201a1007c13f7b107e0541147088c7416351d124526c5f306a4c00dea6db45771674515dcc801604934295423fb7d028d9c9a61afb91b1cd0043003464a81792082aa90885fbcc1c49d7938348ca62be4ba148c6e70ebfba009524fb7d15cc58d4e112bdf123bf4461fb8f7e19dffd49bf2d9e29b1550c09d070cf023705b30f19683eb8113849884043b32ec2d4cc03d7d90006b36e4c097f294675d6a73824abd4c88bf061d2f80cdc00218ac9e05d7ca9ef5bc2e24d6db20374338035a0bfc0418aa819a00995010db158c54dce90c438bbb5e43414f424f579642b987dcb61e14a1ad41a3538545e0e3ab4300c0d0935f9dadce55c6fdb32ebe1f27dcc4a443500e513a414943d0f2c9754365dac7071c074880e3d74005d9ad605fc853ab376e9e03cd083ac03f7f1303806b32215f287b1178a008d8bbc720bf4bc150a13205c6562d8e654aa33809783071068ccd19aa75e8db65807071aabb61ae864c2a6d7460ae86a1c78a44196a2d2edf6c1ade36fcc83b53a11e740f7e278f73098c2d71db742e80dbf2c9776954e642682888747c310d221fb94563e2a44334a353bc30cee83d0fe0cc83b19955a84e835585aac7b713ac956b956675d80cb23f0f678863ed7363baa9498d89d320930a32094280dd80dc760de621d36960452067b38c3cd34b1f6f528af319a715ffc76af16ee0f1dc13679858ef3ed0b1fffedfccf7efd8fd89ccdd1aa2099100b71c224cc8a5156a8d908ca9e05c0a09e714a264482ead509a74d155c9d1674f10cccb770bafecfc3af05fe0ea8aff2fb5f73e58ef46d492423e53982c6124410ae2daddaa60a80a6100195d011ff4a442f97c884c284cbc05a1ab72ecb8834c1844adeabbc015e20ee27e68bd0704eb19b0543a5f782a8a24a32fd520056122247f17689de034a0520f095be0786df736a17adee7d82b05dcba7bb97876f4c1e2abdf7a0cf8777b2dac584de22744eb66390040f9f4514f7ed91cf7eb3d035c3ff1421c433b807c97426932f64ea569131d87ea9cbda0fbe2b967feb0f3d7ed932f001f00adf5f4ac6b00708d96feb3f26c75a0329b41e82093f164351271779402468e9f200a24c182355e991a1f6934aaefb54fd8241ebc5789637e53d9e86976dbf71ffcf31f49c99d870f1958d3b1d25215f01c8a9316c6a23c57aa8ffea43a35fed7158a43e27eb7aee28fe201806bf6bcfd8208d859baa0924d6b8cbe54a17a26225ab42ffb9e7da470faded75876f715e2ecbeb691e2ebb2e1e314e8e8ffda8b7fdfdd9ddf5299ad20855ca85eb2c68baf1d1a66759cffd356bce1a957ca461e0068b1285f2c5db0be4ba8feb670e6811f079e3dcfea38b7fe5fc5d7e57f510111fa24fb78d30000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="687">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000027649444154388da594cf4b545118861f23c10b0a33bbb941a00b41855a480b6d15ed6a55231238d022a1852deb3f88da583b6d11b590ae0a3173910a178223181a08a390388ac94c90cc40c85c19e35e51e96d31f78ea34efe7ce1f09ef371cfc773eef9ce87248211b727a555296ecbf7e3d75f2652572bf7578e8381b4e4baaa2ab758f24ca6e433734b525a8a4fa49a4f4c1cb7ab272dcb4fae8c245752ba4c7efddcc4810a850a6249a97905e41dc7104f9e801c64f7897ffbebe912b9f529153b3771a099b925a978c8d3923564b554213e5dd2b28a9276f437355f3ac1c07b6db873ee3d495ca2425d2de0799c4ade16d000e9b1444dfba2437a0da280bd6c031c4c9c58496218a7c89a056313f8016db7eaa0f5196dd720b9f9ea72cc083502d448dadfb08c9c88b71b0e1bb5c7911a9f7be18e09eb21bccd058c8e10d9b1769abab3e4df24f366dfec9543c4100e1bb56cf981c083dfe380d100343f85fa4e68dcc6b8d1036bd0d4dd098b0e66dd93b7ff218670d8276bd877c729c5f35309ccc837f25fb3988f23b0db06b551c8be860fb37b69b6a7db7e6647abd7f18e7febee212f4aca58d24ebfa48cef0549ef24e5a4a21fff78d73b42ec3552bac05da076df3daf14777ee509d79be4477b31fb4cf042607481330cfde37b893fe197b717c6adb3d5717092694bd292b4da2715e2d2f7475271522a3c97863b47ce5ec741ad8492780b2f203288b762434b1dce7a04b69795dfe02670ce5e51a94c5c9ae891240d0c5a2a24730f74915e11c8cd65caf3dca02b6bc83afaa4132b9ceee555c8309bca731b9b686b14e0fcbda29aa2442fd82bfea34ae223753c38354c9428c38c10a3a7f4f119d6c97afb7eec616cec1f229d04fb6bf2652a0000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="1018">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003c149444154388db5955f68536718c67f7129e630dd5af022018506226bcb0a4d19c386316c6430ba5db88a834e7661e72ed631d828bd90ce21542f3ad76d1d78e1308a6ced85d3eac03fa0348290eaaa494bdbc421232da324c3763987b6e49cbac8b38bd33ae3eacd581f387ce79cef3bcff79cf779dff7f348623db0615d58ff0b9243aaee3c94bc911e92d9d9a5caff87f4a83e3dd69f3625299b2daaa34b179eb958d233af55f41c55437a4863c337e5e2813b9c8c49c327b47b4de2eafd5925ce481db1823a6252fb8982da8f4bbe37d3a6247a7a93878b03522ee792150beeb8fadcd19530db3f5a2324cd67a4647145c9ca47977252a12075f74a5a9d93a48572c5cab9ef9adb121768507519715357569294587882f4bef4e3d9accaf07065efa714170a524f9fd4dc365c1612efbe9a20d810d90c972721e240951ff6ed0d96ff5a05b0085555c01c0402f0f197b0a71ea61d9836a3dfd09068800894c013fe2cabd4d7414616216cc13dcba6b1def8b7197fb9e4b609461504dfcdd0b2b38ec0369b7d350603e3368e6d2c3a25dbea3b666c7e2eb8ffdbc3e13a78f579389b83d95f2ab8720fb694a0ff3a543e84becbb065d91dab96e1f54319ce77d631b311b6bd50c1915b107da982fe6b6cbcfa43c53cc4473de14fb24a7de72aee3b0d95de3cb1bd01e2f310ad85f363d01282c1bbd05203b1bb36be0603e757189b06b3048617cc599bb1abc623c71a016fe4003dc7ff71deb73beddefc5eee9b7252a128f5c4a544467a2f269dbc22850fbac655ee90a896893f394148cb8454eda9fd30abccf7418e5cb7b975cbe0dc17600097276ddeaa37189884f026e8bb019605f93f6c2ccbc09ccbe32c05b06653506a042b751f6fe32336c597f96d5778032f0749d9105832686d72494716215a6ff0d50d88f8e1d438b46e07c7014206a6039615c0b2804d8d4006bc8de0a512a23f036cb0c733341af0f94f193e7803e2736eea9d9a84e85688dd06423038067609f2b74dac3c38e4f1f9805206a883520abcbc48297e11c0d3dd2b510b6160cf4e60339007023070075afc303805cd7e371cd12d30380ead2118b80b7b4210bb03e63c7fceccc61799d9e51680fffdb49a0e4a97468be5863d5569d9ac3b9f9e284845293192931e48c3d7b252566aef4a8a6a9d7e9cf7fe4392bf2dad35b1bad76a6f58a9f2f4c44adfb8e966cca52b52f7db125b9fec743b12ea38be36af241516ca1527475795a6a5fbd2b9a1a43421111a2e3be33cbc26d56e87ca57802968ad7163eaab01672a436ba88ec129d7407b72044a11373b00c789e3238ab504ce3c1799f5bcf39858eb7498fe0d6b1b0f97265451770000000049454e44ae426082</data> </image> <image name="image3"> ! <data format="PNG" length="960">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000038749444154388dd5944d485c5718869f961474a7d0c5045c4498804ab2502cd4814272e96a6677876e74d5b8490a5db92aa1aba49420160a0652c8151abcb39019538c378114af90d4ab24ce4c487428b168101943221e218373482fbc5df817d1e2b6fd36df599cf3f0f09df71cf8df96567559a18c5665a6c2a2d14b99fc988c4a32f9b119a392cca827b319c90cdf9c34d587328337f2667942e6d2956133fafde29d8b17069a8e80a7c2a291a46a75539274ede749cdfc205d1dcaebc4aa4ad786f2eaf97ce6ce71c646cb077b6fdfa8aaf7dbdb2a4e9ccc1d9d90961f4a9ddddf983ddec77b8bc2b3085aa1b2b40e40b8364e7bb29ff2bbe8c431ba67e0e6631f627bcc8c2b32aa1c586c57243d3ad9569286bd494dfdb2a9f673978e1afbe5109210955700b02d75f8028ca903077dfdede15e79b1c2fa6b076fde83f840741fec9e75889e41ea4c2bcc42b36d2498aed05c6ba4f0009a371af1ef46346d34e2e580bf1ab9fe5301fb6782f58d11dc6496fa07a3d8078f9403524928cc972001fe5c8493e8c09b8b700cdc7c1cb2fe36c5d083029dafea5cbfe7b1b2e630343d82ada519f977e30c2c40b6ad8be05585beee14f7d7a0bf3bc5f82711bde71d8803face67193f354eff67bd34378cd3dfdd8b8d0bb87fbbd8e32e6f70286f549526c3c54317b3f9667b27aacb3bf95eac2c4befa5e2934569539a0a8bba7465503d5f0e289170cd11f0f2844cfe7e51aa7e407db3db77f3bdf85cd27b494fb40fd5aad4fbf5a07a2ecca8e9d3f4d154784f7db2c92efcf99ddc46b33be9087fafc02908ee95e8380585df22ea4be0dd0de95ceac29f0eb1368db5ded1310014fd6d333a266d96760d3f309b79b42855a5c9fb925e4af9b119e9b934faabb45d92d25f5dd5b5ee4935351d673c9fc3a983f734801688fea8400b04732552890e0a73119916f06743d2ef52788f039c1a8ccc06d4eb16cfe60e89ee83b3c9347e2d20bb9b8ed4b90ec2850a99b62e8205c8b6a5f05f44b8ed0eb918dcf319c6e380def60c360670b171fd28d89bf7b13683f7b4004908172a386d1d040b25326de09723dc3845ee45880be4ca016e9cc12b17c0d6b1b591e38ddd3359b6363cd2098770be8493ec2078069964178572485f7b8a5c1ce09e75c8d9026e7b063ff6c9b6a6d9aa6d41ec1e7a201fed2d2e5e18b86cadfba3b51ea75b4eeffe542ef5d887b811a843dc878dfd9d03b1051ab0b165e5d56bb66a86061abeb3f1f4ade3e3f15faf7f00fa97d1f32a61bd8c0000000049454e44ae426082</data> </image> <image name="image4"> ! <data format="PNG" length="1120">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042749444154388dd5935f68536718c67fc62829e868601d0d5448590a4d588709f5c282388332386537e75cad1d6c983b73351c73a30c06761722bbd8a00c61a7579e0cc4d35d6c8917d2e31836155293d23fa9e858c2569aa2db4ed0d8f34d8f7d77d176aeb6375eeebdf92ebef77bf87dcff3bef012255fb15faaa14be28cac4b71aabef899f6b19ce4b597d1d85dd8a44fe65814392d727f4ae4a1788b9f9e189593b4bdd81b90153937e9dc76e53771c51157ee8a7bf9ca942b6571af5e1157cae27e6b4eba6b4571096a45fa88531a077f187e180c25a22a9e410feda098741645446465e52f1111397be1aa9cfd42e4e2d88fb2ad9eac893c898afc8ac8fd90c8954e910b49b9f8e18824fbcf7cbd83381d4b400d22913000dd2a4563d544eb19dcdeb94fc16a1dbada613604d1304eab1be3d428f8bcb343383f5b866ea8d61a0038cb054662192aade2f6ce7befc1a1ce0dd15804f706240f1c656cda44f96a9740ee8adc9e7bfee3b53991c99f17b7dbb07259444644aa7191874911eba8c8dc949cbf7059262fad48bc77a8b683d82a39a462509edfb853518ff4b104aeeb01e03e702152804601a2ed30130215a63c5f21ad74cc190bcfdf091cd0e3695880545737ce7495b06a237f03c2ad36ec6b65c22da0d6804816ee84a0370bcb0043987f8ca3c70cd84d3857ca430cec9932e9ce04d6ad32e94e306f1549bb296abf7c04dd11b85780de08decd096aab51bebc69a294c7f88cf91fe124900c42724f408f0f929fad62f4a6c8d761b83f4561b94ce6f000c57d63749fd2a111829ed330db4edb019db1f60499fe0cca07fda9be19def97dc02b403b7070efab6ff47dfec1b1e338f52a6f1fef808390783d82bbeef2e6911e7073d0d1064b4bd03e4cb95ee7fd77b3d49e2e313f97c2591da3b9da7ad45a9bce01fb81bdc0fe801137b01720dd9b786ed003087784e1de2884b3f07b08e25998b6481dcec22ca4bb52345b26ba6fbc306efad65458189b1e0314a737a6a378bd083d117850804319982fc07298b16b791af33076cdc6f314e32df385d82600d6035a5cc79c2da24553508381fe6eca7518383c004b71e8c842a30a7e1a331867a86f9089a0cd509f81521b84caf7b6489f018f81662057caa13d1a607cda812e706e56497541f1270b620634cad04c615e9f466318b364e3b50ccc920dbe87a7720002130f813f814750f93ba0c774cc561ebd274d79cbeb051888eae4bf19853b61ccef27d092592cdfc6881b28dfda3cd516e93a541e43e51954042060ce98e86a10b364938a81b350855ec857720c2ed7302b0e5a7b166bde060cac798be1e030f692bdb1a92ab7fb82685183f1a689d6a9c1cc06717eb6c8e0910c564c63e8688642d0269334206891490e63072d8c1e0dd56c82f27615de73e2adb3e794f23e514a11e9ca829f03c0fb37188b10a0361f2b5f112284f215b5fa2acd964b88d019e5dff86ea7fcffa9fe018a7c3cba9542b5090000000049454e44ae426082</data> </image> <image name="image5"> ! <data format="PNG" length="907">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035249444154388d95955f485b6718c67f5a8566b3a03061853914caaa626106cb886c17860e4adc60cb2ec6dcd845bd19f4aad3ddb98bb1f6a2b3eb18d48b41f7c735f542522fb22c65edb42024657389c3f6c4d26d39a0ee1c9921198e2541ed9e5d9c13513196bc373fde8ff33ce7f93edef31da850b2641b0b2a492ac9e5de3e3c393d5b495fb18cb4f54807d586244bcb404d55c6922a1b6fb8bc55d9b8b69271fa9eb9ef7a7113a87779acaaac6ee28d7d129793161c4423d3d51f453265ec322eb8a6b9f5320b52baca330e9c0ab46b7d47e23d49f59783f0f568aebbabfbc9fd3cb6df16381de8670b5fe0f560f0eccb83cf25b2a943bd3e2fc54df0d443fe1f683a02f65a91a3cd1ef26b459ab21eaecfdf282dfe3aff4b622e71cb53e7b911fb31960620f44ae8d0c71746ff90242db989126e2a77dbcab9b45c3e7470f5cbb076ea8c0569faf3f84439e97b9264598edab272524632969c7d67acfd692c15a48294fc39e93065481b527c36295f8faf974cc49a2f9f59995726e3bbfab89b349a71182a275e7076612c48b925492967bdefc5becbb56952ad34437ead08cd609a36e9cd5ec6ee81d9088377e04209fa6fc257389ca873186b80f3b713749e80bf4b367483f99bcdd1b6b6e3354aeb5f9ee1098e00cb400bf47f0b791fdcbd0374008b9579a505ce7639bab27ef8fde164edf0d7239b6421356f420be4d7f2d859b87b0d58056e1fccb13947679a3634c0f7df25b0b3f94724c78d3fa391b89491a2114919293e6b48eb5274562a58d268449a4e4843e39295914233eea4241ceed50fbc35f043cdd0b9a1854b1f5c3a31f32085bfddcbf067e7395c076c41b02ec8c4d6d463fba79f1ac47bd2c6dfee65e67e8a4f2f7ff84d6da035b0c20af87bbc247e4fd336d7849d3519ec7b9b99c618437d8334361eaed8fb0e77b0787f047f8f97d40af8bbbc144bc56582af05dfd1ba64a42da9208d5e1c950a5226e3ccd6e3188d4495fba22023edf4e1a9e87f1dc73a9e277a315a1f1a0f97b6bfacf2d7564525ddf9952519939987405d0d40774ff7b3fe97fc1f9d693873bcf42a2f784f7656bca7b7cbbd97d9041e501ab936f2939db5176237639facaeaeaeec7af6ea58f8745551cbb75d5aea3b15eadce9b52bd940c31bef9aa60db8737900d38b2678dc3f4d2bc0d49b3bbdfe079970c9ff9b77380f0000000049454e44ae426082</data> </image> <image name="image6"> ! <data format="PNG" length="1141">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000043c49444154388d9d9541881b551cc67fd9bead6f4a0a19702183a964b41533b862033db8d84303824d10694a11938b25e0a1a51e3415695711bb07a5ad5edc8bb45da14df66444caee1e2af1504c8bad4961d749a5e014b6748a5d9cc00ec9db75e87a9874d32e88e8bb7cbcf7ff7ffff7cdc7c71b7e81c471c154371e5fb9108faf7513c9b5ff8b67e2f1955f859c3a0e89c871989a782dfbb6ab7a187e073b004bb00125360a4b481cc01412078529246e0086001730a21a5e00ce0ff56f22dd787c457b3eb5997de3201d48e5a15d1be06801da55d859827605763c3c2fc27c25c4761fa7c7613ec5d9ebe5d5c899787cad9430b00f14b0a2251caa9814427cfd309e6fa3a72c1eaede7d0f6d44c7f96e06733983470d9d7c8841166f7a3f72a14da49b48ae694fea70f402f6ed1a56aa08ce2cbc77987f5dd79aa04c98af865fd6aac29ca472639c4de616f9493aba95e62697178361eca51623c73e5ce7da3fd619b928a97fff39e64f0d9abfddc2782e0d4f004f19f4b628861bdbf0ee56d05480f7fb1ca37fb80c15802690be6642c7c53a3ab13e74e6e309ac1670fb349964163a1dd262279c28c3650f96411bd161b78b9ec882df411779aac0503550a481993ba7215a82ade1d06f3f2893bbed602f54c0f7f0b67970e414ced549f07bb8d3e370de0b9b778fd1bc330b2a8b1754c80343052121809c94f06abff1e20cfbe753d8cb1dac44169226fade1c9860be7218fc0e46320bd7cbd0a7a40f96e1de24ba28520bfa8a115007d89b0bbbe6666976ce62f90afbca2488e2ba3df59b355856b857ce81afe84d9d0ad3a25c705dbca0162ace23690299d8200595f9366995852517cb57a02aebb5ccf63cf81e86ca82d7410b520068db0c101abac853430d3c6e505d271705d8d44048ec40413048587d21ecf3fa97790b031eb0c163604c018bfdea680a4b481060c9d263c4cc0b05007419daa3ef1ba4a819f436780c345103f69149ecfede092a407e83620d2fa88000624ed877a94e5a6a8f28a69f6351802fcb217b075807bf0201a694d03a1a9e2f42a6d50c958a22ec7a19f664003017632024ba283e9e639b1a5c6ee0cecd00d07b2b05bb4ee1060a540f774f060a193c0108e8ed72e1d3f1f042079ce93288d0fb3c10b91b8bad194913fa9e122bc1b91218ac93989a80e84e58a8c28109889ab0e711e3f7e64016801af85926af96899c8ccab5f2f614b660f0dec674dc770f613cccf53f2d071a87728cc930000c837bdf83eb2d868afd1c5bb234f054f530beb807c7c6c3177c71c3c04b75f8ba01efe41893614a180dd1105041113929e54a39696e7662b1f08f20c2a217802e343c7ae842c3116006e0043d4ca9017debfa4af90b1896346fb5a9df6caf6efa0cf16c638897c688603f087826c883ba86b60ab6eaf0749007d542ef2a500afdc19be0ff0cab01743bd07d03fc06ac0634efde21bde431fbe7d2f9c8fb9028c0895941410ab919603f500935f11ff7ab1da5aa79f8e86f6c17eb76e3dc08cd0000000049454e44ae426082</data> </image> <image name="image7"> ! <data format="PNG" length="653">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000025449444154388ded953168534118c77f0917788116de0385767b070e0938246041b7161cf4c5421be9f27448d4ad421ddc3a7428dd02a5d06e423ab4ddf210a419cd03071d0ac920d4ed020a2958cc831473908338a4add2589aa583e02dbfe1befbdf0feefbb858bfdfe73a56fc5a52ffc960b13bbbcb1e7bf8f8e77c997d52b0b294759dedcdfa6ef1e2fe288c798f3c2c2c341a0b8beacd4a01289766155b1f242aa2e87d7fbc7db63f2ae33e3e1a8d8f4fe054a649512ecdc3e2bc64750126329403a752f8b36e149e1b07e3950c82daf2fd96bdfc7092e00be453b0f5a9cbdabb24d109c57c6774f3b88f3f084d517b7607dbcf4eb21642da86b5103c37c9f3bb60dda61c8c8f6e1e63e1670691ac655decf40468c06298ad13a87d064cb798ef3ebdd23c4e2a59c3601fda101c4055434b832721d27038067b07f0519cf6512a590e9295ccd5c6733fa64938d06b73caf56cdac958d6c05445d0fc4644af5d24e144f4dae4cd8bf032d340bcc990706af11d530dbd6e2e3c23380d750ca4411b58bc0758d8e0acd0a3b163aae165a681a8bc02a74e8f70a88f0336a7494ed6d22e58e2f724d59b409708a3361072db33b9e6a0bee422e41c462d21a48b511142caf8c59b77781fd2253c1c1b18ebd480ab0f6062129b29b9824155d9ef0754fa08a948b0ce947431440839e3995c3464acd154d9b74129c6a5edde000460fe4eade128023a2a0239e3916b0c4dde193d7211c82c1d1acdafd03c067d6b10426ac0c885e6111cb5800e6f414a8f5c6368f22e7d654a05904ba0320809b4c138806a820c416de479ddb8782ef6ff07b9f6e05f57bf6f15528cbbdf0000000049454e44ae426082</data> </image> <image name="image8"> ! <data format="PNG" length="685">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000027449444154388ded95b16b1a511cc73f060b7760e00e1a5048c0830c0a099cd00e960e6747934262ea72ed906ba7904009d83f2043a77648a9742ad541ddb4938ed1c974090a2d1848c083160c44f040a807394887abd6c440d22143a16ff90c8ff77d1f7eeff7e379cecfcfb98d35752ba9ff64b037ff384f81023afa885be1a72a2a2f3946131609be1840780eb6aa202cd2b4f779976ee5b397cf8dd3135f8e23206063b3375396808c22b1f23cda269554e8f5419e66c462b543693f40e99826b0fae874c91c9e1fe7948eee8646cb2a0eed830d56d206a4920a1cb961f5dfe408d66201369370b0818a43a3122d4b3636c39c213df1e53895e9b20a54f5052468d338516875012f48c2007d414499ebb1f950a670087a080a8750df874f4d6a89fe5a6cc2b872bf2c01554248856f980547d96e755172fdbc27de5bf258b3a2f2e10b3bafbecad693f71091e075cda53c0bfe7b68a5e9a236614cf2e767bce20ace603b3178b67bf9e6214b624ec22b56837707ea8379111b1080d609344cb2f1fe9271c19890a8e110c90d4abb57d54a47a724163542a28ac38e298956e307c415b06c10160007b512296b25b1a80d79a12bae34f57e54b92337600082080e04fd10905c631b681c83edb86f82dd03646bea2ac371e69c4a93330c4222613fbc5985800f08bb6189304482105d05bf0f38932dce885d6b3c3227bd8e379009ce81ec6354e3e16a77c13ac5c2e9c4126c35af351e99b397c5c130bf43c782c4bc6b6ccfbb0f6875b07088e5d86b8efaf826c67fccdfaee35532d20c483e30bb400fa01d4b90aa4d4cdecdcdeb591c0ceb14cc936128468e7a6d62f2fec678cc3c03ca3ab48d04a9ece57dcfff1fe4d6837f01b9616b720e2e79790000000049454e44ae426082</data> </image> <image name="image9"> ! <data format="PNG" length="877">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000033449444154388dad94516853571cc6bf0e1f4ea00f2783c229f8700a7bc96410c75e36f6603b84610b8b051fa414b2c9060e0a13d943c80a0b998294508486114849834985916171b1834263a96b0a4a4d7034131f923b186910b9b954b9b948e1db439aab6b2c74c1f376cfbddfef7eff8f8f3f4882248e72f2cb5b92bb2cb178b8c0e5fd1f30abbc459234df36f83e4992ab2b5b5d0256196481b5dec0bb6d302bff15d86906b71e56f75ff6005e2d6c912433e95782fa32835c6f13b71ff508e613d2366d9af1b6201c32839d9fd9bb36ed34533d8133d9b6b3e8950c5763d5200bfbc3d749b3c052329e973d81cd04597d5267386432f7cbc6fef855462376291a494aa0c756ccc572b4ef9399f93c4972a3b8cd8d44bd74796a4eba71edf38ebd09c0900e148f39fe4f8440058e7122dc5800809a5143cc9ac70fdf5fc09ddf8b58bc5928630fc38b37a7ad6ec86b8e731795665a97785b910c934f7de4ae8fbcae4b5cd1c14c7c86b4c97028c95c64bb343e76591ec6ebeb40b35f0dca09851a4e3b124a606713181c168000d0ef41cb003cfd1fe3a7d487b08c87f8abe9f52ee7635d4e3b3c17dcba3a94f21c6f04e195c03d7cd937d358604c9fc224ee021e6040003b0e608d030fb2c0002e55fe74acf73f104b7d670ceb20d8b59e9f92645a30795ecdba1f45b4346f2b929aac6832addbf1bcf4b59f5ffa584de826af68ffc128dee95c8cfa0134809196f8db9deb8533ebfd08c0a6033c46195e0003009eb500df04f00f30f48d4756046e1d8cc48da2f0ad87237e07d93fa4b5f35c2c0c7ae19ff814a730e800f764b9b0e70c8f4c8a2684036c0aab6639978620bec0492780e302859f9db39fcd3496baa2a807d45d4640ae834c83ac083226c9844ee52eaa76f9e715f95493d3fa3b77f4155de3ba2213fac7d7796e8fe32f70566caad993861318ed87ccaea17c664f5c7ff786b1f02a1aa0b566c163c972e7eace6f8e313aede85f6fbca11e475e422155e323c9e4a44a0140f2bc92ccaa26b382f6b5431c1fe5340db1e67dd0085e784f06773e57721cf0b7ac86f43c93587cec2cf5ec78ee9cd28ca926e3208b2013209705e702ca6d454f4b0800a263ca6f9e53b58d29417e2d191d53a9ea98ea5a42ff02a6ebaa01939bc2390000000049454e44ae426082</data> </image> <image name="image10"> ! <data format="PNG" length="422">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000016d49444154388da5953d6bc25014865f0a1d3a76e8d0c1a163fbaf95dc4d71511c3af41f2854e2d0c1c121420a3760e106ecf076b8e7e6e326371ff64038f790707c78f3a820091e48928ca5fb73a456248931973b34ca18dbb5b687683a1fb51c245190faa56f270f12f35a121b4546d315a98693db438858e2602ae45b925b8e58dc51e662b7c79f47f22ae4ffce588843b6b023fb30b12c4d4ebaf3434b6beacbdb339617e7b20dbe035dbf5f256f12cb5297ad4e0d5bab628db3a5b02798b1dbe579dc28cf1a56ac69101bf9ca15c43a40ec9e6f5833af2c76442e5bb7eb22bd8ff8cbb6f8d0495c2709111bcf9ae3312119cad8783d94b16f4d22fd5412df01c0cb0e50b335b004d46c817c29f3c6ce6faf28eb17c03d90ffe4c013907d67c033703e67c00450fb857d8e437ead7aaca99157897bab429ce7001e84f811c8b23ab9daaf8713c77dd6b4100ffd4728530858a3539b4bdde3a11907acb93de39d678bb36723f3bbcc1f65c67f44de19f34148dfb70000000049454e44ae426082</data> </image> <image name="image11"> ! <data format="PNG" length="848">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000031749444154388d8d9531681b571cc67f322de42086dc10e80d06075cb08c33389b0b199cadc9a66ece966e2e74e9e866086a06218c29442905cb196aa9d014175adb434dac52b086ca8e4ab0ecd216096c908a0d77c62e7a476cf83ae829962c5de883e3c7c71ddf7d7cefffeea0cf4aa796e6ab6bcd423ab554a8afa9904e2d15aa3f36e7fb3d2ba9efd5b3661f2e3cf3bf56cf7a92f95ec987feb3ff632a09b431714d5fc6e7b5912c2c3c9a29d7d73adc9add4ccf2dc9ffee45599978411bc9f9b71a6fa7e2659dcca8b99f563d55d566b12249aaeffbbdf4a5f4e3a4a4b4fce20329152f4727fef589a4b4a4ba928f93922fa928c957eb25977475b9629faf6a3b33a928e3d866664a1fcc64c1e420842fbe82fb24c8b1cc1520a45bdfb90db76edf87200bdf14e1d38d58bf4d453f4f4927b3922a91acbc92f45a92e565bd907dd1939c9547939266a5c3cf246d5b5ed2af7ba7a46937d43f6c5af3952e73944b4bf519499bd17cd56bdc72b5b4f73b930f64b7f2e081a965a339daa7c333c085e0c8604a905d5c659a3b6417575ba7c3cf4c4a7f4e4b5a8964252af18965ddf237a95994243190df09e17d307b8b2d969ec2b5634ce1295c3dc6accf31d62f31c0200481010f5e966b300ef9bd550006a64713500e718613b0dec079ef2e6c199c1103bf1b9cd18fe08f086303aeebc01edc9ab8c1eedf301dbfd732ceefe4612424f82503c321c156aea5b78e2d737d3b360670a07110401c6a7f058cddbc481cf3e726e4c6afc0f05dd85986716007184fbcd1bbe72f19bbd99d140768001e70000c013530ff803349acd571704c50cac35948500a2d2f7457c7672dd376b7c19181219bfc4667c72309080d6edc44b3b3e3778153db6d00ee75071ae00db970d0d5710ece431aa510ce6de2cbba23b139ed98063bc778d0680430d49178ead4817f43bc381086b8f110c26ebddb4e6cc019ec93f8083caf3b714c129f7f38266fd090780796cfe9e127b95aab029bd8190413181cd7213832b8d71d1a0d83e739641757f9f8c1bdd85b7f2f6faef6c96bff51da27aefdad38b4dcef387911a3df3db3f65b60beb57c6ef983e54f96eb171dff0741fcc9969734940a0000000049454e44ae426082</data> </image> <image name="image12"> ! <data format="PNG" length="1036">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003d349444154388d95944f4823771cc5dff60fc483dba4d0922c3dc4837623088e5068c08359f6b08805d953b52c444568a54b0bee1e8a582aa107494502494148b429896dc36c682178d8925d699b6c9126ba9689e29689d432112d33c19531b8c2eb6126c67f4db7eff2f826339f79f37ef3fb01272426d24e16382726a971831493295226c5249759e0c7a8237989f40cc778ee8f5854f4ea716a62324d2a643a9b23f74c57c9d4429a5ce5723822b65f04f60c87e9bae1230048511a0f0886625e7d894cdd27a9929925893c249927a99399558924c92cc9556ac150cc592fbd673846f83e0f3b95195d131732e41e993321922c9324337989d46bbfa7b339aa33fac3b3b0d140868313ac552127d5e9582245aa646ed508c61dc3720573365dda305c4ca62827d5e34a462649316a74ec1f570cf8d884bf78dc294965472549eaba6ecc8a31cb7f2a862b0a79488e8dfba6abe0c171d2331ca6e7964aa1d76f80a5a4c2f44f395227299b0975d3abb372fa4db843e6a2d2711deebe20fde30a851e3f5d5d9201f64d068d0533bbac2e94b46150d53d33b9aa9ef2d1dba3277b769e8202402e2e1babad9fe8d4ec927ba6ab67e63d321dc89c5bc0937a21b418dac45520bb5e40871dc8af158166a0582a018d80a669800d383838001a6b1ef935b2520f8c584f7a3a1c156bdf2d49a9da6db5d36ae7a6fc5341c67ad2176e94e3c491fdf8c483c547e507bfe50101c8ff5e406b9399f83533710370f0ccb8a1b056c4da4a015947b65c17fc7071b65cdad2062c4f2cc82e17d0d1d60a1481268703d8056c361bf01468781928ac01db3f96d074b503439d437513bf08009bf2f27ab15c795c94d76f1c1d3db3b4ba5b50dc2ac1e66844695743a3ad01f1f97b98ff76164797818fae0ce1e7f2ccbbf784279fbd25589cf34bfb3f5c080680cdcde575eb65d74ccb639765ea7ec0ee3a6cb606e22138ca0ebcffe99dc5e61561e2e8cd8689ee2bdddf7d5d98ecfaf0d58a15afff8516e7dfed6daf589d8995f370f822a4fb5698002cf55eaf2ab5cfaea94b632415aa0937f98995e13efbdcb90bbb8763745d373eeecc0229f4f8cf9fab2714ecb57b1917c89db0b13d136e3262a5bfe702b8a9373c03e1d33be85f3476ddeee5dd1a5c8d0be46d2bc7ba4cb89c27470319a612fc4fd8598d76dabd7a4820776246f2b89b0c5839f2b67d0e239369f6df354e2777af71e4f9a2c6fc3cf0c176ab57fda006572202473a9d7ca9bbe91abefc230e386fa2b23b0f0078f44b1cdb5bd79e2bf5ec4af92ba0842fbe999ab3bd5381b6d98f86b6322e7906c2ac54ba51791a4765bf82b5c5f14bffb71200e86fb7ce592d162f5cef617bf7e6f7ff00c0e949a4f0c9a1090000000049454e44ae426082</data> </image> <image name="image13"> ! <data format="PNG" length="931">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000036a49444154388dc59551485b7714c67f3a1db9a5859b0731610caec3c11c3ea89b0f1d1dc432d890322ca32f2ba3ae30187baa8c3df561853d664502e621a0a41d490b45ed90129860520646b08bc2e05ec58da46c5d223a726593185ae1dbc38d8d9a74edcbd881cb3987fffffcf8f8eee1de1649fcaf118ee642e1980a2f3cd03faff1e7426339b3bca28296253badd08b705bab6beec8e9a8c6c3d1dc153bf6aca181afb1b01884d4dacaa5c327be4f169bcf5c9dd7b5abf3929d96c2b19c6ba7651d3eb7d30a6959f5d89226a6d4974f2bde3f9673ad88e4bbd028a87576cdbd510840e64f0718303305e76edd02994b2527ce607da0c41e97df65d5ec65f4e3de01f3e2ab2ec0a5e360007a228a973d25d296148ee5c66be0713589e9b95a4e49c50d29f0694ebe73321bc1d715fa62aea2fc949498b52549e1686e5cc54668a522e9b1646f940feee9f294c47b0b579aaaee4fa990a879adb2a4df6af9703c3ea04bca7bb9b82c4da42473e4e82ab61e14ee8352a46041a6e040155c13a81ebaf9046887bdbf0103d28f4a60c0da7e89e16de8e9712cce68a441b195943914918a2bd2c4947dc4cbba0ff5cd902465bd148ee5947324debe77b7010c607da5783855567e4ab21dcf87835ca941cb5b5e512e4b15c7eb2b1bd2c45c51810b12bdd3d6112b00aafb4e2468fa990182fb7e00badafcf0040c0370c1df614009fc7e985df77aa30a4327830c870086479bab1eb3578b1bdedb96a4c595e2538592542c7a8aa7e7f347fa899bb6c28e44df74f3ef49e0ba46bf9c95f2596f4f2569e1c763dee66bf5415ff49ef04d692826d19d1879e938b8ed950f1f6e6e053ff777967c837f9ce2f7975ddeb10c4a7fed71aab31dd7057661d7b787d1d18ebbbd8771a29d64b6c0fbbb7e763b5d323fbc1e683d0ede89bfb553d8e4fc4c3548c60fc15d3f3c82a069c036f8f7c168f3bccd3e80ea23836f6f43ffc92e6670b8d8e7874036d40006a8de6eb99fb9951dcb6e43aae0e0b6c1cc7d073a20fb6b097c10fdce21bb0ac9a5153e3a0dd15f4adcfae94d5e3b9bfc9ecdb3e79bfafc343e507c71599abc63abe2789e571c693269abb82c8593d2e41d8933f75cba2bd7e84e58ff0eac834ddfb985d5f0cfd2f47c51ca4b89545edf24a5fecf16c51b950cdd89d166a32dcf8587649926abc141ccae3658596267737de6060c47583ff1f059632dfa8f7ea6ff000f7fcd1ad04bcf0e0000000049454e44ae426082</data> </image> <image name="image14"> ! <data format="PNG" length="2001">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af40000079849444154588595976f6c5be515c67f8164b2a7564ba4b05d0bd0e22965711704ced044b2a1a9d6feb0b4489d99272d5d3e60609382f6a12a7ce80a9350da21642a8dadd988e43031d9fd80dc682b8e370171a780dd2ae05b946027a4d1759581531974134ce55621e2d9877b0b499ba4e595ae1e9dfb5edd73dee73ce77dcfdb2089868606361b3a4233b3fc930e7e68ce42573b300fb48339efdab34007e467a1a7c3b5db213f0f3d6bbeffdc9ee563da196a7886a71bae1740a19f77ba3cdcb5d40e2ddbe012e0e5067015bc8d9be0fb903d0fdd97f8c39601a89f9fd3c128ad402405db1e84a64d63bdf1f1da4e28cfc0eb7c70d3753e0d96de077ed60ddb7aa0094a3379f8144ad31b63fef4d896f3e57379f871894bceff6f45d2a6de73bf62504348a5039224ad14a5154996a48a349ec939ef2db998936a57d957cf4bee3f021a8fa02d19e86984d22c10780c2e65a16927d9d7b32cbe0687ff9e25ff560fe65b59f0c3e2b92cf87b306793eb6c07bfb0cb33279c34ce4308d83a05abb0b3039849c27288e48be06f0c61fae0c9df87f078c0773144e9f408bed6209c1ea1cbe859630fe1f318945e790c1fc0a9c3f86f0bc02727a023ecf8d82a057a2afae7f4504c76524abc54507d4e8a2607d49dec96f1b4217b4a1af85ddaa1b5eed05b994b38f6424caa0f4866741d569286b4d026659aa508da3000bdaa8734a77752a345a924c53329a5cc9462133149526c2126236f28f66a5ce9a392325782483be2983b24ada4a5a9816b71aa4dca20cda1f1bd6b345098ac34aba2fde359eb3cedbc98bf50beabdcd9c2beb30fd37b6f0f818e00cbf72dd3f2460b4ff004172e5f60e8f461ce7b4cb2ff0ec12749f086587ce371d8b104f3a37027d7e0e2fc65e804ce43a8c94d41c1d49f646b49138e428f65e34a9929a5e79c9525aa090dd607451651454c2263c590e78847b2a5be48429ab224f38054ea96267aa56a5c9a08bbb8c62e19d204521569af9b02d952b1644b92ba87bb2549855a41b66c0d58030ad6826202796a1e195386daac36058683524daa54a503fba5c183714903aae47b250d48567443acbc6a4836d2a413809382777965a7d142be9c67df7dfb18f97084c5ed8bec9edecd68eb2833f33304ee0d609c317872f5490e7f748c52bf49e9bf797cb740f72ef037f6c1b4175f6718fe07f837465fa707de073a217ba50a34a59fa433ce6e117c29a8602d28cfa447cdb566b54db529600534903d20ad48b62da92e159f3f2655a55c7f5492d4d79f92756450854c50aaf6cacaefda18b3cd92904a6b520034aaa405e5a54add56db449b0ed50f695776970ad5a28a952b3b99038597c7a58c2545fa248f47859773aa4c48d1feb834b74b327ba5dab18db16a4896b3eeb50134c44772bfad27a54ac5567d454a97c6254976cdf56dd59d4aab49f561a96218d2b66659cdcd922515ccbafa22b612c351a9deab8ad9ebe2ae75b69577195858ab0150d013183d7ed9fcd8d7d8827715760742508696edc039f0fbbdf02178b7c3710ff8461719bba707ffb3e3d0085d412ffece199a2f1e86f3e0ebec75f1c175b6ff6e0f7c08dcbe4603eeb8c97a5ecfc4870ace8e56d5170c54a5f4494baa4ac5b9baec97246be10a33b6b422e5ccbab420852309c90cab900f4ad5ee6bd0323d0e03b5f52900e0d053a93bac93526ec2cdf99c03c5394925d7ae490573bd265495ec49673e7d541a7c3a26e99864f56e8086b4f28506d61d4647067f319f3c3b76dcf7162c2d016d30f65a19df69287b801d50beb0445710ccb34bd00ae532700b64ce9560072c1b6566de7d98d259f7142c9f7031037e28972f43132c4d5f49fe5567416eb8fed3430725d9eeb356fd93aeed9662e265672e9d916c53ca4d3aeffbfa53b24e8e4ba53649075c0cb8e88a7014a5f7f0c14687d1cde3fb351d7bd639ddaee45a2b9216a4dca4135561aaaebae9a6475265c1799f3e69a978548a3e14974c6425b9169f42e93d68f05ef66fd41336441f4dfc26dcb1ef85dd0f38b4b304b400a7dcb4bc0ba136f05e04ee76bbe33b71d47d19926780e94b2c4fefe6314e91c5693e58051a616c95f77c1f31fcdd338c6dd60f34451f4a2d5bcfbb0c5425cb92eca453ef92542cd55d86ead29cc388248d672bd282147d34a5f05e7b16b80b080077ac797600df045a37eb885643b785fe7af8ed13f86f072e82df03333ba0abdd0b65d819f0c212f86ff732720aba0c2f63af807fd5c7e37f8190d1cbe5d5e3ef0175979bc5ab9e2ab0bc6947d4fd83035fef8bd88a0f17d7ad582b4eb97dcec49c541976043878c4d907fa22f607c17b061e013a806f005fd964a15bb6643785f7c693e9a38ef824670f90a454c6a9847446aa4f49b1a305a58ed4158e246ac77e548c01df01fc402bce3d65f3de738b0008efb1be178e24549f928a25a7c4ac05a96e4a8592e33cfa684a7d115bbdf7c7928611ec01da0103d80634029b5fbbae17007073e2a0fde6a183ceca7379878df888941b71e88eefadbc1dbcbbef97c0b7815b81afe150beb56377345e67feb3d199d17f789ac2dfcfbe01a17b5a78ee6f2667cff8c97c3a5a59fa68e6b947defcf57f7084f6898b2bc06737e21cb82e03004de14862617c488af6a7943868d77aef8fbd80d35a7e0bb805f82a703337b8ea2f1b4043786fe58fe14842e13dd6bf9a5b033d3875ec03b6e3dc73bebc6377fc1f5c3df3671703dbcc0000000049454e44ae426082</data> </image> <image name="image15"> ! <data format="PNG" length="1266">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000004b949444154388d8d936f6c935514c67f2d2ddce294f7d5cdbc7523b4dac50d1d5004e44f408b98e008898e1865c097216032891fc044834413308a9a08014c503181902d2150150c20e89820031d59275b5660b0d631da862df445cafa0eba1e3fec8f6480f27cba37b9e797e73ce75c1b43f463bb8cac3acbfcd91308041b4995e7b23918a6bbac98d9554d84cb8b695d3cc5961e5a3754b68143458d288a705a8de951f122d7de508a296e1fb7bc87923fa9b4de11c94bbf8ecf15d78ec4bf22e5de7274952df37f702a6a44edb9225f961e938e5d31d9ee0f4a971211da453491acf187643411512d22fe33d2e67fefc4ac2d87c53d6d838cfe4fc71531991ebac091f04c466a21b0fc60864103d4d1380a37389210d0b1a269f44e5744a59217c9e8bd245ade0dad7baa7128d80e603533316ee1b40e42c20f663d78a2e0ae864acd8dde017a8e8e5e0dab70810b6f64a13e2752cc8b65feb1eb8b97ec72df158c8f8c0a019d4008b456d09b22594de37230da10521a1749446e2a0d82e1084627787f4ea37cd8abea1b9cc9d63ad71de03d6d32d73acb8ad5afe0d0dca07ca052f49679bdbb22472adf481e3797c71bd72f2ccb3116a1a85501af850e95452ebccd909e3f71869ab974de9a6de22e5e298e4172605ff7a7464c8463225c15a146c4d82609e3f955738111b7bbf0afedce0dec6e5b531a931ba53557a52c26e23920a2ed10313e8a453dcb64d6a0e34505ae7ceb14e0034e034580e2617dfee77940cfede0d0ba915d0b0abc5fd0c1d6f2809ea50b2a2781391aac97dc632cd5f026e000b06f0fa56f1206be065afbe0e6649c105fe95f29f943b37b6bbaad5b9bcce6609c13aa0482174079c03a98cc604ecc003a807d6989abc39d035a0960021eb0ce4232e09ea0f9581bd8278f0c85d3c9e57237b5c4c9a8a23e335aae7ede6aaadc0d5c07b0079be23b8d1495fe48cb8e628d1bd4f7c59208e38ce4b2c2ea4cee2c3b23cf9405bbd500b7ea515b3678894b2a975be1dfc0ba05665772ac9ab67585f6f22f1afcfba5474cdb2d7eab933de1c9e45b61a0046802a304f15ea06dd524ea0e4439b668025d7b2f5050fa340bd6d632336c30cc6a028a41eda747d5b3dc3c64ab1a588f1eab3339299ea33f66350d4caa6f0c897a6ca68327161fe57143f1dac92eb2e922867d5b8dc3021b9780697d26b0c85a89f74d60987da0bd72bf3ec7ccc3c6ccfeb90600775f919501ab105bd46478d840458fe3b40ab161f577960055082ac16912757f01bdc306c0a9716f2bc6bb5e304d46684f724bfd9eece139973373151803d4f73ffc1bc801aef4dfdb406b209ba9adfb3553ffe1c756f4bb338035081e5df1c945e7497a978e667c4735fb1fc4f5bd3a8dceb3e459cdd8f1f6c35e05f280d9c039a0106820a5c28e8da9c6c587816b776c91ff1d79c0b3f09ba99a27300ecd9353bc4ca61a9b62e7681761bb88da24a26d885dd776489af322748bb0ad3bab164a1d46e924c07907f46ef2ac9402e3b08468175122a26d90a431b7fb036dc9898daa41322a28bdda56f953f92ae6010fdd5eebb80773403d1c8c5cd32e79d31649bb6ad47f489c9e11d4a636a4d9dc924f726ca7d9bc683f1d350dfde90fca760fe0a094f199523ea6ab9cd56312a7bca730a351200d0c0746d197e9cdfb8ae02eb2d197dff0fb2df8074d050ff2c417542a0000000049454e44ae426082</data> </image> <image name="image16"> ! <data format="PNG" length="537">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001e049444154388dedd5bf6b935114c6f14f6b918b28447078375fc10ed9cca68360fe83d6cda110e9e024e858a4884307850e198a74903488382845eb5690aa8843112d558a20b40ed241a4c92012a4781c4caa06ad2db59bcf72eeb93fbe3cdc7beebd3d116137d4bb2bd4dd04ff531516e58569b56c49439a37a7eed88e8875b979357591e635d22dc77a4c6ae8c3bab27316b6059c94e372da9f2aad4f2dfabcc3a0610bbdfaddcb0e6405fde64c6cd179556e562df5a595f29972a578b048bf05eb4a863be6c60d648b5994964aa1aa617c13f8b8dcb85a9a48517c568cd3713a0af542a89a5355f875f28c82aba214a5c896b230ad61ac0b3e2637ada62ab20f5914bf14a314a54837529851fb9d879ef6c239834ea562d27ad9e28126ca68e2b2a4e204e964d2d29224ad6b2dd64db9e4ec9ff76cd4058bc267218479a1aee18ab02cacb5fb3be363425de52f278111b9d1f6a20e64a92b5f1356855161642bd08e26ac78d186acfe262e0be735b65a397b365a87e5f63a6e1f0ee3ed4ff121ee6afaaaeccad66afdc75b917bec3572bcfa29bec1530b72475cdfe605dad09086d9f67e3e114684212f0d75d7e8761c7fd72309cfdb6edf9b7254d94dcded82fbbaf2fbee18001f4db9bd598d6eae6ec7f71c42d3c59d40a1e7ffd7d4d1372316c910a1e5e7030000000049454e44ae426082</data> </image> <image name="image17"> ! <data format="PNG" length="741">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002ac49444154388db595b16b14411487bf952b4eb0988314575c3101054db58929f488e04a0a9134a64b91c2da4aac6cf40fb012529ac2c234813482766ee599c2dc1ee4720a161b1034557691c36c31f0b398bddc5d2e89691cd85d76d9f9f8e6bd376f0249fc9771127cb888d122f6a2f3f71a5859cc49e6a5b10f8b981ac438122d10fe53ca12ce54487a8e58f571f8b171699afc595f96d697f5f31699e6cf86ef350865c90e57ebd2aad5ce1489a63c5c92bfa9846a7d59fafd476abd96deaf492199c249b8ac87ea9195debc949ecc4a4b75ed181219cc6828ccafa28c6b7703ec3da81cc14a645247aceb43f85e831088b33b7543631a3a1b50405614cc816d3b6f1d48220802b4408823e6f99aa172e4e1dd2d38fa082f3ee74084032026b286bb8f3dd4021f52d8ce731c51d0a723690806d03c61ea88a75722c3b5a687efbe856e426f33c96780ec4eddd4ec0de8e7def47b4aed4b9eb71dd1cd3e9d418cc7c0000a4bf367b70d6e16a6efc1ee16b8afd0cd60e16cd3d182980003e83a61cf11cf3c9cf57174409141c1b9a6a3e0b13a1e8ce01b9d1988d84c72483db4f1c0432df0c34339053a18a782017a857f1e754bd332fb74fc7bdb9d35f31c70b9a362226b2e2f3c1e9a161934806a95b9ab55d376c4aa9ebe892662bcd7f0d089eca72935075428635dc04141eb80bc0951e0c69337de2b464c6b8b4f87a6694a6d3bcfd9ce730e0a0f2d0007cd2aa605b12ae3e6c7c6679a8e647f0e6839e2e6140607f4cb0b68519ae33788ef15163bb1f75fcd4af78d64c8746568a32aa1aa64ba829f3e727d824c60474391f70af671c3ec67ef7cf1b74f147f50d0c111b5fae4a34bcf8026ecb728bf0fdaa6ea18d549b4543fd574a2722a84f28603e3449c689bc73f4f61cad697ed9c033dfe1fc272f9c927868d7e020c208391b9f8d124b062f2680afed761fa172716db30bc6ced930000000049454e44ae426082</data> </image> <image name="image18"> ! <data format="PNG" length="839">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000030e49444154388d9d9541681c5518c77f9b26328b5a66a42dbb60610a5b480603a6a736e0a1072ff596e241eb41144f3d49e9c18307893d485aa5a53908f6a0b51e349d83843d14f410e82acaaeb24926835d32122453129859dab2bbec2a7f0f33c9d23ab3a20f86df7b33ef7bf39fff7cdf7ba82fc993d497d653ee8deb0d4991a49aa44d491fd9d2ca92f4ce4c10d9bc2989bc8bf5e6a646b5ce8384ebee82d441f2e62449d19debeabc687c92b7f09833798cdc3680e2b3c04370267b701f78e4c21745ac3f438acf60e6858e35fc207fe109e80e000368bf9f7015b80fe1cd2bc47ff43ecf8d557fa41349fb762ef9c2af916a8674d194164f6bf94e5db95678a31403ec0670d2859f818a91f0112cfa2770368e71f9da2d65858d8ff418a0dd00c300d380b51e1c32a98506e7bfba0c3eccfe32931936da63a0db7a034a06f8c04313d660f6e5f3345a014c82db72b303477a5c9b97644b2b2569b3242ddad207b6f45b9a829e74f7c67aa6cfa33d3e740302c03660cd002c6ae367e13804418833f57f14f723696b46eacc482b5352635e7a772a79b69dced97a5c71f223cc0949233cfef115386ac2af40c5848defc13845b8db853284610c47c1f55d0a05ebe942c13a0258c0738582353176222b2b566fc34be7e05e115e781bd62ce8b5e1b50b940f176117ca650b6f03ced867000e02079260630c38b8ef7177c090b60571039e37c0af42a584d73e05d34ea2f4303456031c1b6efb4f7adc0378ea718ff7fa3f2d48ba2b79af4b0f96a42ba7934cd8cb86663ab7292d5fad0bcc3294ca09cd329847861e0f18ee0df659080d98fa0cfc007cf008e138781b01ce24787e0015a8ee67450fa00fc452bc93adb8ba90d05b962e2d48cdf47eaa787fff6e4adf2dd605a609e681cc3ceea68a1940fc43c0ad8f3f846faa04af9e8369f0ee0d155301af15e04c43f5f72a52dc96e2bff2f338ed7f79f12de9d3a5e4d49086dc53bc957227bff2a8a72748a7a321bd8ea29d28a985ed849b5b09a32899b8bd93f0c27bf3d90b67565eff09a62f557a4c29fa77c5e35e2ba47d33c6c5c5c0a0478f39e6fed37816e71f35f6378a5aadfd39830cd40000000049454e44ae426082</data> </image> <image name="image19"> ! <data format="PNG" length="643">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000024a49444154388dad934f48937118c73f33cd6922b3ac1651bd4210eb0f2574c85ba388f0145207d73f8a3a24d56518857590d161a807432f6187e0152fc3932c08340aec204c62b0400fcb964d1af826235f4ac56f075f21456dce3df0e5e1f77b1e3ebf8787ef0f49aca914edeae6c8baf5ff68fde287db53b2da66d31d9cfbf7de8e725219daac4e8cfcc0d9c89824498979f5bb9b95f6dc54a661541a5e54d2f3dd3ccd0160c7e6c1a3fef792243b29c992ec88245b52488af304d807146f0edccd5ea9ed8be696665ecab6245352cba4af9a434065eeabe8c6a394af5d8afdd65cc2810e3bd994e49715e70de0058a72038f704149cf0fad193d925a24db69ef27046ccb0d1cc6a3116ea4877821d57e54b6212b25a5b98024b794755a5348368bc9573cda08bef2002ea00428b7c21c539a05092983943234d0c194c619d25b3e29ce78cb298eaeb7928d8d6ef15949a40cdf86870666038d01b92bdc97803d4025e001dc9b070fd1278bc5d8736e45c2915625a5dae3b531c76a25b9bb62b57a7960bde6a5032a554a3f83cd4179bdde6bc0cebcc189a59d972d7bb6e95ed31d49f29ff58f398f6dcf6fe23534181dccc4c23119878dfbc0ae8281cd56f3b25292f9cc9c04f603a505014bc28edba9aece2ed59da97b0a54170c1cb812382f5b0a3607a78183405941c092307bcdf1446742f517eb3b80ddabeb45e419337d3357a30b5185ae87ee02152e97ab7c4543be134bc2308cbe506b4881c6408ff31b5d5b9e18606262e231ef98af316a1a01b723008ab70296f4b5aaaaeaa1ef97ef04300dfc59aefd05fc8c7767e2e9d7fc0000000049454e44ae426082</data> </image> <image name="image20"> ! <data format="PNG" length="518">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001cd49444154388d9d95bf4ac35014c6bf943a74e8e0e0505070f6110a2e5d1d1d0bbe83f8243e8262b64a9748b70c0e5d040521411c2c38b450e14622dc485af81c6e6efedfa6f5c0e5dc43c2c92f5fbe7b0292a04f3224bd2497eb3bdb2149ecb2d4266425a4545908a99adf8c766a0e92f0fc6a63d55525cf27297723b748023f20ba28c60ac01e100411be27bf98aea718b4fb70d72e8617e7169a22d5b82e1239b8241993de33397f145b51b700008786a77680e827020e00ff6d869363c09d4d1b615362a3c632a7718d5bb8c1354657e8a6f34fc14dd733d7149b573476ae1d32269deb11b94cea06d7b0c63555e298742e4794a142124b594f1c67c4735bf0ee66c40f5ba4e4b51a5f5d5e15889abe81760d73aea910eba63a6b0d4da1dfcc7bfd204576428b1ac72592b041637ddfbbda7bfe06623d23528d4bc4caa1861cd3a0b12c6583c6ba1997a5fa33236e0140e725807dfb80c538807d7b8fd938a927aa3ec99fcc954afa44065f010060b1088023c09db9b959d1b4fc12ad4cb22811cf4bc48d91239692400790a104f601cbb2405291f772b3641b626f836bf25aef4c9c6abc074411b2a9d755f33ad5baf75f8d0daea9236e6f43bc7809e03eb9e8b707853f89a91e9e9ee10f22354000b36c937d0000000049454e44ae426082</data> </image> <image name="image21"> ! <data format="PNG" length="1240">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000049f49444154388d85955f8854551cc73f7b3d23e7eeeec89ddad5bda49be39f60c68a9d690aef946203662a062a482804b9fa904104811429250852e14bb11ba4ee5bf49019084ea1b88ab5b386ec8cab39639bec482dcee62e7b6fb9ee3dbad73d3d8cb99baef57df9de732ebf0fdf7338e7fc6af80f5d4a39a138894682828da0361f2892c2f1090a83be94d76bcf9ebafdb0da9a87425b124e5cc84dc540b5c4856c2e06aa2e2e24f9408d2585fc3d1fa8dea490875b13b1ae8e031d77fe17ac53cec222bc1d27b199fa9245628d4130082f6e06b704ca82b34760283ac170d607ba7282bda5d5addddb3ed8164c9b52a79cc72fb524b23ae5e891d7b76a9dbba6c7fafab5d65aebbfc626fdb6d6639d5d5abf7758f72f75b44e39c5934b9d753bb6ef10d341175e4a3959bde2fd3bfaa34fb41ed15a5fabb21eea7d5aebe3fd5abfbc6642a79c5f4e2e755e38b8e7a00130e31ff0a6d98dfbe28678d55f15ab09bdf12ea80a0c07f817ba092d88e2ff5626f44804bfbf4ca821827ba613535af8964b68d64b35e59f8f3f9abc1d84daead409e719677c06404f8be33c2d9eddc753b60c6dff1044083c014f84092d8e42f618a105cf413f846647e0cc31ccb5ab608e4968b81ec257895831b8d03d7ff9f0686f764eb86cf4b4244249c1a6727d6916a956dc816eb081452684ee2e67fd5adcb3df80f4abbe7eede41ec64c285954ea3d6888844b81b72136e4594652388d04b444ad8c815526521f836f8f4d4201c621b27e235ce9acfafdfa713ff679173cdf48e32cb13db7d9c807dd36826637520615c3bd9885a128952f0e558b7cff5fc9ef97bf790bfc5a86735910900fbaed3466b39114b2b6185017599401ef5435b13a85dd98804fdbc034a73d9a00acde883914ad7e8b34049014d2cce3878d7ca0880b702f77c2601395f35918f5abc9079af0b7b64e0f5d9681511754eeee440e0414034552988651bdfb8c4586a270f508b6b2e07c81c8b084420766c7a1e9c13f744e269de271e1a81cdcaae96949cc4d0af9a52f586ed647260b05f0ddb1876fc3d4e4c2047c5090575e2f4df63b464c5ad7f381ea35494f20244807849c1eba2c53f5f1fb924b09f519404dc4a4ec3b12b62a46edd953b793421e2e06b93f91e047cab0cca99e8629f25f6b85c5d1aa8778402e0508b89915f2846b592306c09b8944571cbec673319fcc80e7c157dd93553b7761a6d640838dd9b20676ee9afcd7d1098ba3444663e4a0d35bb92507dcb8f76c76a59c781a3e2b36d92be289ad464596b0814aa0b0459a4a90c316f2c1b152d8170b13b981728f6cb03f6e9bd7745a22ab89014aeb5a2fbb82b7e2839533c573edd8320ad2c48e654096eefa7d63cfc32e407ea0d2239b36ec3b346ffe4fe9b969affd40fbc4bdd7ede8e9a3fac6ea5746181e2c3c3faa6a8b570af31b6faa996535581399b51c77b48039d3a132728eb0e752ce652722974aa3b9e1c2f76276e3e76d8f05e704e2faeefdbbc7619a0e7270cf41233f90afdb7bb19429056a439ac41228d85819331fe448aa984215aefb92beac9027bc955b72f981fc1fc9b9496f6a0799b6e7edd8bea346a166c6863ccbf6dce63466731e3f9c14a691835b31c1e091b0acb856d38842dd9048bffd40fbc454c6dfb7e72ae0ffedbe050000000049454e44ae426082</data> </image> <image name="image22"> ! <data format="PNG" length="798">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002e549444154388d95944f685c5514c67fdadbe47be145ef944998d1b10d2ea4a1597488a550ba9982085949366e142158178a425751a4456a715b10ac6b0517a568e9422c880b0589a230295dd44d4d9071e6b57da40f33b427e3eb3c1733d176fec4cc078fb3b9f7f7be732edf81d1f40cf03a700d4706dc073e008211398fe828f00370af0bcdbaf517a0d47bd8ed02388ee3a49c9681120e484112961ac05f96dadfa3821df09a97ff08c7a45c17a62edca99d34931bc0e628e0c7818542be705ad2240e2c35bcf390766e2649d210ba68d8bd51c0d33ef4cb0a550ad4799b80a00315dc6ddec5cc2e596a2bc35c0dd263c07ee0502ecc21894a584112f2026863fc68a99da7f3ab3eed19023e024c5bcbae5bdb8e16a78b413416118e85586adca9dfa94671f4266d7e1bd66e9f63393da950ef78ef3fc6f1a735edc324495a0b7e01c31e346a8dd52889de02568741b75b7e44defbb962bef8b3bc26ac69f5b5dadabb72dae7f3fe64144557ac699f001bc00c300edcea7ed9c39cbec72b168acee7fdc46279919568e5294967ababd557ac69df596abf0365e0bc9c0e5a6a7b71dc20e56da0be5307e02895e7ca57175f5afca372bcb2a250ef034f0007802f80fb3dc9cb80c33b43ff1bcf7ee0389ddde08079395d05323965b89eba4b70afe625ad4b6afbd0670a956d5785ca70fcda35d0d3f8ce2a493aa75007e40480d0769c31b32de0b261d128e07139bde1bdaf28d4bf317eb85ad3ae596a9f017d4b6858f200260d7b51d2784e39723e47a08013fe048102ccec5662c919a036e8f2b0e44d01cfd3e6ba9995a7f64de5342134266ad4d86c6ec6f1edf85cda4a2f01ed4180418ef7487ad97bffb9a4294b6db91135eac774acb38313abafafafbf67669f0e1ac14ecacf9466be2e1f2e67b307673714ea94a4570ba5c2cd42a9f0ada41780bdff07e98b34f0ececdcec374b95a5e7aa7115bfe6b72efc746109f81e8881adddb81b34e35638113e1db7e2f93889b7aab7ab5f261bc957c04de0c16ea000ff001f1c1c9adfbea3800000000049454e44ae426082</data> </image> <image name="image23"> ! <data format="PNG" length="1018">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003c149444154388d8d944f681c6518c67f895166a0956f6017662091fd4a0afd860a9df50fb6f490062fb608a13dd51edcb6786845448b8712a448aefe43484faddb68a2a00df6a0b9652d141350cc06941d694a27909219d6253398c51934f079d86413954ef3c2cbc30ceffce69967de991ead355b35fd75ada40af28a9f30220b88a0d540d92e7ec4a2124cb8c7e4c7ecb27ab6c0539f4d57649ffa283423a14a1e5116a00a0abfe52385a4b15cc7e9b317eb2bfed9f3e74e2dee0a3c7e75aae20da86a6c3894fb05413b40d92e592b0541e7b8e0922dc784ed20995ff2bdd72f9e59ce033fd6f7c44049edd9ff4d626d18cfef93847f053c5d7259f933c0b18bf8d112f249c94ab2c4c0bea7b8f74768145b7b0fc9670626f2c0bd4ac837132b16e59222cc4cca832ee606b852e24770e4808b919928db2568c1f0c13271311e9abe5a3b940baeb71646bcc1324112a0fa216cc75084344d9102c224c6ea87280b71fb2168870c3f3b4c3d9a7b35df714195a27688672b48c0295a9082699a1819388e056d90b6d3d182836598c83d32df71d05e4616247e12909132f74b83b40d8da500b31fe2f5149ced27d952ff413d8f4bafd36743024a4882ccc4eb772101b72421036baf0931389605ebdb6aef91f9e0b9dfe69711e0270116317e1460da10b44230208e63b03a99b3b7a3691beacb0bb9bbdc6b85f6adda4f3554c1c5c88ccec7d0ea64490296b59d397474fccb719c7595bf6e0b6dffbddaedf9a4fe6001619b04ad06526c3a169b8e4d48ffee5cd0f003fcc506a99325b9e0daf7d79370253eebdff1a9470dca9b194bb1c3f13a988f43c38799cf679007ca9407bddcade8fe2b868f9d1f91fbadeaf1978e89e3432788da21d276089318a76831f5c534b5dbf3a841c5117b98209966381a67a19ddd38f14978f6a1e04db85086bc9214c3912383e5529004c8826466be76bbb4a126ace79c4569d8224ce6ab278d7ac92d85a449c0ccafc68d539ffe07aeb5466b8d318736eea28d39f4d6b987f5ec693b5efb7154ebe6b77aedabc37aedb2d0d74edbd59d33bddd3b14e03b3186b194975ca7fc94b7923b334084357409cb539c3c9855de7fd9a97687763a5dd563daf8806ee7b91e7dd1aefcfc8ea775f39ad6cd9b7a6dcad3ab6f083d3ad4718e71173ddb1cd3ab7a52dfdfd4d9e69816138f8ee4d251bbf2c3bb9ed6cd49ad9b37b59e3aacef5f16fae20b7695aec339f4aa9edcb5e3ad3e774854662f6cc2576fead5eb9ebe78b4b43db0e57c374eff0fb72bb3973dadef5fd393afbda22f5d18d5dd75333fece9ee5dfab6ee79f42bfc779df1acaa308c0aea0cd1eff2d63f87537e1d1d034ec80000000049454e44ae426082</data> </image> <image name="image24"> ! <data format="PNG" length="987">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003a249444154388dad944f681c551cc73f895166209119d8851948645f49a16fa8d059ff60828764f1d21621b4a792831b839716110d1e4a9052aa78b128427aaa6ea35d056db00789a7ac8162028ad980b2234de904523ac3ba6406b33883069e874d9aaa64ace20f1e5f1ebcf7e1fbfbf27baf4b29c56ecd7d5e2bc89c38e7c58c891c86df6a202d072f64551acc3aa3e23d1eb0ba76c1d58fe6caa247be1be8a1210b2e61ea237312afe5210c4163bd8edd63add637bc89c9174fae3e1078e652b5ec0ec84aa4d914fb0dfcb68fb41cd25602069d7dce215d8f08da7ebcbce6b9674e8faf67811fea7964a0207b0f7e119bdbdad30704c16f3e8f171c367ef5b1ad3c5eb8867854b011af3170e0316efd1268f956df11f1c4c06c16b85b1ae295d88c8c624112a43ac541077d1b1c21f042183ee4a0a53ad272f05b503a5c24ca472373976a4732c1f5d6ca983b58c48f7d643f04ed08f2902409c280208e30fb214c039c7ef0db01a5274bd4c3a517b21de764216c07b8968418ecbc0909e8ba8e96826d9bd00661d91dcdd9989a8ee815d98efdf63a2227f0629f9484a51f1a246d68acf9e8fd106d2560ef75b2abde9d7a16976ebbc78218a421f0531db7df81189c828014cc3e1d22b04d13b6f6d4ea15d9e0a59f96d731c08b7d4c22bcd047b7c06f05a0411445607632a7afa3491beaeb2b99b3dc6d06d6f5da773564ce414bb5ce636875b22406d3dccb1c3a3af3e90cf696cc1eb795b677beb6b81cd7efac60583a7eab8130761c1b3b8e75487eef5c68783ede6a83c44ee34c70edeb0fe260239af06e78d4c306c59d8c85719fe32dd01f868607f31fcf230e15290eba995371efaf288d4e8e898366e5d8d151e3d8c871c27680b06c8238c2ce9b543f99a3b6b88c1c940c5b25fc788e5238c34a3bbd72fcfd60625ff00edc909a3817e783b1e1c162c18f7d444e30bf5c5b2c6ccb59f3297b55689611c4cb95135abde0140292d867fe47edcac90fff02574afdebb570ca8a36bf9d56aaf9a5dafc6c486d9e35d4e55356e5fe33dd5939ed575ec2abf18d7920c41c99c27425270ea7e5779eb72bf70e694b28ed26ea6f7a1195e57afa39abfcfdebae52cdcb4a35afa9cdaaabeebe6ca8e9918e73b49ba885e60575575d55b77774a1794119b3d960a51453cf5ae56fde70956a5e55aa794da9ea90ba7dd650a79fb12a5dda45d47e2d27afa9ae7f8a65d235cbe343a2523a3f05db1ac1576ff16625faf354fcd79a74edf2f851bb527ae90cd5b76bd47bc4ff03061877cd8aa16965e438e1cfe2fa1f71f51d3dc3f0e3b40000000049454e44ae426082</data> </image> <image name="image25"> ! <data format="PNG" length="269">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000d449444154388ded52b10dc230103ca3145f50a474493a188151e20d3283b764009794281b1c4512634c1c631251204e7a4556fecfe7fb03fe4880ce3996cef0c6c519d291c1b784344f5ea03826cb926f0e4e15dcccb8a21711d5ecdca3c1769674a4edec5353bdafbde7a635d45afb5d98d6f8be78ce13c74aa6b388a4bc9c53f8b2a3e42262c5284c4fd24b1189ffe19d88ed3cf38d00a0c64253370000a9041cee50a63583887e1cea91c52a8f79b9aa04cf671eaf49453ec7f3f9df0e87605f9be13c2e1c00783ca9a5de1f830e9efe75dc0116de21787aaa5df80000000049454e44ae426082</data> </image> <image name="image26"> ! <data format="PNG" length="803">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000002ea49444154388da5935d68537718879f24a7e19c7aa22d6b5c225612d1d5785189d2611491da8b4957985377a317a255c40fe6c6ae46ddc62e763110648c3126d60bdd840ddac956a2186c1d655557d264c5e4a8753dd16639671ad7437b48cedc69febb707e0cf46acfcdcbcbfbf25cfd7e1e2104ff07cfc01688023a1076081832db572f8f6dd61a626df148346029320df78db9cced2b379343dac5de2c672d17fd8921b71b06ba20b785cda58f13bf88c9b4b89417e2cf87424c96c4532a42887c4e4c7eb6e76ee762ba9f0806ba20fd167b4bfd076b8f7fb70e0a911814229614e2e7b19c10c91e21464e0a31f8b510339342240fd61221de06f0f5ac647df3faf66fa7acc09ddee3efe7db24639e1349d43786ea901fc23bcb6c487d009e0ca4fb21be03966ef474aae39bbeb95c18f275bf1939195eb2b265e3bba7770f8d973f3272c391a307e26b36a1b12d6482ad41cbabe06f86d82b5071201427a0d892994e2df07df561f797756dadfe371a58b5a165b66bd7ceb60ee5a5603d7e05caa3e0ad037b0ad420cc18e04f829c01b7c8dfd7a71a3da5de4425bca747c1c8003258264855285ba00265e7e99401690c36c46054433fe3ccfa42f7caf3d77927d6126ef65231400a805900bf0ae6c4a3bda483b70cbf1be06b85711b2c0b2d6fffe54b15dd4b17478ad7c67e1a9e5be7b557280147a2de05730afc0efca1c38c0596c5b40b9935efa1b6eec7ba7602eb57fb810fa058e1b7d122e77eb85aceb537cdb60783b28a3f0cf74d080421f03a2c08f34525c3a71d2aa76be751ee6a6817dc11efb3b1d46cce6dffdcdc377d4577b135b0abe4270ec18a63e8d3c7d866c9448b8344250db20efd052efc47f0afe4c74fce9b6771ab203928669cfcf76064c3444de84b99f41dd721c558c6a2cff7bc82e833641b1f58afad7ed90dcafe61162d6942ad1c46516f502db97c97726f1dce72c4ad31ee7951cb1a2496764638d4b9980e4766614cc693b1a8e60ba44e15e875200dccbd50f00c4d3c4a8207a801f780eae3e33f26c55cfb92612aca0000000049454e44ae426082</data> </image> <image name="image27"> ! <data format="PNG" length="910">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035549444154388da5d141681c551cc7f16fea086f6423efc10676c142565ac8d2cba4d243b708bb911e123d48b5784d0f5e7a2fa178b0218a942025b41e849435103c68494596289564448c0b96984549b607d914846e308bf3a843e60f1d981e66834d1ac95a7f97ffccbc3f9ff79ff7fad89795e5f5359d713d93d3045640046ba3cf70983c3372e2fefefe9e53fb7aa5dada7890ecc9c32459bab39a2c2dae8e3f330c70eb8ba56aebd77d7892242b77d693dac26af97fe1f373b5eafacfadbdf24e92cccfd5367b9b6e6ea93afb69cd3b686df666ed766be3af3df6ea0fade4dffa9fcc1189a37185ebdf9899dfd37c6366decb2953cebda4d20f8fba0b1920a67c28ac8d616cf4b4d64afbd357537cfaeabc97cb16fc91d19276fb5d88badd11988c2608ad3e14de0a024cd6a55439a95d943f35393b9ed7da2f558ada551004a91a8469ddf8bd89c4eafea13021360a2372d93c95d1922e0e16aa63674b5a2b431446285ca2906e8db06d41427b28fcdcf16269c8f46bcf7dd1c1e80cf9a303382f28c29d0e388a702704073a0f3b6cff69718de28f56c7bbf94ed39d787de0dec78b1d397062859a5cf8c6b7120a120a0ad5adfa9f772b045b82b511da713937f493973baaaf11e33ff86478cf792749a201fa002ebe3beda1f0df3a3ba2738306a334416c314e5add58118401266308d63e201ffbd069a34f1568de958681cacb134dfbe4067dbb0f172f4c7b36b6d70ab9425969455e6bda9d2d148ab1d11226ab69d73f241f2fa3ed26ae0262888e17d9bc6b1b38aa726262cd3e05efe6dcf9f706156a5090b282ef05743157a88e79bfe842eca39c364629400045140b0ce4a9d76968a8bc32954efe147c506e5d1abe72f2987abf30b0091905b180a320061c20142227cf5a5d1a3854ce4c356d4ff0cae5a20e62fcd2693c938d40b9bb034318a5b84014ba2cd769b850e9090658ba5cd481e08fbcaa3c73ac8b76042482b6c0f3400682ed3ccb0df9ea48aff06b1f35ad8aa92c7e278d604dba534629deb1f0b7c0a6c59836c6e1cd9e618037ae37ad72a82cfc4823a8a7bf4f5681487adedd4444fc2718e0edebe9e49f7f2b8df66f026d0ba3c360482f765b10ebf676790765f642518be08f0d055e216b41a5932fdfcbd1ecb893cf0c034c9f2f6a1e713bdf4f192740c4d82066e6d297cd2b8f01fc65b3f0e89015950000000049454e44ae426082</data> </image> </images> --- 905,1081 ---- </property> </action> + <action> + <property name="name"> + <cstring>helpIntroAction</cstring> + </property> + <property name="text"> + <string>Introduction</string> + </property> + <property name="menuText"> + <string>Introduction</string> + </property> + </action> + <action> + <property name="name"> + <cstring>helpUsageAction</cstring> + </property> + <property name="text"> + <string>Using QCalc</string> + </property> + <property name="menuText"> + <string>Using QCalc</string> + </property> + </action> + <action> + <property name="name"> + <cstring>helpEvaluationAction</cstring> + </property> + <property name="text"> + <string>Formulas and Evaluation</string> + </property> + <property name="menuText"> + <string>Formulas and Evaluation</string> + </property> + </action> + <action> + <property name="name"> + <cstring>helpEditingAction</cstring> + </property> + <property name="text"> + <string>Editing</string> + </property> + <property name="menuText"> + <string>Editing</string> + </property> + </action> + <action> + <property name="name"> + <cstring>helpScriptAction</cstring> + </property> + <property name="text"> + <string>The Script</string> + </property> + <property name="menuText"> + <string>The Script</string> + </property> + </action> + <action> + <property name="name"> + <cstring>helpViewAction</cstring> + </property> + <property name="text"> + <string>View Options</string> + </property> + <property name="menuText"> + <string>View Options</string> + </property> + </action> + <action> + <property name="name"> + <cstring>helpCreditsAction</cstring> + </property> + <property name="text"> + <string>Credits</string> + </property> + <property name="menuText"> + <string>Credits</string> + </property> + </action> + <action> + <property name="name"> + <cstring>helpPrintingAction</cstring> + </property> + <property name="text"> + <string>Printing</string> + </property> + <property name="menuText"> + <string>Printing</string> + </property> + </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="2149">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af40000082c4944415458859d97616c5bd515c77f81647a4641f393d2c94f18e18792adb68a88ad322dded0146fa09132a99865d2d2e50361f0a11d1fbab693b6954da8043e906e0335888da608d664126bac6dc529a2cb038dc4e9686c476d639736f2b3522ff642649b24b2adc6f4ecc33390d024ed76a4abfffbeb3ee99c7bceb9e79c5b2722d4d5d5b191c8d3d849f3575c7c3b96069f13c8004e88656a3c0db8209206bfabc69d10c9807fd5ff9ff1341f979df4dff63b9ea9bb9101d16ea67c0af7169a416d843260e326b00ab6fa0d3003461adc657ebda901d2cd23b808e104be7f149a1e87860d6dbd7939ed816492f218ffbee506bf7a130b407b1b347540032492115882c4f9f5313211de74dfbc1c8107a29415b0c11d88c886dac77fc421398c48629f8888c8d56991c592484a445222a323e32257ad6f0bc745e64b6bf917f74b25eb3be196d14e64530ff8eb219106dc5d5036a0c183313641e2343cfb6783c8592fb129039c65b269039c5e62e9d01a6ee1e7dc4c8f5861cc4000d83c0455f0b880e408e4020c1e037b3580a9c1c15f0650141bca8297c4e4105aa30e9343f8ecee55fc181a0a89b7f7a3550a307618bd4983a56170b55306364dc2d2d33d2f190ef7531efb7e22d51801af8f83e7f790248e39631279284bdf9fc2f4bfb403ca11b0f9c95e1e446b09c2957e6834215d0197f219664f85d0ee5360a608af15d7f740e91d79ac744ea646bcfb9ef2b7edc75087a9b4c4192cf631d0d54ff0fe20dc0fc3c501fc0e3fe55361b079a11c46737ae1722fd835ebfe3707d6a0d6a2c04c1a9c458c955521887e30679794ec1d3552699c1c8b17cd7bcd66f869f271da5addb4b5b651fc4611f57d95039503e4c8d13ff12c45bbc9c8291f2c85c0e6233bd90bce02640c68e63acc662a16cf415b43cd80684c7eef736a26197... [truncated message content] | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 18:21:53
      
     | 
| Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv23150/doc Added Files: 1rightarrow.png Makefile fdl.html findreplace.png flag.png gplv2.html options.png print.png qcalc.xml qcalc1.png qcalc2.png Log Message: add online help --- NEW FILE: 1rightarrow.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: qcalc2.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: qcalc.xml --- <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" []> <book lang="en"> <bookinfo> <title>The QCalc Manual</title> <author> <firstname>Albert</firstname><surname>Gräf</surname> <affiliation><address><email>ag...@mu...</email></address></affiliation> </author> <copyright><year>2007</year><holder>Albert Gräf</holder></copyright> <date>2007-10-30</date> <releaseinfo>1.0</releaseinfo> <keywordset> <keyword>QCalc</keyword> <keyword>Spreadsheet</keyword> <keyword>Q programming language</keyword> <keyword>Q interpreter</keyword> <keyword>Qt/Q</keyword> </keywordset> <abstract> <para> QCalc is a spreadsheet program with the <ulink url="http://q-lang.sourceforge.net">Q programming language</ulink> under its hood. It lets you run <emphasis>all</emphasis> Q functions, no strings attached, and you can define your own functions in a script and use these in the spreadsheet, too. As such, it should be useful as an educational tool, or if you simply want to play around with the Q interpreter in a more convenient graphical and interactive environment. </para> </abstract> </bookinfo> <chapter id="intro"><title>Introduction</title> <para> QCalc is a spreadsheet program with Q as its underlying programming language. The present version is more a replacement frontend to the Q interpreter rather than a full-blown spreadsheet, so some functionality you know from other spreadsheets may still be missing or be implemented in a slightly different way. But if you've ever worked with MS Excel or its OpenOffice and KOffice equivalents, you should feel right at home. The only major difference is that each cell may hold either text, a number <emphasis>or</emphasis> any Q value. </para> <para> Also note that there's only one spreadsheet (of fixed size) and one script per file in the current implementation. But the provided 128x26 cells should be plenty for most purposes, considering that each cell may hold an arbitrarily complex Q value. And the user script may import other source files as necessary, using Q's import/include statements, so the single script page doesn't really limit what you can do. </para> <para> After installing the program, you can simply fire it up using the command <command>qcalc</command> or <command>qcalc mysheet.qcalc</command>. To exit the program, use the <guimenuitem>Quit</guimenuitem> option of the <guimenu>File</guimenu> menu or just press <keycap>Ctrl-Q</keycap>; you will be warned and get a chance to abort the operation if the current file hasn't be saved yet. </para> </chapter> <chapter id="usage"><title>Using QCalc</title> <para> More complete documentation still needs to be written, but if you have ever used another spreadsheet program then the basic paradigm should be familar and using QCalc should be rather straightforward. In the following we discuss the most important aspects of QCalc's operation, which will hopefully provide you with enough information to get started. </para> <para> The following screenshot shows QCalc in action: </para> <screenshot> <graphic fileref="qcalc1.png" align="center"/> </screenshot> <para> QCalc is a standard Qt application with menu, toolbar, main area (showing the spreadsheet by default) and a status bar which displays helpful status information. The spreadsheet takes the form of a table with columns numbered <guilabel>A</guilabel>, <guilabel>B</guilabel>, etc., and rows <guilabel>1</guilabel>, <guilabel>2</guilabel> etc. The table is browsed with the usual mouse and keyboard operations. </para> <para> The <guimenuitem>File</guimenuitem> menu provides the necessary operations to create new spreadsheets and load, save and print them. QCalc saves its spreadsheets in a text format which is in fact valid Q script syntax, but uses the <filename>.qcalc</filename> extension by default. (The contents of the spreadsheet are stored as comments at the beginning of the script; it goes without saying that you shouldn't remove or alter these lines if you edit the file with a text editor!) It is also possible to open any plain Q script, which then becomes an empty spreadsheet with the given Q source as the user script. </para> <section id="evaluation"><title>Formulas and Evaluation</title> <para> Q expressions to be evaluated are written in the customary "<literal>= <varname>expr</varname></literal>" format. (Note that the <literal>=</literal> symbol must be the first character, the formula won't be recognized as such if it is preceded by whitespace). Thus, e.g., if you have the literal values <literal>1</literal> and <literal>2</literal> in cells A1 and B1, and A2 contains "<literal>= A1+B2</literal>", then you will get the value <literal>3</literal> there. The cell will also show a little arrow symbol to indicate that there is a computed value there, so it will actually look like "<inlinegraphic fileref="1rightarrow.png"/><literal> 3</literal>". </para> <para> In your formulas you can use relative and absolute cell references like A1, B$2, $C5 or $E$9 just like in any other spreadsheet. These work exactly the same, as far as evaluation is concerned, but behave differently when they are copied or filled (see <xref linkend="editing"/> below). You can also employ ranges of the form A1:A10, which are mapped to Q lists (or lists of lists, if they span multiple rows <emphasis>and</emphasis> columns, as in B5:C12). </para> <para> You can also do calculations with strings, of course, using Q's string operators and functions, but note that to get an empty string value you'll have to use the formula '<literal>= ""</literal>'. That's because the value of an empty cell defaults to the integer 0 (rather than the empty string) in calculations. </para> <para> In fact, this spreadsheet is much more powerful than others in that cells can hold <emphasis>any</emphasis> Q value and you can do calculations with <emphasis>any</emphasis> kind of Q data, including "infinite" values such as streams (lazy lists). And, because of Q's term rewriting heritage, you can do symbolic calculations, too! </para> <para> Also note that if an expression doesn't evaluate because some arguments don't match, this is not an error in Q – the expression is then considered a normal form and will be printed "as is". So, if the computed value in a cell looks "weird", take a second look at the computed formula; you will always find that there's something in there which "doesn't compute", as they say. Actually, this feature is quite useful, as it really shows you where your computation went wrong, instead of just giving you some silly error message. </para> <para> On the other hand, it <emphasis>is</emphasis> an error if an expression doesn't have a value, either because it is not valid Q syntax, or because it raises an exception (e.g., by calling <literal>halt</literal> or <literal>throw</literal>) when evaluated. In the former case, the cell will just show the formula as literal text (without the arrow symbol). The latter kind of error is flagged (quite literally) with a little red flag instead of the arrow symbol, showing the offending formula as the contents of the cell: "<inlinegraphic fileref="flag.png"/> <literal>= halt</literal>". (Currently QCalc doesn't show you the actual exception raised by an expression, but you can easily find out about these by making judicious use of Q's built-in <literal>catch</literal> function.) </para> <para> When you enter a new or edit an existing cell value, the evaluation algorithm used by QCalc will only reevaluate the cells affected by this change. Cyclic computations (e.g., if cell A1 is computed using A1 itself, or if there is a cyclic chain of cell dependencies, such as A1=A2+1 and A2=A1-1) are not permitted; the red flag will appear on all affected cells in such cases, and you will have to edit (at least) one of the cells to break the cycle. </para> <para> The entire spreadsheet is reevaluated each time it is loaded, or when you recompile the script of the spreadsheet (see <xref linkend="script"/> below). </para> <para> Note that QCalc doesn't limit your spreadsheet to operations which always terminate. If a computation (indicated by the status message <guilabel>Computing...</guilabel>) takes longer than expected, or just loops indefinitely, you can abort it with <keycap>Ctrl-G</keycap> (this is the only operation active while an evaluation is in progress), and correct the offending spreadsheet cells and/or definitions in the script. In the latter case you can then force a reevaluation of the entire spreadsheet by recompiling the script with <keycap>F9</keycap> (see <xref linkend="script"/> below). </para> </section> <section id="editing"><title>Editing</title> <para> The editing operations provided by QCalc are rather straightforward. You can browse through your spreadsheet with the mouse or the cursor keys. <keycap>F3</keycap> edits a cell, <keycap>Esc</keycap> aborts the edit (reverting the cell to its previous value), and <keycap>F2</keycap> or <keycap>Return</keycap> stores the edited value (and does any necessary computations). You can also force reevaluation of a cell by pressing <keycap>F2</keycap> while the cell is selected. There are menu operations and toolbar buttons to achieve the same, and a double click opens a cell for editing. You can also just start typing when a cell is selected, to overwrite its current value. All editing is done in place, right there in the cell; there is no separate line edit control as in other spreadsheets. Cell indices and formulas are shown in the status line when you click on them. </para> <para> Rectangular ranges of spreadsheet cells can be selected by sweeping the mouse over them as usual. You can also click a row or column header to select the entire row or column. Such ranges can be cut, copied and pasted as usual, also between different instances of QCalc, with automatic adjustment of relative column and row indices in formulas. Thus, if you copy a cell containing the formula "<literal>= foo A1</literal>" to a position at an offset of, say, 2 rows and 3 columns from the original position, it will become "<literal>= foo D3</literal>". As usual, you can use the $ symbol to indicate absolute row or column indices (or both) which will not be adjusted. </para> <para> The <guimenuitem>Copy</guimenuitem> operation only works with the QCalc program, but there is also a second "<guimenuitem>Copy values</guimenuitem>" operation to just copy the literal cell contents (without the formulas). This uses a tab-delimited textual format to store the selection in the clipboard, which can readily be pasted into almost any other application, including text editors and other spreadsheet programs, just as well as QCalc. On X11, the global selection is also supported; just select a range of cells, and you can paste their contents in textual format into any other application with the middle mouse button. </para> <para> There's also a special <guimenuitem>Fill</guimenuitem> operation which basically works like dragging the little "hook" in other spreadsheets to copy a value or formula to adjacent cells. To use this, select the range (a sequence of cells in either a single row or column) that you want, with the value to be copied in the topmost or leftmost selected cell, and then just push the <guibutton>Fill</guibutton> button (the one with the magic wand symbol on it), or press <keycap>Ctrl-L</keycap>. This will copy the formula in the principal cell to the adjacent cells, adjusting it across the range as usual. The same operation also allows you to fill a series of cells with an arithmetic sequence. For this purpose, the topmost/leftmost one or two cell values determine the first member(s) of the sequence. </para> <para> Note that drag and drop of selected cells isn't currently supported, but cut/copy/paste works just as well for most purposes. </para> <para> Last but not least, there's also an unlimited undo/redo facility, so if you mess up your spreadsheet you can always go back and forth in time as needed. </para> </section> <section id="script"><title>The Script</title> <para> You get to the script page by switching to the corresponding tab located right below the menu and toolbar. You then see the following: </para> <screenshot> <graphic fileref="qcalc2.png" align="center"/> </screenshot> <para> In the upper pane of the script page, there is a full-featured text editor with syntax highlighting for Q scripts. In the editor you can enter any Q script, which is submitted to the Q compiler when you invoke the Compile operation (<keycap>F9</keycap>). If there are any errors or warning messages, they will be shown in the lower "log" pane of the script page. (The log pane is also used to show output produced by Q's I/O operations like <literal>puts</literal> or <literal>printf</literal>. But note that the log is just that, a log of everything that is printed either by the Q compiler or the operations in your spreadsheet; it's <emphasis>not</emphasis> an interactive kind of terminal window, so it isn't possible to enter any input to operations like <literal>gets</literal> and <literal>scanf</literal> there. Also note that the log is cleared automatically whenever you recompile your script or load a new spreadsheet.) </para> <para> You <emphasis>must</emphasis> correct all errors in your script before you can evaluate anything. As soon as your script is error-free, after pressing <keycap>F9</keycap> the entire spreadsheet will be reevaluated, using the definitions from your script. </para> <para> For instance, if you want to use a function <literal>square</literal> in your spreadsheet, which isn't provided by the Q library, you can define it yourself as follows: <programlisting><![CDATA[square X = X*X; ]]></programlisting> </para> <para> Enter this definition in the script editor and press <keycap>F9</keycap>. Voila, the new function is now available and you can use it in your spreadsheet just like any other function. E.g., you can now type the formula "<literal>= square 9</literal>" into a cell and it will evaluate to 81. </para> <para> NOTE: With the Qt3 highlighting engine, the syntax highlighting of the script editor can slow things down quite a bit with large scripts. As a remedy, if the highlighting makes the editor unresponsive and sluggish, you can disable it with the <guimenuitem>Syntax highlighting</guimenuitem> toggle (<keycap>Ctrl-H</keycap>). </para> <para> The script editor has two additional editing operations provided for your convenience, the <guimenuitem>Find/Replace</guimenuitem> dialog (<keycap>Ctrl-F</keycap>) which lets you, well, find text and replace it, and the "Goto line" (<keycap>F5</keycap>) operation to locate the given line number, which comes in handy to find the lines listed in compiler error messages. </para> <para> The <guimenuitem>Find/Replace</guimenuitem> dialog looks as follows: </para> <screenshot> <graphic fileref="findreplace.png" align="center"/> </screenshot> <para> Just enter the text to be searched and, if applicable, the replacement text in the corresponding fields and hit the <guibutton>Next</guibutton> button to search for the first occurrence behind the cursor, or press the <keycap>Return</keycap> key. Keep on pushing <guibutton>Next</guibutton> or <keycap>Return</keycap> to search for further occurrences, or push <guimenuitem>Replace</guimenuitem> to perform a replacement <emphasis>and</emphasis> search for the next occurrence. Backward searches and replacements work analogously, using the <guibutton>Prev</guibutton> button instead of <guibutton>Next</guibutton>. (You can switch the search direction at any time.) There are also various options which determine whether the search is case-sensitive and/or for whole words only, and whether to preserve the case of replaced text (which works as in Emacs). </para> </section> <section id="view"><title>View Options</title> <para> There are a few options which allow you to change the visual appearance of spreadsheet and script display: </para> <itemizedlist> <listitem> <para> Row and column sizes can be changed by dragging the borders in the row and column headers, and you can also quickly adjust the size by double-clicking on the border. The sizes will be remembered on a per-file basis when the spreadsheet is saved and then reloaded. </para> </listitem> <listitem> <para> You can also change the font of the spreadsheet or the text editor by selecting the corresponding tab and invoking the <guimenuitem>Choose font</guimenuitem> operation. Fixed width fonts seem to work best for most purposes, although YMMV. Also note that the fonts are also used for printing, see below. </para> </listitem> <listitem> <para> The <guimenuitem>Zoom in</guimenuitem> and <guimenuitem>Zoom out</guimenuitem> (<keycap>Ctrl-+</keycap> and <keycap>Ctrl--</keycap>) commands allow you to quickly change the font size on either the sheet or the script page, and, as already mentioned, the <guimenuitem>Syntax highlighting</guimenuitem> toggle (<keycap>Ctrl-H</keycap>) switches syntax highlighting in the script editor on and off. These settings are global and are remembered across invocations of the program. </para> </listitem> </itemizedlist> <para> Also note that cell formatting is fixed in the current implementation. In particular, the format used for displaying floating point numbers (<literal>"%0.6g"</literal> by default) is hard-coded (see the <literal>FFORMAT</literal> variable at the beginning of the <filename>qcalc.q</filename> script), but you can easily change this in <filename>qcalc.q</filename> if you know what you are doing. </para> </section> <section id="printing"><title>Printing</title> <para> You can print a spreadsheet with the <guimenuitem>Print</guimenuitem> (<keycap>Ctrl-P</keycap>) command in the <guimenu>File</guimenu> menu. This isn't very sophisticated right now, and it isn't "WYSIWYG" either, but at least it does simple pagination and adds some formatting. After invoking this operation, QCalc shows Qt's standard printer setup dialog: </para> <screenshot> <graphic fileref="print.png" align="center"/> </screenshot> <para> This lets you choose the target printer or file, paper format and the range of pages to be printed. If you selected a cell range before the operation, you also have the option to just print the selection. </para> <para> There is a second "<guimenuitem>Print options</guimenuitem>" dialog, also available in the <guimenu>File</guimenu> menu: </para> <screenshot> <graphic fileref="options.png" align="center"/> </screenshot> <para> Here you can choose which parts of the document should be printed (spreadsheet, script, or both) and whether to print just the cell values, just the formulas, or both. There are also configurable headers and footers which can show the spreadsheet filename and running page numbers, and for the script printout you can enable or disable the line numbering. These options are remembered across invocations, whereas the printer setup only sticks for the duration of the QCalc session. </para> </section> </chapter> <chapter id="credits"><title>Credits and License</title> <para> QCalc is Copyright © 2007 Albert Gräf and is distributed under the <ulink url="gplv2.html">GNU General Public License</ulink>. This document is Copyright © 2007 Albert Gräf. The documentation is licensed under the terms of the <ulink url="fdl.html">GNU Free Documentation License</ulink>. </para> <para> Special thanks are due to Eddie Rucker from the Blue Montain College for testing, reporting bugs and providing examples. </para> </chapter> <appendix id="installation"><title>Installation</title> <sect1 id="getting"><title>How to obtain QCalc</title> <para> QCalc is available together with the other Qt/Q applications as a source tarball, as well as source and binary RPM packages, from the Q website at <ulink url="http://q-lang.sourceforge.net">http://q-lang.sourceforge.net</ulink>. </para> </sect1> <sect1 id="requirements"><title>Requirements</title> <para> You'll need the Q programming system, including Qt/Q module, available from the Q website at <ulink url="http://q-lang.sourceforge.net">http://q-lang.sourceforge.net</ulink>. Currently this script needs Qt3 (<ulink url="http://trolltech.com">http://trolltech.com</ulink>), but we're planning to port it to Qt4 asap. </para> </sect1> <sect1 id="installing"><title>Installation Process</title> <para> As with other plain Q scripts, there's no compilation, so just run <command>make install</command> when installing from the sources. You may have to specify the proper installation prefix with <parameter>prefix=<varname>path</varname></parameter>; this should match Q's installation prefix, usually <filename>/usr/local</filename> or <filename>/usr</filename>. There are also some icons and desktop files included in the package, which are useful for the KDE and Gnome desktop environments, but these will have to be installed manually. (If you're installing from an RPM, hopefully these files will be copied the appropriate locations automatically, so that your application menu will show an entry for QCalc after installation.) </para> </sect1> </appendix> </book> --- NEW FILE: fdl.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd"> <HTML LANG="en-US"> <HEAD> <TITLE>GNU Free Documentation License - version 1.1</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"> <META HTTP-EQUIV="Content-Language" CONTENT="en-US"> <META NAME="description" CONTENT="GNU free documentation license (for inclusion in documentation files)"> <META NAME="keywords" CONTENT="gnu, Gnu, GNU, license, licence, software, free software, software license, software licence, GNU general public license, GNU General Public License, documentation licence, documentation license, documentation, GNU free documentation license, GNU Free Documentation License"> <META NAME="robots" CONTENT="none"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="stylesheet" HREF="kde-default.css" TYPE="text/css"> </HEAD> <BODY CLASS="license"> <H1>GNU Free Documentation License</H1> Version 1.1, March 2000 <P>Copyright (C) 2000 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA<BR> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.</P> <H2>0. Preamble</H2> <P>The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.</P> <P>This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.</P> <P>We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.</P> <H2>1. Applicability And Definitions</H2> <P>This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".</P> <P>A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.</P> <P>A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.</P> <P>The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.</P> <P>The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.</P> <P>A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".</P> <P>Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.</P> <P>The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.</P> <H2>2. Verbatim Copying</H2> <P>You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.</P> <P>You may also lend copies, under the same conditions stated above, and you may publicly display copies.</P> <H2>3. Copying In Quantity</H2> <P>If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.</P> <P>If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.</P> <P>If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.</P> <P>It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.</P> <H2>4. Modifications</H2> <P>You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:</P> <OL STYLE="list-style-type: upper-alpha;"> <LI>Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.</LI> <LI>List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).</LI> <LI>State on the Title page the name of the publisher of the Modified Version, as the publisher.</LI> <LI>Preserve all the copyright notices of the Document.</LI> <LI>Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.</LI> <LI>Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.</LI> <LI>Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.</LI> <LI>Include an unaltered copy of this License.</LI> <LI>Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.</LI> <LI>Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.</LI> <LI>In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.</LI> <LI>Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.</LI> <LI>Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.</LI> <LI>Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.</LI> </OL> <P>If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.</P> <P>You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.</P> <P>You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.</P> <P>The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.</P> <H2>5. Combining Documents</H2> <P>You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.</P> <P>The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.</P> <P>In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."</P> <H2>6. Collections Of Documents</H2> <P>You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.</P> <P>You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.</P> <H2>7. Aggregation With Independent Works</H2> <P>A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.</P> <P>If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.</P> <H2>8. Translation</H2> <P>Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.</P> <H2>9. Termination</H2> <P>You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.</P> <H2>10. Future Revisions Of This License</H2> <P>The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See <A HREF="http:///www.gnu.org/copyleft/">http:///www.gnu.org/copyleft/</A>.</P> <P>Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.</P> </BODY> </HTML> --- NEW FILE: Makefile --- all: html html: qcalc.html # docbook2pdf munges the html file when running this. Bleh. pdf: qcalc.pdf qcalc.html: qcalc.xml docbook2html -u $< qcalc.pdf: qcalc.xml docbook2pdf -u $< clean: rm -f *~ realclean: rm -f *~ qcalc.html qcalc.pdf --- NEW FILE: findreplace.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: print.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: options.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: flag.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: qcalc1.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: gplv2.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd"> <HTML LANG="en-US"> <HEAD> <TITLE>GNU General Public License</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"> <META HTTP-EQUIV="Content-Language" CONTENT="en-US"> <META NAME="description" CONTENT="GNU general public license (for inclusion in distributions)"> <META NAME="keywords" CONTENT="gnu, Gnu, GNU, license, licence, software, free software, software license, software licence, GNU general public license, GNU General Public License"> <META NAME="robots" CONTENT="none"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="stylesheet" HREF="kde-default.css" TYPE="text/css"> </HEAD> <BODY CLASS="license"> <H1>GNU General Public License</H1> <P>Version 2, June 1991</P> <P>Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA<BR> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.</P> <H2>Preamble</H2> <P>The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.</P> <P>When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.</P> <P>To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.</P> <P>For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.</P> <P>We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.</P> <P>Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.</P> <P>Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.</P> <P>The precise terms and conditions for copying, distribution and modification follow.</P> <H2><A NAME="show-c">GNU General Public License<BR> Terms And Conditions For Copying, Distribution And Modification</A></H2> <P>0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".</P> <P>Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.</P> <P>1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.</P> <P>You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.</P> <P>2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:</P> <OL STYLE="list-style-type: lower-alpha;"> <LI> <P>You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.</P> </LI> <LI> <P>You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.</P> </LI> <LI> <P>If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)</P> </LI> </OL> <P>These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.</P> <P>Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.</P> <P>In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.</P> <P>3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:</P> <OL STYLE="list-style-type: lower-alpha;"> <LI> <P>Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,</P> </LI> <LI> <P>Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,</P> </LI> <LI> <P>Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)</P> </LI> </OL> <P>The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.</P> <P>If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.</P> <P>4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.</P> <P>5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.</P> <P>6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.</P> <P>7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.</P> <P>If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.</P> <P>It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.</P> <P>This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.</P> <P>8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.</P> <P>9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.</P> <P>Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.</P> <P>10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.</P> <H2><A NAME="show-w">No Warranty</A></H2> <P>11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</P> <P>12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</P> <DIV STYLE="text-align: center;">END OF TERMS AND CONDITIONS</DIV> <hr> <h2>How to Apply These Terms to Your New Programs</h2> <p>If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.</p> <p>To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.</p> <pre> <one line to give the program's name and a brief idea of what it does.> Copyright (C) 19yy <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA</pre> <p>Also add information on how to contact you by electronic and paper mail.</p> <p>If the program is interactive, make it output a short notice like this when it starts in an interactive mode:</p> <pre> Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.</pre> <p>The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program.</p> <p>You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:</p> <pre> Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice</pre> <p>This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.</p> </BODY> </HTML> | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 18:18:05
      
     | 
| Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv21802/doc Log Message: Directory /cvsroot/q-lang/qcalc/doc added to the repository | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 03:58:52
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv17500 Modified Files: options.ui qcalc.q Log Message: bugfixes and improvements in printing code Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** qcalc.q 30 Oct 2007 01:27:47 -0000 1.47 --- qcalc.q 30 Oct 2007 03:58:47 -0000 1.48 *************** *** 129,132 **** --- 129,133 ---- OPTIONS_SCRIPT_HEADER = qt_child OPTIONSDG "lineEditScriptHeader", OPTIONS_SCRIPT_FOOTER = qt_child OPTIONSDG "lineEditScriptFooter", + OPTIONS_LINENUMBERS = qt_child OPTIONSDG "checkBoxLineNumbers", // interpreter task (inferior Q process) and sempahore queue to communicate // with the interpreter *************** *** 175,178 **** --- 176,180 ---- ("/qcalc/print/script/header", OPT_SCRIPT_HEADER), ("/qcalc/print/script/footer", OPT_SCRIPT_FOOTER), + ("/qcalc/print/script/linenumbers", OPT_LINENUMBERS), ("/qcalc/table/font", FONT1), ("/qcalc/text/font", FONT2), *************** *** 187,190 **** --- 189,193 ---- OPT_TABLE_HEADER,OPT_TABLE_FOOTER, OPT_SCRIPT_HEADER,OPT_SCRIPT_FOOTER, + OPT_LINENUMBERS, FONT1,FONT2,HL] = load_defaults DEFAULTS *************** *** 199,202 **** --- 202,206 ---- ("/qcalc/print/script/header", "%f"), ("/qcalc/print/script/footer", "page %p"), + ("/qcalc/print/script/linenumbers", false), ("/qcalc/table/font", DEF_FONT1), ("/qcalc/text/font", DEF_FONT2), *************** *** 209,212 **** --- 213,217 ---- qt OPTIONS_SCRIPT_HEADER "setText" OPT_SCRIPT_HEADER || qt OPTIONS_SCRIPT_FOOTER "setText" OPT_SCRIPT_FOOTER || + qt OPTIONS_LINENUMBERS "setChecked" OPT_LINENUMBERS || enable_highlighting HL || dowith set_font [TABLE,EDIT,LOG] $ *************** *** 235,238 **** --- 240,244 ---- OPT_SCRIPT_HEADER = qt OPTIONS_SCRIPT_HEADER "text" (), OPT_SCRIPT_FOOTER = qt OPTIONS_SCRIPT_FOOTER "text" (), + OPT_LINENUMBERS = qt OPTIONS_LINENUMBERS "isChecked" (), FONT1 = font_to_descr $ get_font TABLE, FONT2 = font_to_descr $ get_font EDIT, *************** *** 317,324 **** options_dg = qt OPTIONS_CONTENTS "setButton" OPT_CONTENTS || ! qt OPTIONS_CELLS "setButton" OPT_CELLS if RES=0 where OPT_CONTENTS = qt OPTIONS_CONTENTS "selectedId" (), OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), RES = qt OPTIONSDG "show" () || qt OPTIONSDG "exec" (); --- 323,340 ---- options_dg = qt OPTIONS_CONTENTS "setButton" OPT_CONTENTS || ! qt OPTIONS_CELLS "setButton" OPT_CELLS || ! qt OPTIONS_TABLE_HEADER "setText" OPT_TABLE_HEADER || ! qt OPTIONS_TABLE_FOOTER "setText" OPT_TABLE_FOOTER || ! qt OPTIONS_SCRIPT_HEADER "setText" OPT_SCRIPT_HEADER || ! qt OPTIONS_SCRIPT_FOOTER "setText" OPT_SCRIPT_FOOTER || ! qt OPTIONS_LINENUMBERS "setChecked" OPT_LINENUMBERS if RES=0 where OPT_CONTENTS = qt OPTIONS_CONTENTS "selectedId" (), OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), + OPT_TABLE_HEADER = qt OPTIONS_TABLE_HEADER "text" (), + OPT_TABLE_FOOTER = qt OPTIONS_TABLE_FOOTER "text" (), + OPT_SCRIPT_HEADER = qt OPTIONS_SCRIPT_HEADER "text" (), + OPT_SCRIPT_FOOTER = qt OPTIONS_SCRIPT_FOOTER "text" (), + OPT_LINENUMBERS = qt OPTIONS_LINENUMBERS "isChecked" (), RES = qt OPTIONSDG "show" () || qt OPTIONSDG "exec" (); *************** *** 1179,1182 **** --- 1195,1199 ---- def PRINTER_SEL = qt_val "QPrinter" "PrintSelection", PRINTER_PAGE_RANGE = qt_val "QPrinter" "PrintPageRange", + PRINT_ALL = qt_val "QPrinter" "AllPages", PRINT_SEL = qt_val "QPrinter" "Selection"; *************** *** 1202,1206 **** printer SEL = qt PRT "setFullPage" true || PRT if qt PRT "setOptionEnabled" (PRINTER_SEL,neq () SEL) || ! if chksel SEL then qt PRT "setPrintRange" PRINT_SEL || qt PRT "setup" MAIN; --- 1219,1224 ---- printer SEL = qt PRT "setFullPage" true || PRT if qt PRT "setOptionEnabled" (PRINTER_SEL,neq () SEL) || ! qt PRT "setPrintRange" ! (if chksel SEL then PRINT_SEL else PRINT_ALL) || qt PRT "setup" MAIN; *************** *** 1224,1228 **** where M = qt_new "QPaintDeviceMetrics" $ qt P "device" (), DPIY = qt M "logicalDpiY" (), ! MARGIN = round (2/2.54*DPIY), // 2 cm margins WD = qt M "width" ()-2*MARGIN, HT = qt M "height" ()-2*MARGIN, --- 1242,1246 ---- where M = qt_new "QPaintDeviceMetrics" $ qt P "device" (), DPIY = qt M "logicalDpiY" (), ! MARGIN = round (1.5/2.54*DPIY), // 1.5 cm margins WD = qt M "width" ()-2*MARGIN, HT = qt M "height" ()-2*MARGIN, *************** *** 1234,1238 **** (qt_val "QStyleSheetItem" "MarginVertical",PSEP), TEXT = qt_new "QSimpleRichText" ! (S,get_font TABLE,"",STYLE) if qt P "begin" PRT where P = qt_new "QPainter" (); --- 1252,1257 ---- (qt_val "QStyleSheetItem" "MarginVertical",PSEP), TEXT = qt_new "QSimpleRichText" ! (S,get_font TABLE,qt EDIT "context" (),STYLE, ! qt EDIT "mimeSourceFactory" (),HT) if qt P "begin" PRT where P = qt_new "QPainter" (); *************** *** 1291,1308 **** qt TEXT "setWidth" (P,WD) || doscript PRT P MARGIN (0,0) (WD,HT) TEXT (FROM,TO) (PAGENO+1) ! where _ = qt P "setFont" (get_font EDIT), ! // XXXFIXME: Attempt to adjust the page height to the ! // nearest integral number of lines. This doesn't work ! // yet. Why? ! FM = qt P "fontMetrics" (), ! LH = qt FM "height" (), ! NL = HT div LH, ! HT = NL*LH, TEXT = qt_new "QSimpleRichText" ! (qt "QStyleSheet" "convertFromPlainText" $ ! qt EDIT "text" (),get_font EDIT) if CONTENTS and 2<>0; = () otherwise; doscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO = // skip this page and advance to the next one --- 1310,1328 ---- qt TEXT "setWidth" (P,WD) || doscript PRT P MARGIN (0,0) (WD,HT) TEXT (FROM,TO) (PAGENO+1) ! where S = qt EDIT "text" (), ! // add line numbers, if requested ! S = if qt OPTIONS_LINENUMBERS "isChecked" () then ! number_lines S ! else S, TEXT = qt_new "QSimpleRichText" ! (qt "QStyleSheet" "convertFromPlainText" S,get_font EDIT, ! qt EDIT "context" (),qt EDIT "styleSheet" (), ! qt EDIT "mimeSourceFactory" (),HT) if CONTENTS and 2<>0; = () otherwise; + number_lines S = join "\n" $ zipwith (curry (sprintf "%4d: %s")) N L + where L = split "\n" S, N = [1..#L]; + doscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO = // skip this page and advance to the next one Index: options.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/options.ui,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** options.ui 30 Oct 2007 00:39:10 -0000 1.3 --- options.ui 30 Oct 2007 03:58:47 -0000 1.4 *************** *** 10,14 **** <y>0</y> <width>561</width> ! <height>433</height> </rect> </property> --- 10,14 ---- <y>0</y> <width>561</width> ! <height>473</height> </rect> </property> *************** *** 29,89 **** <cstring>unnamed</cstring> </property> ! <widget class="QButtonGroup" row="0" column="1"> <property name="name"> ! <cstring>buttonGroupCells</cstring> ! </property> ! <property name="title"> ! <string>Cells</string> ! </property> ! <property name="selectedId" stdset="0"> ! <number>1</number> </property> ! <vbox> <property name="name"> <cstring>unnamed</cstring> </property> ! <widget class="QRadioButton"> <property name="name"> ! <cstring>radioButton1_2</cstring> </property> <property name="text"> ! <string>&Values</string> </property> <property name="accel"> ! <string>Alt+V</string> </property> ! <property name="buttonGroupId"> ! <number>1</number> </property> </widget> ! <widget class="QRadioButton"> <property name="name"> ! <cstring>radioButton2_2</cstring> </property> ! <property name="text"> ! <string>&Formulas</string> </property> ! <property name="accel"> ! <string>Alt+F</string> </property> ! <property name="buttonGroupId"> ! <number>2</number> </property> ! </widget> ! <widget class="QRadioButton"> <property name="name"> ! <cstring>radioButton3_2</cstring> </property> <property name="text"> ! <string>&Both</string> </property> <property name="accel"> ! <string>Alt+B</string> </property> ! <property name="buttonGroupId"> ! <number>3</number> </property> </widget> ! </vbox> </widget> <widget class="QButtonGroup" row="0" column="0"> --- 29,89 ---- <cstring>unnamed</cstring> </property> ! <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="2"> <property name="name"> ! <cstring>layout5</cstring> </property> ! <hbox> <property name="name"> <cstring>unnamed</cstring> </property> ! <widget class="QPushButton"> <property name="name"> ! <cstring>buttonOk</cstring> </property> <property name="text"> ! <string>&OK</string> </property> <property name="accel"> ! <string></string> </property> ! <property name="autoDefault"> ! <bool>true</bool> ! </property> ! <property name="default"> ! <bool>true</bool> </property> </widget> ! <spacer> <property name="name"> ! <cstring>Horizontal Spacing2</cstring> </property> ! <property name="orientation"> ! <enum>Horizontal</enum> </property> ! <property name="sizeType"> ! <enum>Expanding</enum> </property> ! <property name="sizeHint"> ! <size> ! <width>240</width> ! <height>20</height> ! </size> </property> ! </spacer> ! <widget class="QPushButton"> <property name="name"> ! <cstring>buttonCancel</cstring> </property> <property name="text"> ! <string>&Cancel</string> </property> <property name="accel"> ! <string></string> </property> ! <property name="autoDefault"> ! <bool>true</bool> </property> </widget> ! </hbox> </widget> <widget class="QButtonGroup" row="0" column="0"> *************** *** 94,97 **** --- 94,100 ---- <string>Contents</string> </property> + <property name="radioButtonExclusive"> + <bool>false</bool> + </property> <property name="selectedId" stdset="0"> <number>1</number> *************** *** 145,186 **** </vbox> </widget> ! <widget class="QGroupBox" row="1" column="0"> <property name="name"> ! <cstring>groupBox1</cstring> </property> <property name="title"> ! <string>Spreadsheet</string> </property> ! <grid> <property name="name"> <cstring>unnamed</cstring> </property> ! <widget class="QLabel" row="0" column="0"> <property name="name"> ! <cstring>textLabel1</cstring> </property> <property name="text"> ! <string>Header:</string> </property> ! </widget> ! <widget class="QLineEdit" row="0" column="1"> ! <property name="name"> ! <cstring>lineEditTableHeader</cstring> </property> </widget> ! <widget class="QLabel" row="1" column="0"> <property name="name"> ! <cstring>textLabel1_2</cstring> </property> <property name="text"> ! <string>Footer:</string> </property> </widget> ! <widget class="QLineEdit" row="1" column="1"> <property name="name"> ! <cstring>lineEditTableFooter</cstring> </property> </widget> ! </grid> </widget> <widget class="QGroupBox" row="1" column="1"> --- 148,208 ---- </vbox> </widget> ! <widget class="QButtonGroup" row="0" column="1"> <property name="name"> ! <cstring>buttonGroupCells</cstring> </property> <property name="title"> ! <string>Cells</string> </property> ! <property name="selectedId" stdset="0"> ! <number>1</number> ! </property> ! <vbox> <property name="name"> <cstring>unnamed</cstring> </property> ! <widget class="QRadioButton"> <property name="name"> ! <cstring>radioButton1_2</cstring> </property> <property name="text"> ! <string>&Values</string> </property> ! <property name="accel"> ! <string>Alt+V</string> ! </property> ! <property name="buttonGroupId"> ! <number>1</number> </property> </widget> ! <widget class="QRadioButton"> <property name="name"> ! <cstring>radioButton2_2</cstring> </property> <property name="text"> ! <string>&Formulas</string> ! </property> ! <property name="accel"> ! <string>Alt+F</string> ! </property> ! <property name="buttonGroupId"> ! <number>2</number> </property> </widget> ! <widget class="QRadioButton"> <property name="name"> ! <cstring>radioButton3_2</cstring> ! </property> ! <property name="text"> ! <string>&Both</string> ! </property> ! <property name="accel"> ! <string>Alt+B</string> ! </property> ! <property name="buttonGroupId"> ! <number>3</number> </property> </widget> ! </vbox> </widget> <widget class="QGroupBox" row="1" column="1"> *************** *** 200,204 **** </property> <property name="text"> ! <string>Header:</string> </property> </widget> --- 222,229 ---- </property> <property name="text"> ! <string>&Header:</string> ! </property> ! <property name="buddy" stdset="0"> ! <cstring>lineEditScriptHeader</cstring> </property> </widget> *************** *** 208,212 **** </property> <property name="text"> ! <string>Footer:</string> </property> </widget> --- 233,240 ---- </property> <property name="text"> ! <string>&Footer:</string> ! </property> ! <property name="buddy" stdset="0"> ! <cstring>lineEditScriptFooter</cstring> </property> </widget> *************** *** 221,283 **** </property> </widget> </grid> </widget> ! <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="2"> <property name="name"> ! <cstring>layout5</cstring> </property> ! <hbox> <property name="name"> <cstring>unnamed</cstring> </property> ! <widget class="QPushButton"> <property name="name"> ! <cstring>buttonOk</cstring> </property> <property name="text"> ! <string>&OK</string> ! </property> ! <property name="accel"> ! <string></string> ! </property> ! <property name="autoDefault"> ! <bool>true</bool> </property> ! <property name="default"> ! <bool>true</bool> </property> </widget> ! <spacer> <property name="name"> ! <cstring>Horizontal Spacing2</cstring> ! </property> ! <property name="orientation"> ! <enum>Horizontal</enum> ! </property> ! <property name="sizeType"> ! <enum>Expanding</enum> ! </property> ! <property name="sizeHint"> ! <size> ! <width>240</width> ! <height>20</height> ! </size> </property> ! </spacer> ! <widget class="QPushButton"> <property name="name"> ! <cstring>buttonCancel</cstring> </property> <property name="text"> ! <string>&Cancel</string> </property> ! <property name="accel"> ! <string></string> </property> ! <property name="autoDefault"> ! <bool>true</bool> </property> </widget> ! </hbox> </widget> <widget class="QLabel" row="2" column="0" rowspan="1" colspan="2"> --- 249,312 ---- </property> </widget> + <widget class="QCheckBox" row="2" column="1"> + <property name="name"> + <cstring>checkBoxLineNumbers</cstring> + </property> + <property name="text"> + <string>&Line numbers</string> + </property> + <property name="accel"> + <string>Alt+L</string> + </property> + <property name="buttonGroupId"> + <number>-1</number> + </property> + </widget> </grid> </widget> ! <widget class="QGroupBox" row="1" column="0"> <property name="name"> ! <cstring>groupBox1</cstring> </property> ! <property name="title"> ! <string>Spreadsheet</string> ! </property> ! <grid> <property name="name"> <cstring>unnamed</cstring> </property> ! <widget class="QLabel" row="0" column="0"> <property name="name"> ! <cstring>textLabel1</cstring> </property> <property name="text"> ! <string>&Header:</string> </property> ! <property name="buddy" stdset="0"> ! <cstring>lineEditTableHeader</cstring> </property> </widget> ! <widget class="QLineEdit" row="0" column="1"> <property name="name"> ! <cstring>lineEditTableHeader</cstring> </property> ! </widget> ! <widget class="QLabel" row="1" column="0"> <property name="name"> ! <cstring>textLabel1_2</cstring> </property> <property name="text"> ! <string>&Footer:</string> </property> ! <property name="buddy" stdset="0"> ! <cstring>lineEditTableFooter</cstring> </property> ! </widget> ! <widget class="QLineEdit" row="1" column="1"> ! <property name="name"> ! <cstring>lineEditTableFooter</cstring> </property> </widget> ! </grid> </widget> <widget class="QLabel" row="2" column="0" rowspan="1" colspan="2"> *************** *** 285,288 **** --- 314,323 ---- <cstring>textLabel2</cstring> </property> + <property name="frameShape"> + <enum>GroupBoxPanel</enum> + </property> + <property name="frameShadow"> + <enum>Raised</enum> + </property> <property name="text"> <string><p><b>Contents:</b> Determines which sections to print: the spreadsheet, the script, or both (default).</p> *************** *** 308,312 **** <images> <image name="image0"> ! <data format="PNG" length="910">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035549444154388da5d141681c551cc7f16fea086f6423efc10676c142565ac8d2cba4d243b708bb911e123d48b5784d0f5e7a2fa178b0218a942025b41e849435103c68494596289564448c0b96984549b607d914846e308bf3a843e60f1d981e66834d1ac95a7f97ffccbc3f9ff79ff7fad89795e5f5359d713d93d3045640046ba3cf70983c3372e2fefefe9e53fb7aa5dada7890ecc9c32459bab39a2c2dae8e3f330c70eb8ba56aebd77d7892242b77d693dac26af97fe1f373b5eafacfadbdf24e92cccfd5367b9b6e6ea93afb69cd3b686df666ed766be3af3df6ea0fade4dffa9fcc1189a37185ebdf9899dfd37c6366decb2953cebda4d20f8fba0b1920a67c28ac8d616cf4b4d64afbd357537cfaeabc97cb16fc91d19276fb5d88badd11988c2608ad3e14de0a024cd6a55439a95d943f35393b9ed7da2f558ada551004a91a8469ddf8bd89c4eafea13021360a2372d93c95d1922e0e16aa63674b5a2b431446285ca2906e8db06d41427b28fcdcf16269c8f46bcf7dd1c1e80cf9a303382f28c29d0e388a702704073a0f3b6cff69718de28f56c7bbf94ed39d787de0dec78b1d397062859a5cf8c6b7120a120a0ad5adfa9f772b045b82b511da713937f493973baaaf11e33ff86478cf792749a201fa002ebe3beda1f0df3a3ba2738306a334416c314e5add58118401266308d63e201ffbd069a34f1568de958681cacb134dfbe4067dbb0f172f4c7b36b6d70ab9425969455e6bda9d2d148ab1d11226ab69d73f241f2fa3ed26ae0262888e17d9bc6b1b38aa726262cd3e05efe6dcf9f706156a5090b282ef05743157a88e79bfe842eca39c364629400045140b0ce4a9d76968a8bc32954efe147c506e5d1abe72f2987abf30b0091905b180a320061c20142227cf5a5d1a3854ce4c356d4ff0cae5a20e62fcd2693c938d40b9bb034318a5b84014ba2cd769b850e9090658ba5cd481e08fbcaa3c73ac8b76042482b6c0f3400682ed3ccb0df9ea48aff06b1f35ad8aa92c7e278d604dba534629deb1f0b7c0a6c59836c6e1cd9e618037ae37ad72a82cfc4823a8a7bf4f5681487adedd4444fc2718e0edebe9e49f7f2b8df66f026d0ba3c360482f765b10ebf676790765f642518be08f0d055e216b41a5932fdfcbd1ecb893cf0c034c9f2f6a1e713bdf4f192740c4d82066e6d297cd2b8f01fc65b3f0e89015950000000049454e44ae426082</data> </image> </images> --- 343,347 ---- <images> <image name="image0"> ! <data format="PNG" length="909">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035449444154388da5d14f681c6518c7f16fea0aefc8aebc0309cc48844c2f66d1c36c0a628291dd8887ac7a09140f5e72c945f0548a882d69e829e41082b904a26b61ed410b9576cd21908e18931e6c928510b714c9165a320b59322f65e9bcd885f1301bda4d23d9d6dfe5993f0f9ff79967ba38928ddf77b74c215cd92bf1eb1aa3a909eafa070453673e387dff687fc729dd582becdd3b88daf2388a569637a2b5e59df1978601aefdb452d8fbeb081e45d1c6f26eb4726327fbbff0e29552617773af5dfe278a8a574ad58e80d28f6b85c585927bdcbbc5ef4ad7f7ee3d6eb377d6f7a2ffea7f36a7940ec625a6373f576c6b9e9f2bba8eb0b3d26a3d7812172d34a269644f84ed1e9bfce890b492b637331de333d345b7cf4e7b23a303d248191002af0221d8d2c26ff8f244b8baef635830309c9626d2bb3cb538ee48db1b78df9124210842483cad9b77b7d04d79ff243821b4a15048c7b2191c1d92d5ed4a616430839134408129daabde07dda89d08bfe2bcf56e7fb7d9e3f21ad8dd26a69d44bc9ea2fec8272152d41f052484c1c3031f75d08014ecef36dc85cfb68dc98f7bee4e2fd5f5b1ab90093975f5e692428356213261b6aafdf4be1e12d621a86b6c6192efbfe53a8e354b13ef6021d3b6ef288a244017c01713332e02eff3d1bc94bd0676d2c2d7356c11571389af7c6c69e3ff7901a7e9a1eb3ef6a0c3e66d5db621f7c65715f5ec015d8717e726e65d5ffbb3e9de74962438dd36d55a153321c97f3484b424d5d58b38ac63d62b90043490ce50bd5d2b2344eef4b92df51c7c98b1b3dff409649f466505fca64166ac7461c45d97e9a607091f5388962a089b1ac3b6b9b54ad982dcdb97e3c99f838fcbb5f3994b43fd72d2362b2005680d421cdaa0340887cd555546903b3359511dc11b5fa7a5dfc41b19c635640849031ac4eb50618c37006df0eb2a6513721dc1006b17d3d26fe0e573d235fa748cd634344378a0c188a70f0387a53bea978e6180952fe3c9c7dec33586053c0c62dc57906cade84dc9faaac9a917813ffcb6a2a42077f50fcae11d117fbed5020f938080f0c560804f662b4a36c97d7f5395836d0d0f147c9a8114f1d4be066574f6f38e4b71222d55036fec9dc0b5656b150dcdfadf165b3563eaa5618099b369c913ae3b29b23a11803695df64eefccf954bff029349a33db4f0dda90000000049454e44ae426082</data> </image> </images> | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 01:27:55
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv12269 Modified Files: qcalc.q Log Message: improvements and bugfixes in print formatting (pagination of program listing is still broken) Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** qcalc.q 30 Oct 2007 00:39:10 -0000 1.46 --- qcalc.q 30 Oct 2007 01:27:47 -0000 1.47 *************** *** 1251,1256 **** qt TEXT "draw" (P,MARGIN,MARGIN,R,CG) || // print header and footer ! qt P "drawText" (MARGIN+X+WD-WH,MARGIN+Y-A-D-1,HEADER) || ! qt P "drawText" (MARGIN+X+WD-WF,MARGIN+Y+HT+A,FOOTER) || // do the next page, if any nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) --- 1251,1256 ---- qt TEXT "draw" (P,MARGIN,MARGIN,R,CG) || // print header and footer ! qt P "drawText" (MARGIN+X+WD-WH,MARGIN-OFS+Y-D-1,HEADER) || ! qt P "drawText" (MARGIN+X+WD-WF,MARGIN+OFS+Y+HT+A,FOOTER) || // do the next page, if any nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) *************** *** 1269,1273 **** FOOTER = make_footer (get FILENAME) PAGENO (ROWNO,COLNO), WH = qt FM "width" HEADER, ! WF = qt FM "width" FOOTER; nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) PAGENO --- 1269,1274 ---- FOOTER = make_footer (get FILENAME) PAGENO (ROWNO,COLNO), WH = qt FM "width" HEADER, ! WF = qt FM "width" FOOTER, ! OFS = MARGIN div 4; nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) PAGENO *************** *** 1288,1293 **** all (page_in_range FROM TO) [PAGENO,PAGENO+1] then qt PRT "newPage" () || doscript PRT P MARGIN (0,0) (WD,HT) TEXT (FROM,TO) (PAGENO+1) ! where TEXT = qt_new "QSimpleRichText" (qt "QStyleSheet" "convertFromPlainText" $ qt EDIT "text" (),get_font EDIT) --- 1289,1303 ---- all (page_in_range FROM TO) [PAGENO,PAGENO+1] then qt PRT "newPage" () || + qt TEXT "setWidth" (P,WD) || doscript PRT P MARGIN (0,0) (WD,HT) TEXT (FROM,TO) (PAGENO+1) ! where _ = qt P "setFont" (get_font EDIT), ! // XXXFIXME: Attempt to adjust the page height to the ! // nearest integral number of lines. This doesn't work ! // yet. Why? ! FM = qt P "fontMetrics" (), ! LH = qt FM "height" (), ! NL = HT div LH, ! HT = NL*LH, ! TEXT = qt_new "QSimpleRichText" (qt "QStyleSheet" "convertFromPlainText" $ qt EDIT "text" (),get_font EDIT) *************** *** 1305,1310 **** qt TEXT "draw" (P,MARGIN,MARGIN,R,CG) || // print header and footer ! qt P "drawText" (MARGIN+X+WD-WH,MARGIN+Y-A-D-1,HEADER) || ! qt P "drawText" (MARGIN+X+WD-WF,MARGIN+Y+HT+A,FOOTER) || // do the next page, if any nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO --- 1315,1321 ---- qt TEXT "draw" (P,MARGIN,MARGIN,R,CG) || // print header and footer ! qt P "setFont" (get_font TABLE) || ! qt P "drawText" (MARGIN+X+WD-WH,MARGIN-OFS+Y-D-1,HEADER) || ! qt P "drawText" (MARGIN+X+WD-WF,MARGIN+OFS+Y+HT+A,FOOTER) || // do the next page, if any nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO *************** *** 1322,1326 **** FOOTER = make_footer (get FILENAME) PAGENO (), WH = qt FM "width" HEADER, ! WF = qt FM "width" FOOTER; nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO --- 1333,1338 ---- FOOTER = make_footer (get FILENAME) PAGENO (), WH = qt FM "width" HEADER, ! WF = qt FM "width" FOOTER, ! OFS = MARGIN div 4; nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 00:43:02
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv25090 Modified Files: README Log Message: update README Index: README =================================================================== RCS file: /cvsroot/q-lang/qcalc/README,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** README 29 Oct 2007 19:04:03 -0000 1.10 --- README 30 Oct 2007 00:42:59 -0000 1.11 *************** *** 245,252 **** You can print a spreadsheet with the Print command. This isn't very sophisticated right now, but at least it lets you choose the target printer or ! file, does simple pagination, and adds some formatting and a footer showing ! the spreadsheet filename and page numbers. It also allows you to print either ! cell values, formulas or both. The latter options are available in the "Print ! options" dialog in the File menu, and will be remembered across invocations. TODO --- 245,254 ---- You can print a spreadsheet with the Print command. This isn't very sophisticated right now, but at least it lets you choose the target printer or ! file, does simple pagination, and adds some formatting. You can choose which ! sections to print (spreadsheet, script, or both) and whether to print just the ! cell values, just the formulas, or both. There are also configurable headers ! and footers showing the spreadsheet filename and page numbers. These options ! are available in the "Print options" dialog in the File menu, and will be ! remembered across invocations. TODO | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-30 00:39:16
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv23359 Modified Files: options.ui qcalc.q Log Message: added configurable headers and footers Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -d -r1.45 -r1.46 *** qcalc.q 29 Oct 2007 22:54:28 -0000 1.45 --- qcalc.q 30 Oct 2007 00:39:10 -0000 1.46 *************** *** 19,22 **** --- 19,24 ---- - CSV format import and export (use Eddie Rucker's CSV routines). + - Improve the print output. + - Maybe add a second interpreter running interactively in the log pane. *************** *** 123,126 **** --- 125,132 ---- OPTIONS_CONTENTS = qt_child OPTIONSDG "buttonGroupContents", OPTIONS_CELLS = qt_child OPTIONSDG "buttonGroupCells", + OPTIONS_TABLE_HEADER = qt_child OPTIONSDG "lineEditTableHeader", + OPTIONS_TABLE_FOOTER = qt_child OPTIONSDG "lineEditTableFooter", + OPTIONS_SCRIPT_HEADER = qt_child OPTIONSDG "lineEditScriptHeader", + OPTIONS_SCRIPT_FOOTER = qt_child OPTIONSDG "lineEditScriptFooter", // interpreter task (inferior Q process) and sempahore queue to communicate // with the interpreter *************** *** 165,168 **** --- 171,178 ---- ("/qcalc/print/contents", OPT_CONTENTS), ("/qcalc/print/cells", OPT_CELLS), + ("/qcalc/print/table/header", OPT_TABLE_HEADER), + ("/qcalc/print/table/footer", OPT_TABLE_FOOTER), + ("/qcalc/print/script/header", OPT_SCRIPT_HEADER), + ("/qcalc/print/script/footer", OPT_SCRIPT_FOOTER), ("/qcalc/table/font", FONT1), ("/qcalc/text/font", FONT2), *************** *** 173,177 **** ("q-lang.sourceforge.net","Qt/Q", qt_val "QSettings" "User"), ! [W,H,MINIMIZED,MAXIMIZED,OPT_CONTENTS,OPT_CELLS, FONT1,FONT2,HL] = load_defaults DEFAULTS --- 183,190 ---- ("q-lang.sourceforge.net","Qt/Q", qt_val "QSettings" "User"), ! [W,H,MINIMIZED,MAXIMIZED, ! OPT_CONTENTS,OPT_CELLS, ! OPT_TABLE_HEADER,OPT_TABLE_FOOTER, ! OPT_SCRIPT_HEADER,OPT_SCRIPT_FOOTER, FONT1,FONT2,HL] = load_defaults DEFAULTS *************** *** 182,185 **** --- 195,202 ---- ("/qcalc/print/contents", 3), ("/qcalc/print/cells", 1), + ("/qcalc/print/table/header", "%f"), + ("/qcalc/print/table/footer", "page %p (%r,%c)"), + ("/qcalc/print/script/header", "%f"), + ("/qcalc/print/script/footer", "page %p"), ("/qcalc/table/font", DEF_FONT1), ("/qcalc/text/font", DEF_FONT2), *************** *** 188,191 **** --- 205,212 ---- qt OPTIONS_CONTENTS "setButton" OPT_CONTENTS || qt OPTIONS_CELLS "setButton" OPT_CELLS || + qt OPTIONS_TABLE_HEADER "setText" OPT_TABLE_HEADER || + qt OPTIONS_TABLE_FOOTER "setText" OPT_TABLE_FOOTER || + qt OPTIONS_SCRIPT_HEADER "setText" OPT_SCRIPT_HEADER || + qt OPTIONS_SCRIPT_FOOTER "setText" OPT_SCRIPT_FOOTER || enable_highlighting HL || dowith set_font [TABLE,EDIT,LOG] $ *************** *** 210,213 **** --- 231,238 ---- OPT_CONTENTS = qt OPTIONS_CONTENTS "selectedId" (), OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), + OPT_TABLE_HEADER = qt OPTIONS_TABLE_HEADER "text" (), + OPT_TABLE_FOOTER = qt OPTIONS_TABLE_FOOTER "text" (), + OPT_SCRIPT_HEADER = qt OPTIONS_SCRIPT_HEADER "text" (), + OPT_SCRIPT_FOOTER = qt OPTIONS_SCRIPT_FOOTER "text" (), FONT1 = font_to_descr $ get_font TABLE, FONT2 = font_to_descr $ get_font EDIT, *************** *** 227,230 **** --- 252,273 ---- where P = qt MAIN "pos" (); + /* Helper functions for string manipulation. */ + + special regsub ~OPTS ~REGEX ~S EXPR; + regsub OPTS REGEX S EXPR + = strcat (regex OPTS REGEX S (regskip++EXPR)) + ++ regskip; + + trim S = S where [S] = + regex "" "^[ \t\n]*(.*[^ \t\n])[ \t\n]*$" S (reg 1); + = "" where [_] = + regex "" "^[ \t\n]*$" S (); + = S otherwise; + + htmlquote "<" = "<"; + htmlquote ">" = ">"; + htmlquote "&" = "&"; + htmlquote S = regsub "g" "[<>&]" S (htmlquote (reg 0)); + // manage defaults *************** *** 1143,1147 **** OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () ! if neq () ALL where ALL = selection_all, SEL = selection: = doprint PRT OPT_CONTENTS (FROM,TO) $ format_as_text OPT_CELLS (I1,J1;I2,J2) --- 1186,1190 ---- OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () ! where ALL = selection_all, SEL = selection: = doprint PRT OPT_CONTENTS (FROM,TO) $ format_as_text OPT_CELLS (I1,J1;I2,J2) *************** *** 1151,1154 **** --- 1194,1198 ---- format_as_text OPT_CELLS (I1,J1;I2,J2) where (_,_;I1,J1;I2,J2) = ALL; + = doprint PRT OPT_CONTENTS (FROM,TO) ""; otherwise: = statusmsg "Print aborted"; *************** *** 1206,1211 **** // print the text of the page qt TEXT "draw" (P,MARGIN,MARGIN,R,CG) || ! // print the footer ! qt P "drawText" (MARGIN+X+WD-W,MARGIN+Y+HT+A,FOOTER) || // do the next page, if any nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) --- 1250,1256 ---- // print the text of the page qt TEXT "draw" (P,MARGIN,MARGIN,R,CG) || ! // print header and footer ! qt P "drawText" (MARGIN+X+WD-WH,MARGIN+Y-A-D-1,HEADER) || ! qt P "drawText" (MARGIN+X+WD-WF,MARGIN+Y+HT+A,FOOTER) || // do the next page, if any nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) *************** *** 1217,1225 **** // the color group CG = qt TABLE "colorGroup" (), ! // the footer FM = qt P "fontMetrics" (), A = qt FM "ascent" (), FOOTER = make_footer (get FILENAME) PAGENO (ROWNO,COLNO), ! W = qt FM "width" FOOTER; nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) PAGENO --- 1262,1273 ---- // the color group CG = qt TABLE "colorGroup" (), ! // header and footer FM = qt P "fontMetrics" (), A = qt FM "ascent" (), + D = qt FM "descent" (), + HEADER = make_header (get FILENAME) PAGENO (ROWNO,COLNO), FOOTER = make_footer (get FILENAME) PAGENO (ROWNO,COLNO), ! WH = qt FM "width" HEADER, ! WF = qt FM "width" FOOTER; nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) PAGENO *************** *** 1256,1261 **** // print the text of the page qt TEXT "draw" (P,MARGIN,MARGIN,R,CG) || ! // print the footer ! qt P "drawText" (MARGIN+X+WD-W,MARGIN+Y+HT+A,FOOTER) || // do the next page, if any nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO --- 1304,1310 ---- // print the text of the page qt TEXT "draw" (P,MARGIN,MARGIN,R,CG) || ! // print header and footer ! qt P "drawText" (MARGIN+X+WD-WH,MARGIN+Y-A-D-1,HEADER) || ! qt P "drawText" (MARGIN+X+WD-WF,MARGIN+Y+HT+A,FOOTER) || // do the next page, if any nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO *************** *** 1266,1274 **** // the color group CG = qt TABLE "colorGroup" (), ! // the footer FM = qt P "fontMetrics" (), A = qt FM "ascent" (), FOOTER = make_footer (get FILENAME) PAGENO (), ! W = qt FM "width" FOOTER; nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO --- 1315,1326 ---- // the color group CG = qt TABLE "colorGroup" (), ! // header and footer FM = qt P "fontMetrics" (), A = qt FM "ascent" (), + D = qt FM "descent" (), + HEADER = make_header (get FILENAME) PAGENO (), FOOTER = make_footer (get FILENAME) PAGENO (), ! WH = qt FM "width" HEADER, ! WF = qt FM "width" FOOTER; nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO *************** *** 1283,1299 **** = (FROM<=N) and then ((TO=0) or else (N<=TO)); ! make_footer FNAME:String PAGENO (ROWNO,COLNO) ! = sprintf "%s page %d (%d,%d)" ! (last $ split "/" FNAME,PAGENO,ROWNO,COLNO); ! make_footer _ PAGENO (ROWNO,COLNO) ! = sprintf "page %d (%d,%d)" (PAGENO,ROWNO,COLNO) ! otherwise; ! make_footer FNAME:String PAGENO () ! = sprintf "%s page %d" ! (last $ split "/" FNAME,PAGENO); ! make_footer _ PAGENO () ! = sprintf "page %d" PAGENO ! otherwise; /* Rich text (html) formatting of tables. */ --- 1335,1375 ---- = (FROM<=N) and then ((TO=0) or else (N<=TO)); ! make_header FNAME PAGENO () ! = make_header_footer FNAME PAGENO () $ ! qt OPTIONS_SCRIPT_HEADER "text" (); ! make_header FNAME PAGENO ROWCOL ! = make_header_footer FNAME PAGENO ROWCOL $ ! qt OPTIONS_TABLE_HEADER "text" (); ! ! make_footer FNAME PAGENO () ! = make_header_footer FNAME PAGENO ROWCOL $ ! qt OPTIONS_SCRIPT_FOOTER "text" (); ! ! make_footer FNAME PAGENO ROWCOL ! = make_header_footer FNAME PAGENO ROWCOL $ ! qt OPTIONS_TABLE_FOOTER "text" (); ! ! make_header_footer FNAME PAGENO ROWCOL S ! = regsub "g" "(%%)|(%f)|(%p)|(%r)|(%c)" S ! (hdrvalue FNAME PAGENO ROWCOL regs) ! where FNAME = ! if isstr FNAME then last $ split "/" FNAME ! else ""; ! ! hdrvalue FNAME PAGENO _ [1] ! = "%"; ! hdrvalue FNAME PAGENO _ [2] ! = FNAME; ! hdrvalue FNAME PAGENO _ [3] ! = str PAGENO; ! hdrvalue FNAME PAGENO (ROWNO,COLNO) [4] ! = str ROWNO; ! hdrvalue FNAME PAGENO _ [4] ! = ""; ! hdrvalue FNAME PAGENO (ROWNO,COLNO) [5] ! = str COLNO; ! hdrvalue FNAME PAGENO _ [5] ! = ""; /* Rich text (html) formatting of tables. */ *************** *** 1599,1620 **** /* Formula parser. *********************************************************/ - /* Helper functions for string manipulation. */ - - special regsub ~OPTS ~REGEX ~S EXPR; - regsub OPTS REGEX S EXPR - = strcat (regex OPTS REGEX S (regskip++EXPR)) - ++ regskip; - - trim S = S where [S] = - regex "" "^[ \t\n]*(.*[^ \t\n])[ \t\n]*$" S (reg 1); - = "" where [_] = - regex "" "^[ \t\n]*$" S (); - = S otherwise; - - htmlquote "<" = "<"; - htmlquote ">" = ">"; - htmlquote "&" = "&"; - htmlquote S = regsub "g" "[<>&]" S (htmlquote (reg 0)); - /* Translate (relative) cell references in a formula given as a string by the given row and column offsets. */ --- 1675,1678 ---- Index: options.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/options.ui,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** options.ui 29 Oct 2007 22:54:28 -0000 1.2 --- options.ui 30 Oct 2007 00:39:10 -0000 1.3 *************** *** 9,14 **** <x>0</x> <y>0</y> ! <width>355</width> ! <height>163</height> </rect> </property> --- 9,14 ---- <x>0</x> <y>0</y> ! <width>561</width> ! <height>433</height> </rect> </property> *************** *** 29,90 **** <cstring>unnamed</cstring> </property> - <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>layout5</cstring> - </property> - <hbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <widget class="QPushButton"> - <property name="name"> - <cstring>buttonOk</cstring> - </property> - <property name="text"> - <string>&OK</string> - </property> - <property name="accel"> - <string></string> - </property> - <property name="autoDefault"> - <bool>true</bool> - </property> - <property name="default"> - <bool>true</bool> - </property> - </widget> - <spacer> - <property name="name"> - <cstring>Horizontal Spacing2</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Expanding</enum> - </property> - <property name="sizeHint"> - <size> - <width>240</width> - <height>20</height> - </size> - </property> - </spacer> - <widget class="QPushButton"> - <property name="name"> - <cstring>buttonCancel</cstring> - </property> - <property name="text"> - <string>&Cancel</string> - </property> - <property name="accel"> - <string></string> - </property> - <property name="autoDefault"> - <bool>true</bool> - </property> - </widget> - </hbox> - </widget> <widget class="QButtonGroup" row="0" column="1"> <property name="name"> --- 29,32 ---- *************** *** 203,206 **** --- 145,307 ---- </vbox> </widget> + <widget class="QGroupBox" row="1" column="0"> + <property name="name"> + <cstring>groupBox1</cstring> + </property> + <property name="title"> + <string>Spreadsheet</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLabel" row="0" column="0"> + <property name="name"> + <cstring>textLabel1</cstring> + </property> + <property name="text"> + <string>Header:</string> + </property> + </widget> + <widget class="QLineEdit" row="0" column="1"> + <property name="name"> + <cstring>lineEditTableHeader</cstring> + </property> + </widget> + <widget class="QLabel" row="1" column="0"> + <property name="name"> + <cstring>textLabel1_2</cstring> + </property> + <property name="text"> + <string>Footer:</string> + </property> + </widget> + <widget class="QLineEdit" row="1" column="1"> + <property name="name"> + <cstring>lineEditTableFooter</cstring> + </property> + </widget> + </grid> + </widget> + <widget class="QGroupBox" row="1" column="1"> + <property name="name"> + <cstring>groupBox2</cstring> + </property> + <property name="title"> + <string>Script</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLabel" row="0" column="0"> + <property name="name"> + <cstring>textLabel1_3</cstring> + </property> + <property name="text"> + <string>Header:</string> + </property> + </widget> + <widget class="QLabel" row="1" column="0"> + <property name="name"> + <cstring>textLabel1_2_2</cstring> + </property> + <property name="text"> + <string>Footer:</string> + </property> + </widget> + <widget class="QLineEdit" row="0" column="1"> + <property name="name"> + <cstring>lineEditScriptHeader</cstring> + </property> + </widget> + <widget class="QLineEdit" row="1" column="1"> + <property name="name"> + <cstring>lineEditScriptFooter</cstring> + </property> + </widget> + </grid> + </widget> + <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>layout5</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QPushButton"> + <property name="name"> + <cstring>buttonOk</cstring> + </property> + <property name="text"> + <string>&OK</string> + </property> + <property name="accel"> + <string></string> + </property> + <property name="autoDefault"> + <bool>true</bool> + </property> + <property name="default"> + <bool>true</bool> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>Horizontal Spacing2</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>240</width> + <height>20</height> + </size> + </property> + </spacer> + <widget class="QPushButton"> + <property name="name"> + <cstring>buttonCancel</cstring> + </property> + <property name="text"> + <string>&Cancel</string> + </property> + <property name="accel"> + <string></string> + </property> + <property name="autoDefault"> + <bool>true</bool> + </property> + </widget> + </hbox> + </widget> + <widget class="QLabel" row="2" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>textLabel2</cstring> + </property> + <property name="text"> + <string><p><b>Contents:</b> Determines which sections to print: the spreadsheet, the script, or both (default).</p> + + <p><b>Cells:</b> Whether to print just cell values (default), or just the formulas, or both.</p> + + <p><b>Spreadsheet/Script:</b> Enter the desired headers and footers for the printout here. + Plain text only. The following % symbols are replaced: + + <ul> + <li>%%: literal %.</li> + <li>%f: the filename (if available, otherwise this field is empty).</li> + <li>%p: the current page number.</li> + <li>%r, %c (spreadsheet section only): the row and column page indices. If the table + is broken into several pages, this indicates how the pages + must be arranged horizontally and vertically.</li> + </ul> + </p></string> + </property> + </widget> </grid> </widget> | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-29 22:54:33
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv2245 Modified Files: options.ui qcalc.q Log Message: add option to print either spreadsheet, script, or both Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -d -r1.44 -r1.45 *** qcalc.q 29 Oct 2007 21:37:25 -0000 1.44 --- qcalc.q 29 Oct 2007 22:54:28 -0000 1.45 *************** *** 10,18 **** /* TODO: - - Make print options a radio button group. Add print option to print the - table, the script (as plain text), or both (make print option work with - empty table and/or table as well; print empty pages in that case). Add - configurable header and footer. - - Catch window close (workaround in place, but it is quite awkward). --- 10,13 ---- *************** *** 126,131 **** // read the options dialog OPTIONSDG = qt_create (which "options.ui") CONN, ! OPTIONS_VALUES = qt_child OPTIONSDG "checkBoxPrintValues", ! OPTIONS_FORMULAS = qt_child OPTIONSDG "checkBoxPrintFormulas", // interpreter task (inferior Q process) and sempahore queue to communicate // with the interpreter --- 121,126 ---- // read the options dialog OPTIONSDG = qt_create (which "options.ui") CONN, ! OPTIONS_CONTENTS = qt_child OPTIONSDG "buttonGroupContents", ! OPTIONS_CELLS = qt_child OPTIONSDG "buttonGroupCells", // interpreter task (inferior Q process) and sempahore queue to communicate // with the interpreter *************** *** 168,173 **** ("/qcalc/geometry/minimized", MINIMIZED), ("/qcalc/geometry/maximized", MAXIMIZED), ! ("/qcalc/print/values", OPT_VALUES), ! ("/qcalc/print/formulas", OPT_FORMULAS), ("/qcalc/table/font", FONT1), ("/qcalc/text/font", FONT2), --- 163,168 ---- ("/qcalc/geometry/minimized", MINIMIZED), ("/qcalc/geometry/maximized", MAXIMIZED), ! ("/qcalc/print/contents", OPT_CONTENTS), ! ("/qcalc/print/cells", OPT_CELLS), ("/qcalc/table/font", FONT1), ("/qcalc/text/font", FONT2), *************** *** 178,182 **** ("q-lang.sourceforge.net","Qt/Q", qt_val "QSettings" "User"), ! [W,H,MINIMIZED,MAXIMIZED,OPT_VALUES,OPT_FORMULAS, FONT1,FONT2,HL] = load_defaults DEFAULTS --- 173,177 ---- ("q-lang.sourceforge.net","Qt/Q", qt_val "QSettings" "User"), ! [W,H,MINIMIZED,MAXIMIZED,OPT_CONTENTS,OPT_CELLS, FONT1,FONT2,HL] = load_defaults DEFAULTS *************** *** 185,196 **** ("/qcalc/geometry/minimized", false), ("/qcalc/geometry/maximized", false), ! ("/qcalc/print/values", true), ! ("/qcalc/print/formulas", false), ("/qcalc/table/font", DEF_FONT1), ("/qcalc/text/font", DEF_FONT2), ("/qcalc/text/highlighting", true)], RC = qt APP "setMainWidget" MAIN || ! qt OPTIONS_VALUES "setChecked" OPT_VALUES || ! qt OPTIONS_FORMULAS "setChecked" OPT_FORMULAS || enable_highlighting HL || dowith set_font [TABLE,EDIT,LOG] $ --- 180,191 ---- ("/qcalc/geometry/minimized", false), ("/qcalc/geometry/maximized", false), ! ("/qcalc/print/contents", 3), ! ("/qcalc/print/cells", 1), ("/qcalc/table/font", DEF_FONT1), ("/qcalc/text/font", DEF_FONT2), ("/qcalc/text/highlighting", true)], RC = qt APP "setMainWidget" MAIN || ! qt OPTIONS_CONTENTS "setButton" OPT_CONTENTS || ! qt OPTIONS_CELLS "setButton" OPT_CELLS || enable_highlighting HL || dowith set_font [TABLE,EDIT,LOG] $ *************** *** 213,218 **** MINIMIZED = qt MAIN "isMinimized" (), MAXIMIZED = qt MAIN "isMaximized" (), ! OPT_VALUES = qt OPTIONS_VALUES "isChecked" (), ! OPT_FORMULAS = qt OPTIONS_FORMULAS "isChecked" (), FONT1 = font_to_descr $ get_font TABLE, FONT2 = font_to_descr $ get_font EDIT, --- 208,213 ---- MINIMIZED = qt MAIN "isMinimized" (), MAXIMIZED = qt MAIN "isMaximized" (), ! OPT_CONTENTS = qt OPTIONS_CONTENTS "selectedId" (), ! OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), FONT1 = font_to_descr $ get_font TABLE, FONT2 = font_to_descr $ get_font EDIT, *************** *** 278,291 **** false,MAIN); ! options_dg = qt OPTIONS_VALUES "setChecked" OPT_VALUES || ! qt OPTIONS_FORMULAS "setChecked" OPT_FORMULAS if RES=0 ! where OPT_VALUES = qt OPTIONS_VALUES "isChecked" (), ! OPT_FORMULAS = qt OPTIONS_FORMULAS "isChecked" (), RES = qt OPTIONSDG "show" () || qt OPTIONSDG "exec" (); - = qt OPTIONS_VALUES "setChecked" true - if not OPT_VALUES and then not OPT_FORMULAS - where OPT_VALUES = qt OPTIONS_VALUES "isChecked" (), - OPT_FORMULAS = qt OPTIONS_FORMULAS "isChecked" (); // this one is non-modal --- 273,282 ---- false,MAIN); ! options_dg = qt OPTIONS_CONTENTS "setButton" OPT_CONTENTS || ! qt OPTIONS_CELLS "setButton" OPT_CELLS if RES=0 ! where OPT_CONTENTS = qt OPTIONS_CONTENTS "selectedId" (), ! OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), RES = qt OPTIONSDG "show" () || qt OPTIONSDG "exec" (); // this one is non-modal *************** *** 1149,1162 **** print _ _ _ where PRT:QtObject = printer SEL, ! OPT_VALUES = qt OPTIONS_VALUES "isChecked" (), ! OPT_FORMULAS = qt OPTIONS_FORMULAS "isChecked" (), FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () if neq () ALL where ALL = selection_all, SEL = selection: ! = doprint PRT (FROM,TO) $ ! format_as_text OPT_VALUES OPT_FORMULAS (I1,J1;I2,J2) where (_,_;I1,J1;I2,J2) = SEL if qt PRT "printRange" () = PRINT_SEL; ! = doprint PRT (FROM,TO) $ ! format_as_text OPT_VALUES OPT_FORMULAS (I1,J1;I2,J2) where (_,_;I1,J1;I2,J2) = ALL; otherwise: --- 1140,1153 ---- print _ _ _ where PRT:QtObject = printer SEL, ! OPT_CONTENTS = qt OPTIONS_CONTENTS "selectedId" (), ! OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () if neq () ALL where ALL = selection_all, SEL = selection: ! = doprint PRT OPT_CONTENTS (FROM,TO) $ ! format_as_text OPT_CELLS (I1,J1;I2,J2) where (_,_;I1,J1;I2,J2) = SEL if qt PRT "printRange" () = PRINT_SEL; ! = doprint PRT OPT_CONTENTS (FROM,TO) $ ! format_as_text OPT_CELLS (I1,J1;I2,J2) where (_,_;I1,J1;I2,J2) = ALL; otherwise: *************** *** 1180,1187 **** def PSEP = 2; ! doprint PRT (FROM,TO) S = waitmsg "Printing..." || qt TEXT "setWidth" (P,WD) || ! dopage PRT P MARGIN (0,0) (WD,HT) TEXT (FROM,TO) 1 (1,1) || qt P "end" () || statusmsg "Done" --- 1171,1179 ---- def PSEP = 2; ! doprint PRT CONTENTS (FROM,TO) S = waitmsg "Printing..." || qt TEXT "setWidth" (P,WD) || ! dopage PRT P MARGIN (0,0) (WD,HT) TEXT ! CONTENTS (FROM,TO) 1 (1,1) || qt P "end" () || statusmsg "Done" *************** *** 1203,1210 **** = statusmsg "Print aborted"; ! dopage PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO (ROWNO,COLNO) = // skip this page and advance to the next one ! nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) ! PAGENO (ROWNO,COLNO) if not page_in_range FROM TO PAGENO; = // translate the coordinate system qt M "translate" (-X,-Y) || --- 1195,1204 ---- = statusmsg "Print aborted"; ! dopage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) PAGENO (ROWNO,COLNO) = // skip this page and advance to the next one ! nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) ! PAGENO (ROWNO,COLNO) ! if (CONTENTS and 1=0) or else ! not page_in_range FROM TO PAGENO; = // translate the coordinate system qt M "translate" (-X,-Y) || *************** *** 1215,1219 **** qt P "drawText" (MARGIN+X+WD-W,MARGIN+Y+HT+A,FOOTER) || // do the next page, if any ! nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO (ROWNO,COLNO) where // the clip rectangle for this page --- 1209,1213 ---- qt P "drawText" (MARGIN+X+WD-W,MARGIN+Y+HT+A,FOOTER) || // do the next page, if any ! nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) PAGENO (ROWNO,COLNO) where // the clip rectangle for this page *************** *** 1229,1243 **** W = qt FM "width" FOOTER; ! nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO (ROWNO,COLNO) ! = if all (page_in_range FROM TO) [PAGENO,PAGENO+1] then qt PRT "newPage" () || ! dopage PRT P MARGIN (X+WD,Y) (WD,HT) TEXT (FROM,TO) (PAGENO+1) (ROWNO,COLNO+1) if X+WD < qt TEXT "width" (); ! = if all (page_in_range FROM TO) [PAGENO,PAGENO+1] then qt PRT "newPage" () || ! dopage PRT P MARGIN (0,Y+HT) (WD,HT) TEXT (FROM,TO) (PAGENO+1) (ROWNO+1,1) if Y+HT < qt TEXT "height" (); = () otherwise; --- 1223,1281 ---- W = qt FM "width" FOOTER; ! nextpage PRT P MARGIN (X,Y) (WD,HT) TEXT CONTENTS (FROM,TO) PAGENO ! (ROWNO,COLNO) ! = if (CONTENTS and 1<>0) and then ! all (page_in_range FROM TO) [PAGENO,PAGENO+1] then qt PRT "newPage" () || ! dopage PRT P MARGIN (X+WD,Y) (WD,HT) TEXT CONTENTS (FROM,TO) (PAGENO+1) (ROWNO,COLNO+1) if X+WD < qt TEXT "width" (); ! = if (CONTENTS and 1<>0) and then ! all (page_in_range FROM TO) [PAGENO,PAGENO+1] then qt PRT "newPage" () || ! dopage PRT P MARGIN (0,Y+HT) (WD,HT) TEXT CONTENTS (FROM,TO) (PAGENO+1) (ROWNO+1,1) if Y+HT < qt TEXT "height" (); + = if (CONTENTS and 1<>0) and then + all (page_in_range FROM TO) [PAGENO,PAGENO+1] then + qt PRT "newPage" () || + doscript PRT P MARGIN (0,0) (WD,HT) TEXT (FROM,TO) (PAGENO+1) + where TEXT = qt_new "QSimpleRichText" + (qt "QStyleSheet" "convertFromPlainText" $ + qt EDIT "text" (),get_font EDIT) + if CONTENTS and 2<>0; + = () otherwise; + + doscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO + = // skip this page and advance to the next one + nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO + if not page_in_range FROM TO PAGENO; + = // translate the coordinate system + qt M "translate" (-X,-Y) || + qt P "setWorldMatrix" M || + // print the text of the page + qt TEXT "draw" (P,MARGIN,MARGIN,R,CG) || + // print the footer + qt P "drawText" (MARGIN+X+WD-W,MARGIN+Y+HT+A,FOOTER) || + // do the next page, if any + nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO + where // the clip rectangle for this page + R = qt_new "QRect" (MARGIN+X,MARGIN+Y,WD,HT), + // the transformation matrix + M = qt_new "QWMatrix" (), + // the color group + CG = qt TABLE "colorGroup" (), + // the footer + FM = qt P "fontMetrics" (), + A = qt FM "ascent" (), + FOOTER = make_footer (get FILENAME) PAGENO (), + W = qt FM "width" FOOTER; + + nextscript PRT P MARGIN (X,Y) (WD,HT) TEXT (FROM,TO) PAGENO + = if all (page_in_range FROM TO) [PAGENO,PAGENO+1] then + qt PRT "newPage" () || + doscript PRT P MARGIN (0,Y+HT) (WD,HT) TEXT (FROM,TO) + (PAGENO+1) + if Y+HT < qt TEXT "height" (); = () otherwise; *************** *** 1252,1258 **** otherwise; /* Rich text (html) formatting of tables. */ ! format_as_text OPT_VALUES OPT_FORMULAS (I1,J1;I2,J2) = sprintf "<table border=1 cellspacing=0>\n%s\n</table>\n" $ join "\n" $ map (sprintf "<tr>%s</tr>".join " ") L --- 1290,1303 ---- otherwise; + make_footer FNAME:String PAGENO () + = sprintf "%s page %d" + (last $ split "/" FNAME,PAGENO); + make_footer _ PAGENO () + = sprintf "page %d" PAGENO + otherwise; + /* Rich text (html) formatting of tables. */ ! format_as_text OPT_CELLS (I1,J1;I2,J2) = sprintf "<table border=1 cellspacing=0>\n%s\n</table>\n" $ join "\n" $ map (sprintf "<tr>%s</tr>".join " ") L *************** *** 1265,1277 **** cons (sprintf "<td><b>%d</b></td>" (I+1)) // data row ! [format_cell OPT_VALUES OPT_FORMULAS (I,J) : J in [J1..J2]] : I in [I1..I2]]; ! format_cell OPT_VALUES OPT_FORMULAS (I,J) where FLAG = sel_flag (I,J), ! F = if OPT_FORMULAS and then not FLAG and then member (get EVAL) (I,J) then sel_val (I,J) else "", ! S = if OPT_VALUES or else null F or else FLAG then sel_cval (I,J) else "": = if null F then sprintf "<td align=right>%s</td>" $ htmlquote S --- 1310,1325 ---- cons (sprintf "<td><b>%d</b></td>" (I+1)) // data row ! [format_cell OPT_CELLS (I,J) : J in [J1..J2]] : I in [I1..I2]]; ! format_cell OPT_CELLS (I,J) where FLAG = sel_flag (I,J), ! F = if (OPT_CELLS and 2<>0) and then not FLAG and then ! member (get EVAL) (I,J) then sel_val (I,J) else "", ! S = if (OPT_CELLS and 1<>0) or else null F or else FLAG then ! sel_cval (I,J) ! else "": = if null F then sprintf "<td align=right>%s</td>" $ htmlquote S Index: options.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/options.ui,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** options.ui 29 Oct 2007 01:41:30 -0000 1.1 --- options.ui 29 Oct 2007 22:54:28 -0000 1.2 *************** *** 9,14 **** <x>0</x> <y>0</y> ! <width>308</width> ! <height>128</height> </rect> </property> --- 9,14 ---- <x>0</x> <y>0</y> ! <width>355</width> ! <height>163</height> </rect> </property> *************** *** 25,68 **** <bool>true</bool> </property> ! <vbox> <property name="name"> <cstring>unnamed</cstring> </property> ! <widget class="QGroupBox"> ! <property name="name"> ! <cstring>groupBox1</cstring> ! </property> ! <property name="title"> ! <string>Contents</string> ! </property> ! <vbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <widget class="QCheckBox"> ! <property name="name"> ! <cstring>checkBoxPrintValues</cstring> ! </property> ! <property name="text"> ! <string>Print &values</string> ! </property> ! <property name="accel"> ! <string>Alt+V</string> ! </property> ! </widget> ! <widget class="QCheckBox"> ! <property name="name"> ! <cstring>checkBoxPrintFormulas</cstring> ! </property> ! <property name="text"> ! <string>Print &formulas</string> ! </property> ! <property name="accel"> ! <string>Alt+F</string> ! </property> ! </widget> ! </vbox> ! </widget> ! <widget class="QLayoutWidget"> <property name="name"> <cstring>layout5</cstring> --- 25,33 ---- <bool>true</bool> </property> ! <grid> <property name="name"> <cstring>unnamed</cstring> </property> ! <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2"> <property name="name"> <cstring>layout5</cstring> *************** *** 122,130 **** </hbox> </widget> ! </vbox> </widget> <images> <image name="image0"> ! <data format="PNG" length="890">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034149444154388da5d341681c551cc7f16fea206f20813792400614b2d043d65e26160f59417653226455906211c44210bc78f114447ab0210729514a302042ca1ac8a9062b65cd219a8ea0898790eed2364628640396ae90e03c74c8fc691f8c874960b78d64adbfcb7f98f9f3797fdebcd7c5235959dea869ad02afd723890589134c2c5f0193675e39bdf3687fc7a95e5fad6cdeda4e5bb3ffe77ebab2bc9156afaf8e3f310cb07875a5b279b31d4fd3345d59de4817afae16ff17be305fad6cac6db64ffe579a2ecc571b9d0157aa95b92fabc151dfe6ae54af6ddebadf86afded84cffadbf35278071209c9d59686b9e9d5908b4728bb9019dbd789815a55dc44af15858f5b894c70a5a392a9cbe94e1d3971602adfd70646c58bbca2549000b49024a299258f4b1b0f93b416bc5c8684103e1d4e4dcb8a75538323aa49503519c804d8824ab8d9d0662d9391616234644d05a531e2be8dcb3fd95f268412b472122604184832afcf17b84c4722cfc54fed4cb833d6e77e03dd383dbadc8e59e83a71dec83188b837d60b158e2fd98e6fd5dbc3e8fbbdbf782f9b7eeba1fbcdaf7dbccd29e1c393196c9a5ef7f3191312d130ad8968963a1792fc2c48202de1ebc19685f5dc6126ecf0cb5ed779aa61aa00be0fdf7a6031461b954d0b9933eaea348105cb28a804882522e72fb533c1ba2f69aa8a11c8d9ad415944e7db8655a17e83a7c78f7fc5420c865bfd72fea5e8dd7ad888c010be5d787f1b447b4fe199e2ca1e3269e030920b90c07553a7da1661e830f73f6dc850105030245053f0ae85cbf5f391bfcaa7d1ba29d269e5280008ac40ae2f9d4d6a92b28bd34954dfe187c541627862ee607f838e737715bd0c32422081eb575ea40e9cc275ba62378e5a3bc4e2ce10b2f12f8fd09382e58c00124c99a2c44c665ed00ef0806a84ee4b558c2c230813fa832d408c409ec1e9c380f9a4d8fb53b7c7ba253f8b5e92d83a57423a4deac49b6137192e17b26bb450d83df17a11cdee8180678f3f32d0394967ea6defc293be36895a187d7c40224fc2718e09d2fb2c9bff9817ae3b6c0ae81d121e803ba154482316e673fefa8cc9ecf6b2c61e964143cdf6fc0516085efeef4b363dcc9278601a6cfe5350fb9e6f550544e8411cf24969989afb72efe0317aabd3ccfc3154a0000000049454e44ae426082</data> </image> </images> --- 87,211 ---- </hbox> </widget> ! <widget class="QButtonGroup" row="0" column="1"> ! <property name="name"> ! <cstring>buttonGroupCells</cstring> ! </property> ! <property name="title"> ! <string>Cells</string> ! </property> ! <property name="selectedId" stdset="0"> ! <number>1</number> ! </property> ! <vbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <widget class="QRadioButton"> ! <property name="name"> ! <cstring>radioButton1_2</cstring> ! </property> ! <property name="text"> ! <string>&Values</string> ! </property> ! <property name="accel"> ! <string>Alt+V</string> ! </property> ! <property name="buttonGroupId"> ! <number>1</number> ! </property> ! </widget> ! <widget class="QRadioButton"> ! <property name="name"> ! <cstring>radioButton2_2</cstring> ! </property> ! <property name="text"> ! <string>&Formulas</string> ! </property> ! <property name="accel"> ! <string>Alt+F</string> ! </property> ! <property name="buttonGroupId"> ! <number>2</number> ! </property> ! </widget> ! <widget class="QRadioButton"> ! <property name="name"> ! <cstring>radioButton3_2</cstring> ! </property> ! <property name="text"> ! <string>&Both</string> ! </property> ! <property name="accel"> ! <string>Alt+B</string> ! </property> ! <property name="buttonGroupId"> ! <number>3</number> ! </property> ! </widget> ! </vbox> ! </widget> ! <widget class="QButtonGroup" row="0" column="0"> ! <property name="name"> ! <cstring>buttonGroupContents</cstring> ! </property> ! <property name="title"> ! <string>Contents</string> ! </property> ! <property name="selectedId" stdset="0"> ! <number>1</number> ! </property> ! <vbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <widget class="QRadioButton"> ! <property name="name"> ! <cstring>radioButton1</cstring> ! </property> ! <property name="text"> ! <string>&Spreadsheet</string> ! </property> ! <property name="accel"> ! <string>Alt+S</string> ! </property> ! <property name="buttonGroupId"> ! <number>1</number> ! </property> ! </widget> ! <widget class="QRadioButton"> ! <property name="name"> ! <cstring>radioButton2</cstring> ! </property> ! <property name="text"> ! <string>Scrip&t</string> ! </property> ! <property name="accel"> ! <string>Alt+T</string> ! </property> ! <property name="buttonGroupId"> ! <number>2</number> ! </property> ! </widget> ! <widget class="QRadioButton"> ! <property name="name"> ! <cstring>radioButton3</cstring> ! </property> ! <property name="text"> ! <string>&Both</string> ! </property> ! <property name="accel"> ! <string>Alt+B</string> ! </property> ! <property name="buttonGroupId"> ! <number>3</number> ! </property> ! </widget> ! </vbox> ! </widget> ! </grid> </widget> <images> <image name="image0"> ! <data format="PNG" length="910">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035549444154388da5d141681c551cc7f16fea086f6423efc10676c142565ac8d2cba4d243b708bb911e123d48b5784d0f5e7a2fa178b0218a942025b41e849435103c68494596289564448c0b96984549b607d914846e308bf3a843e60f1d981e66834d1ac95a7f97ffccbc3f9ff79ff7fad89795e5f5359d713d93d3045640046ba3cf70983c3372e2fefefe9e53fb7aa5dada7890ecc9c32459bab39a2c2dae8e3f330c70eb8ba56aebd77d7892242b77d693dac26af97fe1f373b5eafacfadbdf24e92cccfd5367b9b6e6ea93afb69cd3b686df666ed766be3af3df6ea0fade4dffa9fcc1189a37185ebdf9899dfd37c6366decb2953cebda4d20f8fba0b1920a67c28ac8d616cf4b4d64afbd357537cfaeabc97cb16fc91d19276fb5d88badd11988c2608ad3e14de0a024cd6a55439a95d943f35393b9ed7da2f558ada551004a91a8469ddf8bd89c4eafea13021360a2372d93c95d1922e0e16aa63674b5a2b431446285ca2906e8db06d41427b28fcdcf16269c8f46bcf7dd1c1e80cf9a303382f28c29d0e388a702704073a0f3b6cff69718de28f56c7bbf94ed39d787de0dec78b1d397062859a5cf8c6b7120a120a0ad5adfa9f772b045b82b511da713937f493973baaaf11e33ff86478cf792749a201fa002ebe3beda1f0df3a3ba2738306a334416c314e5add58118401266308d63e201ffbd069a34f1568de958681cacb134dfbe4067dbb0f172f4c7b36b6d70ab9425969455e6bda9d2d148ab1d11226ab69d73f241f2fa3ed26ae0262888e17d9bc6b1b38aa726262cd3e05efe6dcf9f706156a5090b282ef05743157a88e79bfe842eca39c364629400045140b0ce4a9d76968a8bc32954efe147c506e5d1abe72f2987abf30b0091905b180a320061c20142227cf5a5d1a3854ce4c356d4ff0cae5a20e62fcd2693c938d40b9bb034318a5b84014ba2cd769b850e9090658ba5cd481e08fbcaa3c73ac8b76042482b6c0f3400682ed3ccb0df9ea48aff06b1f35ad8aa92c7e278d604dba534629deb1f0b7c0a6c59836c6e1cd9e618037ae37ad72a82cfc4823a8a7bf4f5681487adedd4444fc2718e0edebe9e49f7f2b8df66f026d0ba3c360482f765b10ebf676790765f642518be08f0d055e216b41a5932fdfcbd1ecb893cf0c034c9f2f6a1e713bdf4f192740c4d82066e6d297cd2b8f01fc65b3f0e89015950000000049454e44ae426082</data> </image> </images> *************** *** 143,146 **** --- 224,233 ---- </connection> </connections> + <tabstops> + <tabstop>radioButton1</tabstop> + <tabstop>radioButton1_2</tabstop> + <tabstop>buttonOk</tabstop> + <tabstop>buttonCancel</tabstop> + </tabstops> <layoutdefaults spacing="6" margin="11"/> </UI> | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-29 22:52:53
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv1279 Modified Files: qcalc.ui Log Message: cosmetic changes Index: qcalc.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.ui,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** qcalc.ui 29 Oct 2007 01:41:31 -0000 1.10 --- qcalc.ui 29 Oct 2007 22:52:49 -0000 1.11 *************** *** 9,13 **** <x>0</x> <y>0</y> ! <width>726</width> <height>582</height> </rect> --- 9,13 ---- <x>0</x> <y>0</y> ! <width>753</width> <height>582</height> </rect> *************** *** 332,335 **** --- 332,336 ---- <separator/> <action name="filePrintAction"/> + <action name="filePrintOptionsAction"/> </toolbar> <toolbar dock="2"> *************** *** 893,978 **** <images> <image name="image0"> ! <data format="PNG" length="2116">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af40000080b494441545885959761681cd711c77f6a4ef01636641f5c6097caf45e90c1a738243ad20f5208b56452884da1313505997c489cf44b5c829b9ad2c66929b53fb4b14b0a569ab4282969748526be843a52922639536274a28e6f55a2de2a58cd3bb0ea5da26b77535dbcdb6a63f5c35e2cb996ac74e0f167f6766ffe6f66deccbcae959515bababad848fef96dac24e2552cbee247e098401b30c16f77f408b04047a02c48221026e83628139235ef2b1392888f6393d15b9fe7c75d9b1138773f334a703bbd204d880183cf812918b9f59105a83541c4fcf0ba042edecf7d58549cedc0dd8f43ef11e8de90ebe7141fdeda495cf3d0b3fc3db7c9dbfd610a4eff00f43e02ddd0f0a650a6838e7c94a5d0914659abbabb50a7bfa7d479aeaec120d1a81d2f83be1563962f7ee17ad6754a97ca03e620740b586ea04c0b23052355d466357db6c248e9a0a6985718697245cf705557a6053818b715d1c0750938b92cb1b0072076a1dba0361b30f1168cbfee3175d6a2def4c08cf1230f4c0b1db957e919aefddd83ee08daa03623409a653581873fa7187f4e102e16c1b1397c7018210cfcf3168df91a228570be8644acd14f23229fc6f42822a813ce56b073092cd5c152c4c0757320ee7df0a6aa5dc470f7e3a71ab5553276e118de92cb434f6ac607ea9c3ce533ba7718521f8c6192f353a8ad03706112848628416e1710796009fcda28c65601ad086323027ffde3a507103ceab5f4edca52b8c9241a171f8b63234718bb30c671e338752671443f8db71bf4ddab206ee098169c2f831059bdc82b88fc2be8dc2ca0d50413f4f29a109cfbf345ebc3facac177aa1f3631792e22b85de735c7fd03d805c1c88e11a26d11b7bc7b0b8782430456c068ed08b20093af4b5872c190f8f3653043686bc8730dfaed24d313b0bb3b04ced5579e724c47d38e7f3ed0abbe743a2933d91ea368c389916344f988278227383a7b94c88a00b07b6d825cc09ea1126ea0694c0b702b58a986f926a402e6830eaeea8e9519c706963b2170048f8684a83b243b7f37c889af9d00b39f281771581fa696d6700317d123b0120b910a8cd725137ba7c002a7a748e5b44bdfa198684e626c2b4094408fddc155dd7f0f1c9b2c3c9f9d82a4159f9248dcd614c5ad45dc9ccb6432c9e1f9c354d20a5edba3582862376d762dece248ee048d7bea88391fc78481a12251ab080b064ebeb01afb75d0c90b48813c0440d7caca0af5b7fcaffa69f2e6ee1d8ad24b2518002ff21056b663a36d3094ec627fef2328532123689c1aa56f680f534f1e6670748c7d8f9c64cf360fd55fa1d4e3a0db31ca34aec5d6146a5b0411347ed021d0d5d5953b57bdf4a114c696865de5c0c27efa7afa889b31fbf2fb19c8efa32f0ff10220c03b53a5b414c21b153855a1fec23bf8f4533955e6c8c3e338a601a60dede05accd5c10cc084c6b7568fe1a7ae768f1645f19952a19ff1c249c276c4eea161c225903782d6314a19c44b90840aff47fb70da095a089c9e2208481245d553ecbb27c08fb284f3238d631957741d24a802590b5f53095788928a97e88f939664305f627771985883cc417c1e9465c062d6db3d61c3d3134cdc39487cf018568fa4583050db057a7e0f24e0e4ed0eaaab74658b2ba720584380871edbf90fab2d7f597db70e39f017c15010a61024307146a303f0db318a84e4ce12c3bf9fc0b87f0f006e3366e4de41dc6644bd29a82fb88469780dea28829b3b7580ab7bc165b7557fdeca49a6a6c1b1203c0f22815880632a2c011203eb3699f5883628253104240bd937fd852293670728f5f6234d790d2adb8265e0c6ab4300c0d19f7c63de0b1a65ffac266c6709579dd104b5105900d9030921a56d509f0f8952d03a9b82fc250d26a83b24de6c89c6420416f86dddc1201bdb9204ba217c7f1d02c065897cc16dc524413682eddea118b85b629b509f055590594c2d497526260ea0fa5e8c2315de020c0f281021ded901e2a08125e8a0260e1aa87cc7d2bba0532eae3792ddf0e4c17333d8c9f6ef1e1c4407a0b66465b331031121fd058917c4240b60f51a3826246988b34532714a139db7a8ce5618dbfb103a04254187604b084210735077c16df19df5bae165afed9d50ade23361136c0b083337d3062124d5e918290c1c0b440e740b4ab7495804652bdc04e45c91d15f0d31c469aa59d2a35320078d940f8216cf3e31cdc4464369f7830fbcbcb8eb8ec19b4af739d9993541d742aca2a0d863a05b317d45037d21266c1a60c5147b0c6a333e96e930faeb93448bf283caab3bbf09fc07f874cdffaf749e7db2d14494ca9c7c7af2bd296c01b609710462abc4310d9236f4e50d08c11206ae172231a89e81f082a0fc52038943927a1f00978045c0ff9ff511106d446065ca9b7c2a4924e5571a60012266f0cbe014402f407d21264cc08f32f7fa09b8effb945f9bc46f0617abeef8c393af1df81ef0afce5a5ab3da64514d371cc96a678eb79caf17cbfebc35421b54dec83e25bbf194f206533359a5f4da9ae8b71e5ea097ac90679f7b7be76f3a3b5f023e21eb7febcaf566c2cba4d62fdca637e2ce95b07a400a4872e0101362207330f6d2499248122dd5cbf599f26810b81f7576d8262bba9f92c57c5dd9ec6a76c3630fbcf32761db773d7eb00f771eac1cd4de8f49024d75c6c55eb6ced59ae59fb933e5bfac311c93d5bb0d0d7f1e0f005cd6a17e41b4b9ab36e750ec918cbf52c79d8e4896f5c5b0e51dab9c39fe06abeebe4496dd973733fc996c7a3905baf7ec7df16f03dbfab7784d0f99934b9e5f2f4fbe71e80457c7f9df1dc39bee7aad6ce601809465ebc5da9cfb7d62f187caf4819f462d6f91abe39cfebf863f93ff02e01a23b15354aa8d0000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="695">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000027e49444154388da594c14b545114c67f86c23c50f0818b260a1214cc45a4b428e91fe8adca9020a145420bb76ddb056dac9db6880aa45741cd0c51f2168206862308a330e2042633038113223332ca7b324a5f8b99a7a38e3a8e1f5cbe7b0fef1e7ef7dd730f92f04728322125a450447213d249ebb1f1d8a5f2fde563dfc28d4baeab8a72f3454f262515a4e9d945b97129341e6b3f3171285239e9ae4ac9952ccd13bbe4576b26f695cd167d7a765192149b934f7ee318e2891390fdec25e255490549534572fb5bacbf66625fd3b38b5276bfbb71c91eb53b2a10579774577949aefec5e68af3e1b75acb46b37724718e32596de07954256f030840622c5cd7bd902191060b707e3b00fb133bcb93184615595360ac0169e8bc055c794a670744d75fd4f7d7072e03d449daa358405b17bd6dd3341a8e2335be0fc0ed20a49bf136e731ae37931aeba6b52f45e6d564263818bd7080184cd36860a314f0ddff3d39309a80f62710e882b62d8c6bbd9086d6be2e58c8d15c3ff0fa086230cd1259d39ee772c578e6479860cb0c999914c1c7e761bb131a2c488dc0fbe84e82ada9ce74ea53e53a2e946edd3de079494b6fa4c290a4c592af487a232929e54bf1cf96778898368a17b80d34ecb9e715e3b93f19cc4090cc9701828341f09ac1b0201781216727bc693eef9977ecd3d5b17f92295b524c5a1a94566d29fe48ca8e49d967d2e8cd8fa7af63bf561a27f1e65f42cb08deb2036d01727f5b61f39732ebf40035f68a722dd9d2f80349d2f088ad95f1e47d9da557f8725792bbf3e44856f6a87df8493bcb54f7f2ca64045bf7f6e360b55b00b5f78a4ab2b0ced82b8e5039f1a13a7ef7f30316166122dca3b7f8f129d6d146e76effc3feafff01727d067dec085c640000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="999">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003ae49444154388db5955f485b6718c67f910c72a032052f0c7490400a552668ae6ae8c5b41b0cb78b56d8c0c92e66b78bb90d56c40b291b03f5a2ebdce898171b933236bd706dec8675b0621c1d51e89a286a522925ca9064a8cb39a8784ebb94671727e94c676fc67ce0f07e2fe77ccff79cf7dfe791c461a0e25058ff0be2e30af47c9098498ccbece955d5ff433aa8f72f5e4a999294c9eca9bb57134ffc58d2139f12fa07d59818d7fcf44db9d870cdd723d2e4b04e1f481c7823a3e96fa4ee91bcba47a4ae2ff3ea1a967c2fa64c49f45f487c941f95b259976c2fefda92dfdd1b37bbde3e20242d235262afa8a4b869322b6537a4f317246deb1f94d645c5caba7b5a3ae213342a5046dcdc9b9124c5b7f791a6a5efc6332ac383e2d98f29cee7a5fe21a9a563ba2c24def650106c8854c2f52508ef82ff2874be122cffb5a7801da8ae0636c1ef87773e86b63a587560d56cfd8cc6782344a0009ea67319253f0d32bb03755bb0ba6b136e30fe9d8cbf5c72db04a31a82afa6697bae1eff3336ed2183e8b28d631b3b4ec1b6862e1a955e5f2848b2a878741dac3983a925683b06d13b45bb04ed253f0867bf4d337aae9e290baa7d06efce406783c1c0f754aedd303620f68ba7e9bd8c929fbb8a872e439537c7c8193f310b5a437075195a03105d70fdd1051bdfb306ce3d985f05b3008617cc759bf99f8c878e350bdec89b9cbf24a95815bed32977f17b79de9495b2db527f4c9a5e945e1b91bef8516aea732ba7ea84444026b5894542ba4f48014fdd5b19a5bf0a3270c3666ecee0ca876000d7976c5e6a30185d823a1f0cff0a9605b93f6c2ccbc0dccce1ecfab1d69350088395bc8b37fc9023b1fbdc3bd554c17137c6d596417bb34b3abb0391e3069fcc40530d8c2dbbb1751c2060603a60597e2c0b381206d2e00d83972a68fd01a0c25e4e1336606022cdd91720b6094d9530b602915a18bb0d04dc04da05c8dd36b172e090c3e7030a69a01e0a49f0f23485d835004fcfa0e46b80ba02743e0f540239c00fa3bf416b0d4457a0b9c60d47a40aa2cbd01680ab0bae1d9b07738b3fd7d6633bac9d721ba0f6f5949afba4c95b7be5097bacd33219f77d6a312f6d4bf1d9ac9495a67fce4877a5aede8408e8f2a3baafed936a3b523a10a5b34ab3a1d8e5a9457746e8a65b41935352cfcb1247f74fba1371750f1fcc2b49f9ed7d8a1f48895b25a529292d5d8926b49794084d97dd711e4e4a75c7a0aa115881b6901b535f089c95346d817aa22b6e02ed3bb35088b8d501384e0c1fad58bbe06c718d75cf9947c43aa4cbf46f64210f1ed591721a0000000049454e44ae426082</data> </image> <image name="image3"> ! <data format="PNG" length="969">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000039049444154388dd5944f48237714c73f2d2d989b010b0a162610a1093dd8d0431d2874879e7ea197482fbbb7ed657be9654fc5e3b6ec616ba1d0855e226cd999c3e24c0f3ad98338966d1d8bab316c620c084664d1a08b0934647e74075e0fae5a895bafedbbbcdf1f7edff77ddff77e0ffe6ff6c6e94276e416bbdcc58060b78c359cc3ad8132a0b41ba20c13af0ad61878551f95cae3565dd498627a6106737062ce5e71be5afa75ba7321c262b0de1611d9df3f1611913b3fcccbe2b73d999a9e952b6d4fe4cef4ac4c7cb4f8f329de9ba70bcbc841134646920024bb598a2d07955257a66d57a0909944c7ee677dc06e2d8414d4b70f00085b2532e92fd88a36ae0456a330b36243acfb2f7bcfa42d7511f9eb24bbe36722f2e47cff6ff663715ee6efef4be6fd9bed3ec65e350003c25af3e4c088e06368772300daed137f7074d1d7ab4d0e5a264ec586f89ce819b04a598435304753b002c96e027fa94eb293c07d0c03ad04f62f2103ad0445077423c137dfbb74aa831cbc70508622fa871467c04ed5c734c0ad948986c05e0b3187b214d742cc36ccac041c1c99dc5f70c9ecb6f9ee7191e67393fbbf3be8ee359c8af33ac67968c0643a47f0bcce8d7193a005d7c74d4a6f87143216c43e85cc24a5b74adcf8a04072a0c4f5f1023a2ea15e2af465c5bb373ddb963d91f960f342618e0f7b2222b2bf73d2df9bf51d919ec8faeaa6c8a1c862b02e37bfbc27139fde96e1e1427ff1544ae1d6cae4d3d9f36847907c2771d2dfa924f52a648d14d4206764096a652c2387d6407c91f1b9c61b1ecac861574200c29526c4102cd401f0e7ca6401773ea4bd0dc5b980cc760efbb700ad2db4b6fb6500587e70dc7ef848647f55447644a42722ab227228b2fc6453644f64be24227591d947cbd22b8b3c7c2072bc2aa23e9f92a90f67657050f54b61573ccc08ec0d1f8621fca30ec3e0af953187b2b86b21d630d84f03ac3f4d9c151fb30bce539f28d2d8dabb40f45c63c3c2edfa67dd61be972568d4c9a773f80d5069136f2b448d597831a84c9e52ec5318cba36300858ea34b34aeb8686de16cb86040d0a863a5b3f88d32f93478d510159b785b018a57a333ce63575dd011baebbc86f1a8a2f3c2c11a32092a652c238b5f83bc91c3ad0614c64cbcd847a52c3ceda2c62cdcd846bd6bd1e9762056173ec8d9a0bff6c9ed5b5aabbb5adb8c8c8ebc9a548a2876214e0011c493e8d83d79106b60001d6b9abb2d3add36030c7cade3a59f2e6f8fffbafd0de04d54efee6c137e0000000049454e44ae426082</data> </image> <image name="image4"> ! <data format="PNG" length="1117">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042449444154388dd59341689b6518c77febb2f115a636b04a021d24988209eb58833b3420731f13e12d5e52bdb40765f1b49ea4e0942a08cec39817851e44b3d31261eccbc5253b8c7e85ead2b16e4969d3b4d0d1140d6d70b35f7059bf57fdb6c7435b67d75e76f4b9bc87f7797ffcdefff3bef01c255f7350668d6fc51e7d2293e32bf39fa98fe4342f3f0f636f709a1e99655ee48cc86f3745d637dcf94f4e9d97d3b43fdbdb26bfc8b971fbae23cbe2882d8e54c5b97ce5a6b3715b9cab57c4d9b82dcef7e971677d521c7caa480f51a62f811e82ebef18b12e1d4d913476598cdbf32222b2baba2e22222317aecac8971b7271ec9aeca8bf3644364222cb88ac1a22570222177ae5e287a3d2fbdad96f76199ba118d42018f403106845596b6431c3fd3b3b0f34e1c10a043aa06240971fbb15469d1a058fb77781f3951284a15a5b0360aa31c14824c5822eeeec5cfa008e0436a1a120ce4f103dd4c7a5e92cdad37b0ca42a7277f6e98dd74b22e393f33b6358bd2c222322d5a8c87aaf48a64fa4342e5f5cb82cd7c69625faea606d9771a66c130f41696e6b2fe262be1ec3715c009cfb0e040bb066435707cc18a0fd94161648684576c6c2f5760bb7a96e1316211e08634f55f1b7dac94f80bfd98e75bd84bfa9a1b606c114dc332092823a682f49e641161552b0173857ce4308ac99127d876364ee94481c86f49d2209274e6de553080761c9864810f756816a23c4d8ad0c5abb6467b2ff01f702bd3ee8ddd7a6bafbc957aa0c44e2d875183a1ec76e94183c9aa074608cf09b0ad60ce81e844a07ed86e252478cc1e343680fd4df6a6b78a3078017810ee085fd81633d9fbfdf7712bb5ee5ad939df012c45e09d2c2e1d88923e0e4a0b31d1696e0d000a57a83f7de1da62e4bcccd46996ca469365a0f5b1bd359e020b01f38d8a6ba07b016c18cc49e06741ffc9d7e58fa0afc67e05703a22998b6881f1d860a988138cd5616e5a9679e9bdace3883daca18a03855030f8a378a100ac2fd093832087336d4fd8cddc8539b83b11b16aeabc9b6b2cf8cad00f0a4cd8c28b2952266571c6a90381ea65487c4d104dc8b42e730acd5402748fba224a3fd147c16c9e8005a6f1a6acfdd367d0c3c029a6db9991ce6c304d9691b0260dfaa120f40f1e70c840660ad040f62a427ca980c91295bb82d45a66c81e7e2ea1c8040e10fe077e02194ff6c532145a69547854d4adb592f42a24b91ffee3c540cd23f16307b86b13c0bd5add05e6e6bd5dba64fa0fc08ca8fa12c9b3f6f2683d22699b2453c04f6621522909fcb61d66ba4e7a6303b86b1162c40915bc891f425292c1500d03ab7f70731bb14d96616f3b009339bc6f94a91fede14b98822792285edb318ea19005f8ea19e24055f0e1536d1cd2668774ff0be536f8c9cd3dafd586b4db02b055e0e00f7dfc1581880de3aac3d8d8181f634b59506cd96838171567b133fecc6ff9fea1ff5693dc740ecb4f60000000049454e44ae426082</data> </image> <image name="image5"> ! <data format="PNG" length="919">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035e49444154388d95956f68137718c7bfadd791b00e5ab068c04903756a99d0044552d61709be9074832d1b8cc5b137be19e81ba92ff5c558fb42abbe99be10a24c6c1524f645bca54cd6163a726373b98ed4bb8e30ef4aaa77c196cba823094df4bb1777296de955f2bcf9fc9ee39eef7d7fcfefcf012ec1024d25c72ad758a5c3ad79f2c1d4ac5bbd6b28aaf19a3bc51ac9029700b434254cd25d78cde16377e1563761755edff679a506a0cd6177535e1dc7e56d1c379c966d88a9a9e65b9195954dc26547d45a6db04ce69aec71f444f410ad0d8eb738e54b1bc971d10a7c1878773b8df5af454f4607514728fa592c76267cfa03e95f79577f28884a0df0b601a55740e77b80b95c81afcb8bd272059d452fc6e71f5617fe9afb537a223df60ade87e95fd22a0020f17162d7f723a3cf489205c79144d220e94c9b9643c361de46e256921beb941c295e9dbad770fa2d491a865d6d1816992795823d6fcdd89e4aa14cae92d93fb23665852c9399d92c434743fd5026b4b946cf1abcfe20b329cf384e45cd6ef358de662267bb5572a4a19194edf5087f14bed6aa0b6a37ba80d27205e80274dd845aebc78d79406d074ecf0023ff018393c0ed3af0c524700f36d31e60784642ef11a05a378100a02f9af0f9fd0785c1eec177f00ae8ecf2024b80dfefc3e2afc09c009cbd0be000801977867cfd76dd01df3a7dbb3bf7b49ebf7ba1862220cfe9c0fb4069b9047305f8ed3e80a223b2036f3b75ba6e021ee0a74712cc95d26b646e655f88a90c9927c594bde2995985b4487196b40ae468ca1e0fdd21b53c3936edf45fb2b9b53efe55fce796a17343b92be7ae1c99fe4746a42788f33f0cc32300a80351218a897afaadf9dedda7103c5642a42788e9bf655cbd76f1c7d6f0bef0731481485f10d2a28abd4f3c305774c40762903aa67166e0143a3a3cae7940f063e1e930227d41c845207228884ab5b284d8a7b1af69918a6a90abe4e8a5517295d434cddeb76fa1981269dcb4a8a81ab9462627c437877b0ef72139926c1bbb93acae9facc6296b22b2b23330c8ecb8920720b40040e068607f6420f25dbc3d7e109f788e078ff5baded3ebe1dccba80195a7a88edcbff0bbb962e6d293e9cbc562f1f9a677133792279bb2dab8ed54327c22d1bb516b93b358fbe7dfe8ba09c0d9973b505dd001c1f9d3ec0380f4971bb5fe07b778c5edbd2b259c0000000049454e44ae426082</data> </image> <image name="image6"> ! <data format="PNG" length="1135">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000043649444154388d9d9541681c551cc67f9bbe8437b2c20ea4b0835132d54077a062170a1ae8a1038ad9a5821bbc6c28083db5c542691069532976c543ab1789a74685d07a2859909ae9a1b23d488398b0112293484ab790e204133203593aafeba3f130db6c1a50d0ffe563fefffff7dec7c73733a9bbd0e7092e9dedcd963de8290889a715ff07ab5ab50eae47d7ab5a5d489d876f2a6f17de0f548cd58cf03538825d28f1513842d2006c2169a0b08524d0600908002b6d106a58fcb1f66d6a239b7d6ceecff570f42ca45761a000cb5e07732558aec2817282f68efe62b533cf95e0c6a7b060333137d64a5dcd66b78ef759f8ef9571d22334a862534a70e814a1f231730e4f2b5e0b3132268d1fa6b1370709f1302924a85dc2ef46e0b745521b7dfd5b66af0967aee23ff470064ab072073e3805ddfc7bcdd6a16975942f54e1165cfbb5c29e81e7e4c57cfa79eadd6bbcaabbf13716d87bee23d89370fd3b35f6de84daf79f63df9da1fefb32d6be3c18c00b16715ad33dd34bb85ac5509af0fe6d06fe0ce82a0175203f6b4114e09ca96c0b9afeb882331bc38371dc3e17a2883c39f86c14ee04b009c65e130e479859179a11a6285005baaa5a9107a61f8e437a04cce4d0a90f47293e68e02f55a11912da319cb842636e029a31c18d0a4c06c9f2e141eaab35502ea19ea200749584040d4529e1cd3859bc39cdf0828dbf19e1645de8b731878a3000f6ebc7a11961f5b93037066b09257f6c14562730c5309e6e2b46400d60a8986cddf2a847d7709a0a7f76024469db9eda3d0f3615c1ec75682ae2c92b495a74004140a8bd447101491d7033c7b7c9d71616c92b17d6039ca60255dd9eb9fd05688658ca8530c2503600c68b1608035314f0501d8f67e8904704f8782024be56a03b09ab2d257ba19a4a70a9c30376790c0c2a60a53d3d90c311120438b2fc0cd1dd9fd862cae1048f9edf9ed575bccb63a0ce0e6527c6f149fa0d5d050abb141b847a0a04d0bb9aecddae9197c60ec5b4732c4af0e568c2ce8173ec0a08b0a584f90b497f05dcf97aa2540cc3a137e0880b80dd902024a6187e36c73e1efc3443706b1a80f8d841385421d00a544c70c485b24b280001f1a1103e194b2e5c86c68d311089f70520753f93d9b2fb6d687b4a6604be3e0516db24262b2073b0548577cf43c681233b8c1f2a822c011e345dc67f1e2375392db7465fc9e10b3adfdb8c4970fa24d6d35cff532dc3cce92283320900dd10ac85a8b979ba86db397664b9e3a98ab1be7800e7c692a4acec3af0760dbeaac1c92283b2fdf2e412b4044ca1485d96f2f168bfddd3c864923f824886a106531884c498c2a021c0d6d0d031b63480b6756da5fc05744beacb8bd496165b7b2e225efea58bd70649e13fd1ecd30550f3182df055c44bba006a01f39102a5309fbc03cd7968697814c1a3b7a0390b2d4dfd8f87e4d743bc8df5c9d459e82bc1a59aa02c85eca19dda6aa289fff8dc8a94ba5e800b7f036e16e8a185900c080000000049454e44ae426082</data> </image> <image name="image7"> ! <data format="PNG" length="667">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000026249444154388ded953168135118c77f89177881067250a1850a7912a4010b17e9e022a41d1c2e2db427dd1c12537070a843c1d1c14521450aba25a4938390c3c53a2660c1c1420e2ad4c98b28246031072de6340fea90a6d6a6a5593a08bee537bceffbbf3f1fdf9f17d8dfdfe73c4ef05c54ff4961ad385bc4c6c6c23ae4723297111394fc2dd6f2b562f6f8fd200c98332602818f8f40b07eb19c014af95997e76f25ae47d6fc766bad773f288316163e7ef725bd9c224e293f0ff7e6258f1660e42a255b2f678ed60dc20bea8a42207812796c10e4cd03a321eede88603b70f332683fdbbcff149a7b19b8f679e297ed6cb18540701683161676a46c10a7726792a83531caca06c82158d980e9b130b9eb20c629d991c19d0758f861a0852bc918d1c408f880a09f8d3da87c00543b6bb56f9f39f320f1700545747b08ec4d58df83860fd397c0f3615bc08b4d78d7dba378b86487cbc6d98ee7bea708e9d06971c0a7c9846e08d175ea7a50ff8a47a79525a47b745a586ab17a9a535b2b1884f44ab0a0ecaad94e577b04dd71778038f80a729380200afa433a380565574f736a6be5fba0d7e850eddb639b6729c2a395440c84f62749b53ad0c643b9ab6872cd54e97ab73e1f4393732877094dc650ae872665a03053e84bce22b90a4952091f18073e82350ec54d680e03b5a3d905420775353c34a64c9576fa1cfbf8acf33a0aae4b444663c307cdea64fa3e343d60d7f5404e99a49dbee4f56892f64026d9c5a97f81fa0ef8b1ae08f12ebd31a837a1d900767905529aa49dc3ad38c9f1df33cf67402e816ba049a0054a07dc3ac82ab8ab16cbcef1bec0ff1fe4dc857f03270e5fc0fa468a920000000049454e44ae426082</data> </image> <image name="image8"> ! <data format="PNG" length="679">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000026e49444154388ded95316813511c87bf94087790c21d5848c0420e6e0974488782754a1c2f11ea952ca543cfd8a98214e2e028ae15148a2e89c920dd7a2e266353d0b682436e1032f4200187141ac841c01ce4200ed7c49828ad4307c1b77cc37beff73efefff77881c160c0758c996b49fd278383857b054c4c74f41173b16c9c051ed32421c48866fba04420f711841896fb85573bf5426972df38035a5a4340c0c5e560ae2c01454562e5c172835c46a1d305799611f7ab2dcc9308a68d05dcbf7b9e6a0ef78f734647f74397ca713c1a479bacec1a90cb2870ea871d5f9053584d46d8cac0d126713c6a95a5b2e4e232cc1932a0a5352ab3e538505d5b408206b533857a1b088224f4585b1051e63b646fcb9836e82a98361c9fc05b8b43bdbb9a9c32ae2c9625a08a8ab4f795e69eab6cd7db28f96e21a0755201272c2aaf3ff3ec494d76d6df402c042f3ef9946f41384ec29cdd4f4c1993f9fe9ea0b882d7dbd67beb2f274f1ed214df4904c56af4662f7e4715710101a89f41ad4949eba68cf1f5019e0e3ad824f3bd82f5a72e3f14b30954c04642a518f390b696a1720a9d309c7cc042651b1b2ed6fd7a2b7e6b1accc7b921d7a00782081e44c310917c6317a8d9e07a7e4f703b80eccc4cd6669279cfb4e863a08ac4c2f03c0d91906fe67aa0a9b01885e5348443405f76e893bcd47864ceee06c148313a0f7288518d87a3d106e71c07af95d479645d6a3c32a752c2c3687e8396035ad43776a37e039d160e1ec93c156b748faf62fcd37c6783a05294e6400a41b30d74001a499ddce1d4cbbbbaf941090fc33987e6d9301423cfc1e1d4cbfb1be331f322281bd0307472a5c9f9c0ff1fe4da837f00e01a63b132fec5930000000049454e44ae426082</data> </image> <image name="image9"> ! <data format="PNG" length="889">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034049444154388d9d9241689b6518c7ff951ede408537e0e08da7b7b04bd443e66d4361890c641d9a4d3c9421442bc2d481a5a7500bceb587514a193487b1842434d90e76b694ac0361d9a83339489b506d36149208928431928f1992f750f87bc8f275a62b66796edff7bdcfeffd3dffef014990443f95dad892ac33c7cce10d36ef65c0fc83ab24c9c7ff0f7ea52f62b72cf801209ddf7ed1a501a6593aa8de8f719d9ddaf96f433dcec0d676f1d9c701a2b89bde224926e2fb0dc5f556809b1de2eece806016c856bdc54aa8d3301dac04ba97b59eb6588f333a103891ec985d9e4b30756537c0f4b3e12b64e527e6c2a1941ce8e7f99a40e9cf2a4cd307336a45e1050abf95307bbd918f6423decfbf3a63ed8ff712c64b0b2bac67c844244592fc25b3cbbba1626eeae292ece50dbf08c0a0f667868de7841028c094df9caec500a0542e216445f0ede4046edfc9e0c6cd741e7bf0deb839631d843c67bc72416946748eeb8ae414f9d84dd6dde4559de3860e2442f3e453723a186662662b77eecc943c8c37d485263f73c9f30a259c3212af09547f055cef0a60048070a0fd37e010c731bbfc36acf2361e369cce8dd4c201d32ecf0637be1f8d3a752d80572590c5a743f3b51817f4498ce31e861dc01101540df0e43490bb053831597868ac37dc626de883b2d50bb6d553172519170c8fab45fbd0252debeb8aa4260b9a8ceb4e3c2d77e7b9e566f19a6e704e7b7aa3b0d76dec2d0035e0785bfc65cfd5348b4e0f80ac017e471e4e004700586de0e847400d18fdc2210b02abbd91d851a4bf74d0e731483e9056f51f117339e139ff0e4ec265809f653ebd67bcbe71d1c08801b2c22a59667214e2431c337e2881f47573f6bdf9dada81288a7e758f9740a641c641ee08724192211d5db9a0240030a2c88a2667f437f6e81bbac44d4586f477cff3ec3d8e34715664d5e2b1b2f18f8d4026ef23efdb13575f5f2ec7f6a301da0f2c382c99efbeba7dc794c78246df5a3e64effa29065589db92e14f541400c2e34a32ae1a4c0ad6e70e31eea7aa6571df95ab05268eca40f57d254f039e76b3261d4f247e7c64d606365efa58e9d615d56008e426c86b20d70597fccade8a818cbffea1566eb49577c2a1564b8f2c7dc208cc5645ec1c30d97bf65fb159798f76fb07870000000049454e44ae426082</data> </image> <image name="image10"> ! <data format="PNG" length="447">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000018649444154388d9d94b16bc24014c63f840e1d3b7470e8d6a1f85f2bcd5675511c3a74ef50a125113a587050b070010b2f6087afc3dd2577975c12fb20bc9c773c7e7cfe2e20096624cf646a7ab87e4c1624894b1efd7266ad4474574af4f0f1d345c3411269561faca7ea66f72f218f12dbdf9412aa847c1c2f28497f729419379589834743fe46ca2b7b0d1e0000eed15cd740f15300b740f6f185d10330db2c2387836acd589c8c1b6c618b35f18ccdd0fd4eb16dbfb2c61fde9cb11d64b28dfe07cadf77c9ebc4e65d4e1a491da599d8b1c6da62ed2907d732b636041ed72ab0868e3535623157ae245611627bde9c4bdfb7a4549efb19db0196e4647a17f1a76e69d64aec93c488c5b586e476bb2719cb58821ecb38b4666ffaae221e00c0700d2493258a39904ca6c8e766bdd2eb917b337f015c553732ffce81217038e4c01d30db4cab9bd7f97458e3927bc49de5101785f30db901f2dc272fbf257d88d32e6b1a88fb45d1650d4975d4b9f81ef7cd3862cdbf332ed6812dd69e95593f9bf54b95f11f49e5d9e937408bae0000000049454e44ae426082</data> </image> <image name="image11"> ! <data format="PNG" length="864">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000032749444154388d859551485b6714c77f910e72a18277acb00b0a061258dc0651d883051f14f6b02b7bb97ddbdeec9b83c1287b72650cbb07b16c14ea436963299d3eb5f7a9c9c346b731a68e499b206aca5696622101857c414bbe8f299c3ee4467393dcedc0e5c73f2487df3d7ce74b8c1eb5b8f0c3f76edacde44b792ea53d1e967cdc945b7cd77bf38bceef8a48af16dd3577f5ceddca2de9aa9b4b0f64fe6ae56e67d3a827263f8e0e50325f93f632d90d3530357a3d93f8d86afe5203d619af7fb7c2a76f0f149dfa9775525e910faf75bdc1693d594817a4362b8dbd45f9676147d6d6774444a4b257ebe6bec8e2b7f322b228b5f51991857421cab86fec83990c76026be8122b273e179323b0014edc667d6317276e9fe5e7bbb82917007bfc0a4fcf0f64a284636b4b937271f626681f5ec1b5dbe0e1e293270e18c2796a02c6263c50ab707f1d3eff39d6b3b3e427450ee744e4492477b644a42122013bf39dec63e91c058fbe1917913991fd2b22b216b02337ba4f4923f8acb6df089a3f0a35a7716f5ea4322b228fa3b9d5ddb8d935e09688fc1b36ef5b2dfae0802eaf4433d96386c7800dea40a336217b3f87c714d9e55c73632a37c645fefa44441e447227caf8306025e09f22b5df4444843eff998161d0a5d5263797e17c1dfdcb32c4ebe89f9618e9650cd00f4a6970e069a10cef80ff770e803e2fe9c2b6c11a74e1d72ad65b9350d458c31ab63556d285e7118d35d8b60525187b2fc1ee0bf052d3cdc6fe331f860deaf72c0c1a5431c8c57a40bfe78c75b0e6d5970ad2507ea118793f641c873f14f6e0146c1beca409e89ee6dd4e630d960554c119b2e1252452369443c606541d55f0e1d8a00a26e0590ecdf8b869da9aad3ad030149827da8d875d301a3ba5a3d96efc067014cc56817dc10a99b7193f841343b560e02430eecc6dc6faa8ed3404e71807aa5505436dc6e34716bc323829c018ec940113cea733d660f5f7303e00c7091bc74484af3e1a11a75fe39e83fc095dfcec5eb979e107c6563f68a5b16c0b75a0b12f5854ab1ac7b1c82ee7b83c331dfbcfbf97d3a7b579adcba8b571adbb623fe0ded9e69d8b38faa1529be06fe6f098c6e7ff7979629ad70a023f22226f886a0000000049454e44ae426082</data> </image> <image name="image12"> ! <data format="PNG" length="1061">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003ec49444154388d959451485b571cc6bf761bc487945cd8461c7644d8ba4526788541037d30b287527c2883c1ac14a245c6a4850d294c9c50097b902022e88370a393256e0b316c233828c4ca68e2704b4ca537115712a9e34662b909a95c8315be3ddc1b35eab2ee7bf9f89f7befeffccf77ee39c0310503111bd738130cb1a0a5c860284c6e90c11057b9c62f5043728c74f6fa78ea816f36e852fd2c044311f2291989c549d5f03c195e88504b7055f2065bce023b7b25daafba0900f159ea134c4cfa5c6a4c63f83ec93c195d91498d648264898caec9e43ec918a925b4c2c4a4cf56ab7b67af8f707f23d932536a21b810255532be269324e54c8624194dc864e9683c128b5399521f9c84f58f47d933cca328e48032e60b84c93c195fa3aebc6ef194511b2e6fe81e0c85290794c348fa46489f57cfd83d90d1e183c39eec61a62495bc4a92d4348ddc271545af334f15dd1585d4c8c121f75805dc33443a7b253a6f2a14af7b74703c9061e4b738592299313ad40cafd44af54a9827a3def8611c8ece09ba0732143b3cb4b7c575b07b64427fd1c8325ac97843a7aa257d164555abbcff4efff19c6d55500088ceca644cdffdc34c8d2c59325c3d5197c8f068e4d4061ed779efc3e94dbc03c49ea4d0fa3a9048678177816c2e07988142a10008c0dede1e6036dc04ccfde94fd60243ea088f49b3c1a3ff769f942bd95632ad646ec8333a41a9237ce64139ecd8bf1b1a5e5c5a2e2e2613c00740623d85a646a3e3378c8eeb80bd17fa07a97416e9640a89fad5624df083a5e9626eabd08d34107b9c426b731390051aebeb811d401004e03950f71a904a03d95fb3687cbf155d97bb6a76fc0a006c6656d7b74a078fb299f5ab07072f4c4d8e4bc86ee520d49b91db29c02cd4c13f378fb91fa601cbabf8ecad5bf8a3e4fd745efcebde87a2c936b7b2fbf3996000d8dc5c5db75cb04fbdfda8d1347e7fd2daa85db44c7e3f05e19980dbf7be5aba98b40fe33df370fb9bed3f06d647db6e5f285a60ddc6a586672dcd82c516489e86c3ed251d37250230d55a5e454aa7b5a0ae0c92cc500d38c8010ba54eeb4c55c600b0fcbb1fc59c0800e5c82fa4d8e1397daf1e53680f5f0ae905606711c2271220da71abadecf27454c38fabc1d92d559fa07fd1e0475697765724f3124999aa5f24ef5838d866c0e515b27f3ccaa09fff093ba9fe2b56973a2e92791f4999f43bc8510bfb2e5b67d03712e18dbb1a9dbd121dd7f52bcf3dabdf562f03ef69b1b894cf0df8be4cc52bb2ef8a8de7db1bda512c8680866b28630100b0fcd08fed2dc74b753d9d2c7efbf572ae3bf7dd28f0f732724f3e465d7317ce39bb2596cbed283f9f4779b78cf4d2d0b9ff1b0900dc68b1cc584c2617ec5dd8deb9f6d33f327c3df8bb54b7040000000049454e44ae426082</data> </image> <image name="image13"> ! <data format="PNG" length="931">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000036a49444154388dc5955f485b771cc53f3a2d0958484665065a889087d976a0321f2c65441963880cc7e8c33ab6bac160eca952f6b48715f6342e4584e42150b18e64834ddb215d6001eb283382dd3520dc4bd19148658928dc2b4c626885b3871bff44d3ad2f63e7e5fcbefc7ee77038bf1ff73648e27f851137a3464285171674a535faafa60933505c54418b929951f4457c1b2babee506f5ca346dcbc6e269e27eafeca17214c0f3c585dba7674c7f7e17c7dcd8db46e7e9991cc8c64244cd7cc287c74dfcc28aa451da228c5c6d5696534d13562bae15b92efcac9408de955f74ee10c2c6cdb40776061ddbe77588102b92d7b829e4341a96997abbde4429d0c5fbdd81df8a0dd05b876dc18808e314d14bd2452513212e668d5785475303553e5b494b7a5b68f4df9061538697c4bd1cf67cab2c6a5e45d4b9264c4cd513d39695a2e4b2a4bd68a233d958cb8a94fc625de9cbd5e3775d78c0ac96ad772a472dee31a3cdd7797ca2b1ee7b3522c2d05866a9f62e3fec2cd95c60a676161dd861da89c01768e9c7c0634c3ee5f801f16364ae0870225fab6a0a3c30e73b93c742271785281be3129bf28c5c6ad9a2e0f7ba8f26695b31e190953f3cb12afdfbf77c21820fc85268cb4236b5cb26caf877d2e574d9d4d6fe13892b3eccd8e2dc5668a6abb2271712a5c53054065cf1e0bb6044903c14a1080104178067e3fe042b0d50f25080621fd873707f7a0d71762200ad03f5c3ff58895cbdbde6d4bd2fc52f120a124158b5ee2a94cbe668e4d5a3296253aa7ea7f4fdabed1f08dbb92f5d07ba79234fbf058b77949c5237351d213c99894fae21291e4d04bc78d9bcebdb3b6b119faac3554f2bdf6e7694aa75c2e9df553dad9e5f42bcdb82e54b6a1d2b28bbfb519776b17ffa966528b05ded8095209b9ccfd72aeada15e6adffb8af60e32f75e330cb4417b0b10012ac05e95db21fb0842c0740efadbe1c1bacd40df792e7cf473ede51d5ce2f70dbfcefd981dc96e79874bc0f46f36b44276ad044d10ffd6269b83e9474b0cf4c078a1c477bf9fe7c25ba99fd8b8f46edd9e0ff0b62666b3d2ed1f2c39cb5ee7ceb2743b65299f958c94144b495cbeef12716e124986ffd9f0d038e01b9ccd194bd254a6a8f28a944ce7f5754aeafa745ebceacc11490ed793d6edb8065185030172a12e02ed3e585a607be3f1f41de81fe3f1cb6bcf9335e83ffa99fe0d6e5ac6c9fdb29ce20000000049454e44ae426082</data> </image> <image name="image14"> ! <data format="PNG" length="2101">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000007fc4944415458859d97616c53d715c77f29c9f43c81f62c852d6f4d55bf296c714405b6d844dc55533cb59b522651b34c6a583e90b5fd00eb872af0a12b9d5491b49a806954a42d5bd2aa1bf10746a2adc4661a8b530de2b0806d446a9b92c8cfa2a9634114bb21b29f82cbd987674a0249603bd2d55fe7de27dd73ffff73cf3daf4244a8a8a8602593375099e46fd4f1a3e824b81d401a7040345df627813a084f82a7aeec3b209c06cfa2efbff227f90207dd150779a3e2410144dab8e456d894ab03fb5a2802361e024b60ab5c01a72094065791dfae1a80b4f11c750c50033c771cd49d50b562ac0f6f671a6022091ff3f9230ff8d495c8024f3782ea852a4824c35084c4f8f2181e0dacba6e4c84e1e904c54a001e454456dc7de4790ec81144121d2222220b71918288a444e49ac85070c49a4f4919474466eff1ef5d5f106b5c75ca500bb22a039e4a484c02ce762886a0aa81d0c7218c33d0f99710e10b1ea21742a0c3f44408740fd1c9be25be85777d63b2df92310d5e6075094ad05007240760c64bdffb5083978406fb7fe34551c09e6f2431da8ba63a61b41777b56b91df8d56a99238b507ad5484e14ef41a1d6ef6435d3300ab27e1ebed6f076a9c2fbbd5bd844a519abfef666f6c0f4962189306d19f4dd3f94180eeb79f8562186c1ea627fad036ec84cf0e816ac0a40975ca57387d6a00ad51812b79f820bf3c03f24fd92509b9d4efea78d9fbd45e82f67e7026e99d39446f6b37bea77cd0047d33bd786bbd703a00360f1403680e0f4cec876addbafff5cd4b50732a70250d8e3ca15b8b24888c6554b926af0c8552691cbc1f9e313619f5365e18ff15de2d6e5c1b5de49fca633f6b675f691fd95296eed14eb26b93044e7be0669fc5c0f9fde0c8413a08f5dc87d369d3f2a7c05b550e2012953fb81d9a419adf7bb7ea8f774ff56228619c9509fa5a7b0913c65ff2d335dc45be2e0f3350b3b5866c65963d2d6efcd9204cba20d685a61a703e0daa1bce67cb78d7d7eaaccdd908dc2ae7003790c44c8e06a71dcf1f3d0ced1a226926d1d669741a9d8caaa3c43e89a16c5450a7541445c1366c27d212255f82c36f1551153ffbdf8c323d9a466b74806182aedc87d36706d036672d59debc23c1154e3554db091b617c8d3efc793fc63a831de33b18500748a69338b738a9b9584387d94167fe2889e7a318e7c268eba1b1c986860fc66d68f5cdf019a02f8f5abd0259a01e42002242212acf0c06ad6ae1fad025ae599728638aa8b3aa382e3bc479d529bb431d522888ccce8ac89c48fcc851918cc8485bbb8888b4b69d9478d70189045d22996649859b96c7902ab280480291edc89d4a5859b82cd7242c929acb88e3df0ee998eb90a650938c642212cfc8dd8ab62012393124f2515ca4a555445124726244522191f6b61e91449348b45964f6e0f298a9114921225600776ec197fe0be1ae9c01cabc42744b82a6a966424d219c6bdd3468601845d0a168829ef332fdd28fe174104351706ff690538b9866337d6775a883e9f47019834b7c236d828e25cba24a28ce4a7d60c08c7ea161c78e8d679d5e30c0be0e98005db7c10db02930a080762245608b07bd2b000ab85d36f48d064a7e3f4c8156df54c6e625bebe51811bc0638b72a06c8fc48fc85b3ddd111111c95cb7589f9d13918cc8e04729918c48fc6a41321f8aa4ae955549cd8a144446a205919488afe5b814c67c1209bb44328df7612aaa58f4cf2d9500e0b67fa6ff8346cd4df82c68ebad93dbd741621ebc0e1de6a1a1dac6f413a03f0618a0eb769807ddb441095ab7f8387cba1177632b98f6fb50dfa8c22d60dd520900e83af0f3c981f1805fbd00b91c500b813306f651c8ae0536803193c3ed82682c072a1806b01e4246021c60d666497eb293446cd47a058d601987410763ca842ac88ddf11ff9e7e60a87bf627afbd2a22d7c57adb17bde791b1b25fbe8ac74f88c85591c1a048664c6464cc9a6f6d3b29f18141918443646177199d168a6a49700219dcc6e7cb35246b065f298c1ffc9dd54cdcd15a16ac4046c6aca822970b323b2612bf6aad65ae59f3831fa5247258a47d578fc81892eae37e7c1d19dc861cd8ca2bcb3dc715ed2f1e7fa9b9cef7de8ee76cb001c8017660188ab510ba029e5ab09b564d8fa6c1fd045676cf43df45306339cce40ef6304c08abf9a0045442a0c4a7f6198e3d799ec04a2d5955fbae93f9f89132031991544a24d3271289164444249e2894192a4821613122223214ca482125d2fee249f16dcf5c0136014ee0bb8bc606e071a07aa58ea8e4a9f1bc73f862bf95ed26e895606c00b7c3060634386d9003fd311bfeb3e0aeb611380535a6c6ebef82a7da8b591af8142894b999be675c07f22b36a58d3fecf8666b4b467a8ec5979c5816c43a71b420b260e540ea98958007baac3ad0da92f9dcb565f70b582fffb780afad70d0957bc2d1738767cc5b41bf9ad7e1b3f2896f0255104c83bbd646e05fa0cd43ff7c14e3748ed8a5be9b8d39e721ff5fbffd4cece23b43c00c3057567f595bb527f46d8bff005bec3f3dafee645a81865a30f2a066c1580bba097bdfedc7cc7bc8dfecf3472ff9bbb3d9d87560be3c4ce04b60e5de7fb5ff02604dcfbeccb9d75eb5d81f095b57b1a75764e89845f7d1eda98baecdadbf00be073c0a7c038bf295fff71659e503d66f0727827f56aa9a9f0c9d55f06eb673e84f5162e735cc5bc14c6e2679e8d7e77ef90fac44bb59c605e0f6c36c0e3c9001802a5fcbf16b834744dadb4e4acfbecc5cf34f0fbe87d5d57d07580f7c1d58c3439efa7f0da0c2b73df5a6afe5b8f8b6c5ffae563b3d58f758c37a52aafeaf8dcbf65f5e7e8343b66c1a480000000049454e44ae426082</data> </image> <image name="image15"> ! <data format="PNG" length="1263">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000004b649444154388d8d936b6cd35518c67fdd5638c529e78fa0ad1ba19592582e4ab9182e8e382e099490688951b29018ae260bf10321d128d10488a21f84201a0c6820c00786f34252d4e940904100d72984021b6b1d83366ea17fa0ac67a3dbeb876e480628cfa79393f3fcf2bccf39c7413fed6f9641d54d2c983696f2c8593261cd9648231da151ccac8e110b8fa271d93447b6bfafbf1c7d8b25b5a2f0e33467b383937ed7d751c3f31e2fb77d3fa77f5459ab353e2cfb1a5e57521f4a7e41c6f3e9a1d58edcffc159522b6af755f92c74445ab7b7c88e60b5b4ab2e115a44b4488ffba4e47497883a2712ac97e6e0dbc7667c1c11cfd48d32fc3f132f699169d10435b13206e92898b1603781ce813a9a44e181a234945998d62c569b2bae32e94be4ac6e52e7de8aae1bd3d01f5c0060ce332199c1690e426a2cd80de06d024f152c2df660b582a52cac2aa8ccb9c0852ffe8a353b1e604e68dce8f581c5bb3df705e325a7ce006dc059d08d60c5e23d5a7325d25a1f559a4bb4c7bb948648631c771bf80e67515e0aaaa3f5ce74639deb1ef0ee8b32d734b1b2720145da03ca0b2a4377a8d4b73b5e53b92c7d34b922d9b07e5148e90a14875599cf60c152bf0bdf79c8ce9b305d952d9dbf7aab7802aba4e80eb9fcfb8e8fdc2d221c11e16f116a45dcdb24e57e71f55c60e0dd29826baf0d2ddfd7fc4ea8456e856aaf49b845c41b11d13b45dc1bae26bccb65c69dc40bddae12731af0020d801f500cb1e6ad1b0674de0d8eae1bd21e72fb3e21c5d6f00b560f362c1d0ff67030733c238caa7f03280228d87326db450cf80a68ccc3ed204e8aec55c15552d2bfbb35331c1d7a325b22ed1c53e3209200550aa6269dc39e90032c80828a80abd5530c3a00d840299826489779c66b3f6bcbabe5f1fe70dab812f670982439e5cf87d1daba68ce54ee036e02144462c95dee0c95c1cbe7760634b788e66b4935e28c0f65a549a77785eb6562b8ba43f571f73ee1e8895ce6b2d2dc8e9d00731b6c3b3d5a4dddba52bff48b867fbff4c0a97b24686cf6c7829498462000c4c01d407c099a2bc75357dbca91f058da23094a673ec3c20dbf51161b4aa18901a3401da4539d6285fd83636fdff3e834767a52b2d87acac47a77cee4af2115c561173172d9519e762b5e3dde4e4fd64fe197551419707019989c0f81a1c7a4deb581c282bef1c2e3acd9f6301c4cedbdd732c09337991c181f8e84cd80d85054e2384ee3c381e99dac1d940f548ad3a4eafe02ba0bfbc066fc9b8a31ae597686817a24b7d5efe94ea6bb9cb91b400910ed3d98018af3300012a0ebe9c91da9fb3577eafd0f4ce29b3f0173073c7cf187979ca7e9aef0f05caa8a038fe65cdfaa062c2632cc9ca780e1bdb09781278199c005c007349051b1dca64cc3eb3f01d7ef7945c135f28877d1f629da5bfe2cda5b1c582e53dc9baf5ea059841d226ab388de78f5a6de29592e8a7043846d1d3d6a91d4e10e4d029cf740ef27ef2a297547244a8b881211bd51d2eeb9d7ded38b8f6d522725a7aaa55b6f963f947fc97ce0b1bbbd450f60f6a9939af8759df4650de902d5607d973a3dab5a4fa9cff2f9b912d2a3dbecb3150768adad076edc6d743c007847cabd4e29bf9aa68a2b47a44e8c3e819d480059600030987ca75d0f55c17de420dfdf808735fc03ef15134e6c5cef850000000049454e44ae426082</data> </image> <image name="image16"> ! <data format="PNG" length="535">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001de49444154388dedd5bf6b935114c6f14f34c845145eb77728f866ccd66c3a08e63fb00547a1e2e024e858a4884807850e19441c4a1a44840e511174922a4807871ab414d14111711293412448f138d8a82d5a23b59bcf72eeb93fbe3cdc7beebda588b01ddab12dd4ed04ff53654b8aacad993fd595162d6819dd12b1a5b0a8a925d2a26eba6eb4e4aaae3256d59dd4f92be05505cea53d69a2ffb14fd96b8c39a1b343c5ad7c6f9ea958707948e70d85bb9aa99c5ed58fd627aafbaa5474acaa39313037e348be94476da5161aba663681cf28cc68a6cb29aa8bd5188ff1c85a596858d090ad9fdc96b9286a518b7c250ff3baa637c0a715e6353544fe2e8feae76ad4a216693685b6e6af3c94d6162e1873385593fe933e77f450470fe724130e920e257d7d49d2bfd467d59cb38eff7ecfa69cb6247c1242782cccea3a2fbc103eacf50fc6a78559137f38094c2a4cad2d1a405636e41f8437c29430390c74a0865796d620ef7e115f08a7743586ab9c9ddf5b15855d0ed88dfd78f953bc8fb69e2fea2e0c57eb3fde8a110f2d6304cf7e8acb78a46344c595e12f50695d764cd73199513cc73dbcd541dd35bd61a1eb1d7fd3036574f0046fcd29fe1e0ae50df96d371d01efcdb9b1598d6eae8d8e6fc9d073662b5028fdff9a06fa0a8a1cc5d78847dfc10000000049454e44ae426082</data> </image> <image name="image17"> ! <data format="PNG" length="739">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002aa49444154388db595b14fd4501cc73f350c357178973074a849493441a6820c7081c41a060716d91c1c8ca393838bab23f13f90bf8084c10107133b7132c895018e4b1c4a62a24cb48917edf092afc3eb71771c200b2f699b367d9f7cdeeff77bbfe749e246c679f0e90a462b44d79d7f181229c29c67de1af9b08269408a25d312f17fa522e29909b28e2555300a3f33ae4db33f1b6bd2c69a7e2e5068fe72f86148ac88e2f479203d8fb43749a6490797e46eaaa1da58934e4fa5d607e9e3ba1453281e872b7250bd88a48d77d2eb596935d09e2193c10c87c2fcaaeab876b7205c041f789698dc926a7a003f0c8981b4580e0ce1141c6c41054555310751db3a6b4f129ee7a125622c296fd70d3e1036a1bb0dbfbfc0bbaf25906001484922c3d24b070d81cf39ec962596c4ebb12f690006d03c716e49a79e2586fb4d677eb40507199dcdac9c018ae5c034a207d02b9de9f79cc6b7b26c5b92873df6fb311e010328aecddf2c1a9885bb4d38da86ea08ba052c5c6e3a5c106360004d13772ce9ccd35917470b5405545c693a0c1ea9e3fef0baeccf40c266566273070d1e3b6808fc70502e80f6c78560804ee59e7fbbb5699d7d0edc7bdb5e36f30a70bda35292c8dc5e783930ad0a0800df67ee9e6fda9654fec59b682cc687a1838e653fcf695860823ad6159c54b44e289b9078763479a3bd62c8b4f1e8d5c034cf69ec9625bb65c949e5a01560a1e9635a906a62d4fcccf852d3a1eccf012d4bda9cc460815e7d012d6a73dc0671bd22221adbfbef67a527463214ba33b0914f2c9f427770d387ae1d2804d17028ca4ec5317690fde2932bfef6b9e2f72af6b124ad1ee5f0d20ba009c72deaeffdb6a900a3804cabc185a6639533412c67d837cec4b9b679f6f324a66e7dc5de15d0b3ff21ae979fed3068f4636000198cccf58f264124c68f26efa60ed37f559cd8ff1c74f1f60000000049454e44ae426082</data> </image> <image name="image18"> ! <data format="PNG" length="852">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000031b49444154388d9d954f685c5514c67f9366e40ed6f29e54c9c0145e600ace40c00417a6e0c2800bb36c56ad1bf1cfaa2b292e445c48ea421a2c956661a18bd614176236965988265070146b4648cd9ba179e40d21cc0b933033a46166c8503e17ef65d2e8cc881eb87c5cee3ddffd387ce75cd494e44a6a4a6b111eee570a92aa92f2921e49fadc919616a4f7c7fd8ac3db92e8b7585bddd0a068ee85b8b67855da4372cf4b926a3fdc50ed6573ad1ff150363d4adfe840e239e03164d30dd8051a8b702781ddf6b14f62f54b1d2a787e7fe238b43ac030b0ff598845601b826fe609b6dab7fb124f0c520c24e2c08f333009fc0a9c35b06b48be3a49e1e6ca725f62779062801d1f5e5984078063e00f601fe6bd09468b49e6bebcab5e69c3036b0cb09b8793265ca5365816f9c070e9ce1c78b0fd20d35bf1c01a03adf27b70da80073cb6a004e7deb844a1ec431a72e55cef443507782d3f2bc991ee8f488f46a47947fac4093d7d10fafea7af56d4d36e036b6cdd021f48192819c0266f66e02cf85b01d9ccff51dcac489be3d2deb8743f23fdf6b1f441263cab4477368f2b06cb80159734a0c6bfcfc0190bfe041c0bd6f3602609765a908420a8c319c879396231fbd958cc7e11b081e763313bdedbc70fbf83d7cec37a025eba08251bf61b70e132c91712b003c9a48d5b84d7535300a7801361b219024e756bdcea70842903f5228c18f096c119c1dd9f84b16ca8d482c2439f6c2a547c3cda00cf746745224e381be2805704fb2dd83290be08dffb64df9c8375489eb6714b30911e85324c39d311a1799afdc9518d3b1ccd86d4340416646e80174009dce10638e07a3ed9748838b0d475451be000a84bf5ea71571c4498bb1aa27b4ffa74565a8dce22ff76e7f7aa74effacf02cb02eb444f1fb722c57420f8c5e7ee1757e0db1cfe8577610cdc72d0558c036ed9273b06cb5b4b48f586547fd2dfc791e2850fdf51737e413afc03369e521cf9579254eddf79ac443f48337aa0d994b45a53ad5a0b7ba112e2c66688b55a78b1520df1f247b3bd897b76dec1dff0f04ef44da9f6ef8a87dd72c0f6d7013972180c6dda4c33fd9ff6534cfca3c7fe022c02396eb294de450000000049454e44ae426082</data> </image> <image name="image19"> ! <data format="PNG" length="666">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000026149444154388dad934f68db6518c73f69abcd6629a94eed90b95f419038640a1edccda288ec24450f8d6382cc8345bd84ca465741420f63eda1b25e2422424a2fd253d940684421dda941652d6c87b48b35c540630936d674ece3a129e8d6a6e99f07bebcbceff33e9ff7e1e1fba2b2ad720c3bc6f33be677d1cec99f3e58b67875ad30c2ebff3daf5ce7b405ae964609f6072ea56eabeaec8693e17ef391f72df66475fabeb9c8efc95738013cb67770b6fb47552b39b5a095efd4929ad02c9780e340cbdec0633c6d35b16075b3e7cdb5a4a6d4f852f4182781f6c6473146c47c745833eb56e76ad08c5ad16a4aedb6f42b37804ea0a931f00c6f9a8bfce1435151936a5c2bb5eb932480e6c6c0578838c3f9429a2fadbe3c63b9a7ac735a8da9612dd7aee6d132f7735ff3593df8ff3710021e018e16863865817b8a16d15ce0d408cbce93f67b7e36cb9d81977861a791d4377a9179736881df32e9a9b5586fcc705bf86de029a01d8800e1ed6a9ba817b7f88536cc7ec3e70b375787c787c68906d141a019f85b5d55d7b7adaddbf1389f94bee5ab9a675bcdf967bc3f6e6767e739e0f1c6edf680e636677e64cbb37d1ff55d50ed7eadfb76edb147f705de4ed3d7a78b992b1983e7828f81270e0d9c1c4cbe635e9397924bc03340eba180554ad952fedae835cfbc7ae63270ecd0c0b177636f58d6787f7c0578163872286095d478eaceece8ac67df3a3b023cb9371fd789e589e5f7d2f7d20ef40e7c08b48542a1a38dfb781705413091f82261ac379664f337860edc31c0e2e2e2c5f51fd637ba82ae5e205c13002d0701ab773b3a3a3e8dfe157d115801fed9cafd0bba7a52e7c7954efd0000000049454e44ae426082</data> </image> <image name="image20"> ! <data format="PNG" length="520">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001cf49444154388d9594bf6adb5018c57f0acee0a1100f8106da216bb666cc2b944e1e0b7d8790e7c84304ec4d63a15bbb6909d8509086521c48410617a4a2c215a881d3e14ad67f4bfe407cf7a2cba71f47e71e24a1405224f9796fee17cbcf92c4318f5d446a9531b64791b1c31fdca38623093f680fb6536df30349c971e48e24881133eaf50f3885384ed97ef9c3fa65c5cde41aefc5e3e3a7b9c350ed35eeaa5c0eedecda5f499bafe128ea13005ef77c750ae9df14ce20f8f9c4d51bf07ead0661f7c4bd1a9b8ac61d6ed101d7f4baa2181a3e473af4be744d7d784b63f7de9532c9bd5f48bb7c3fe01a75b8a64d9c49eeed4226b148d1ce74136725f166196af1e0ca5f867bf24e8def6eef6a4443ffa0708d2aae691117438b5e68d85726315226f9df37d2aebca1758db3064932a07171ee873deb0707888b8cd86bdc20b60e6df42cef463d1a9b46efd1b818aa5d63ff5c124f00586f593e9659f06e7253cf860ff37a86606fe4f47c4afc3b0660bb8db9783bc3fbe671c99c71311834684ddea3067158129f8cbaf7952c3146300593189881e33848b2e417952c1943ec1f704d55eba389af0ae2534853cad47b65f39a732ac4de78620db8a68b783286f869bdc57b6cbba56f7fc97bfe0376373b424e077f770000000049454e44ae426082</data> </image> <image name="image21"> ! <data format="PNG" length="1245">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000004a449444154388d85955f6853571cc73fbd9ec8b9dab85cd7ba5e9c9951041357e9cd8278cb142d6ccec9062ac85018a8f8223e0c1ce2401f6403d9f6206cea40a92f9b7b997b5b33518cc3d928b42693da645331651393b55d73a7b1f7a8d79e3dc4d9aa75fbbe7ccf1f7e1fbee77038bf06fe43fd29379420de4c50b4114ccb058aa4707c3f2856949483332f9ebdffbcda86e742db1c3721e48642a0da1242460b819a9e10925ca0469342fe910bd4e5b890277638f1ee63478f3dfc5fb04eb9f30bf04182f8461a4b115a3b0cf060d93ab853829a84de340cd9630c677ca03b2bf824ffc6a60b3b3ede114c9a52a7dc57fadb9cb44eb97a64f316adcfddd0a3576f68adb5d6b747c77d54ebd14cb7d61f7da36f2c75f568ca2d9c59eabeb37ddb763119747e7fca4deb153b1fea4f3fd77a506b7dabce7aae5fd55aa7fbb57eebed319d727f3bb3d47dfde0de8306c0947fc11b6635ef4f18e23d7f556b4368db6e08ca50a9e15fe921148de1df2c119a61e10f9408452caae7339842e237294233963794ae645e8cdf0f429de1e0b4fb9afb600ac0a536d75d2c5af7d33a478636ef0669c270008966420b6270b28b507409fcee139ad90cd92ecc35abc00e13aa0878a182d5182374a567ee92e1dae5532f854bc6a5362794146c2835966690da44b592872660a105a147c759bb866aeff72054ddd7ae19bfc3560b8a9272444193152e05debaf890173192c269f603da6291768348194bc6e087ae7128c003b0d6ae87816cdd9fd6f943d8bd65f07ca31d6791ed55a3462ec8dba6205ab5caa062548b1918b2291fe9ac17f9fe13c99f96bf71135c2b413e03027241de7630a34652c8698580e9d6dc76f02ed413ab0bd8561cbe3804a639e9d30460f57acc21bb3e1649082029a459c40f1bb940911050bd9e854a84f2950cd4fc7af29b11fc2d5b27872eeb805a1554eed1420e041402455c988691148e4fc0a83564c3401abb26e1973c5605c87f8b79ac7372f0cf99f1a4133c211c95877b0d97da9c9793421ef705cbcd466bbc50003f763dff1a26261726e083829cf22eab167ba7119391c15ca02e9b38630809d2012127872eeba8fb83a7924b098ded801a8b4979351d8e948d9917cfde8f0b79a210e4ff46826f9561995b7f0d13e4bfbf1516c4ea1ee219552942c0dd8c90a7ab91c88801f0a1e37427e03bbc2ae6c276f03cf83a335eb56b0f665b0734d998af76c0ae3de37b47ba60410cab16230b99cacaf559e0cee36fb33be5261cf8b2d462af48381b8db22c6103e540610b877290c716f2d9b952d87df9b1eccdd2259aeccf3ae7b4fc2491238f3fa1e4d6dd7fc506fa7ae7ddae2d2a78bfce9d37bf1da63e241c4d82bafec8bd27e70345c27d01b95b7dbd41cb9bfb8fcf963d8b5b160fef3bb0efe16370fa5c5afbabdf1d61b8924fd6d4b46b37fae636df55534bf7871bac194ba88e1631a73a94bd3ec25e95d2c55363567fb1961dee3b19cc6afeaa73363d0231b8efc0be0730490739b8f7a051a814a6efe92b769402b5ae9df8229fa26d46dacd5c9023a962ca57c54125b99a11f27465e5fa6ca152f833d192f0267690497bdef66ddb1b146a6a7cc88bd85e35ea60468bf8e1b8308d3cdc8b092ae9b02c57232d230a754722fdc3470f8f4d64fc03579a36d0481ba29e0000000049454e44ae426082</data> </image> <image name="image22"> ! <data format="PNG" length="814">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002f549444154388d9594d16b9b5518c67f6e67cd93f2154f4652138db378210b9bb850656ce8850311fa0f084311c479e150f0aa7aa1880ebd1c0ae2dd40f142192a22a2205e28888a423a0ac69bd95ed4e45bf7d17ed830dfc6b3c48ba4d22e49db3c70786fcef99df73c87e785f17437f02c70054717f807781dc88ec9d9a193c00fc08d3eb4dbafbf02e55b37bb7d003338cec9691e28e3800092b060007f5bb07fc7053be0692fff168e29b93e4c7db853276da57560631cf00160ae982fbe2a690a07160cef3c84dec9344d9b429f1876631cf0b48ffcbc2295b3eafd4d966c0f2a586fad6366972dd84fa3ba1aa6db8023c0b15c944312a7a25348425e001d8c1f2dd8457a570de8e008f043c0b4b56dd13a76b2345dca261309d1448405e37ae37a2d4ee2e7e9f0c7a8e70e742ca7db15e945effdbb38feb296bd99a669fb8c3f8361379b2bcd85388dcf030ba3a05b4fde21effdf152bef48bbc26ad658da595a597e574d8e7fdb9388ebfb096bd07ac01334006b8d65fdded9c81cf2b154bcee7fde4dcfd73d492da9d92dea82dd49eb4967d67c1fe04aac045391db5608770d409bc0034b673063c4ed2c415a2c2319bb0ccfaea7abdf67bede3d00e5f864e3800bc03bc8de38110c21d380a042ac04740bc9b355bf61c011ea6371b1c302ba76f80ae9cbab85b2a9cd80b3a4cb3929625757ce4bb8ad4ddaa8ad4c5f15bbf811dda2bd265491714e91e390120b41567cc6c13f8dcb0011b760367e4f49cf7fe5145fa3fc6dbabb5ec8a05fb00181842a392073065d8e3923239e5c8f91c596539ed4f93551633bb965afa1ab032ecf0a8e4158007e9b06866d5c2e1424e934213222666a3b59124abc985d00e9781ce30c0b08e0f4a7ac27bffa1a482059b6fc6cd4655d5de0c4eadb1bcbcfc8a99bd3fcc82dd949f29cf7c553d51ed568e56d614e925494f15cbc5abc572f15b498f0187f6820c441ab8b772bcf2f5d947cede574feb68499b977ebef40cf03d90009bfbe96e98c7ed6832ba2b0de96c92269b8bab8b9fa66be967c055e0e67ea000ff012c862acab571318f0000000049454e44ae426082</data> </image> <image name="image23"> ! <data format="PNG" length="1037">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003d449444154388d8d9441681c551cc67f1bb7f2465678831b980749d927a974f72049c443430ab6e0c114219853e9c14d7b6a73905a3d4895223d6aab14e229e9a6d2f4608d2dd8f622260561030a4d4e3b3d4827d890b7344be7410767a88bcfc3b64915bbed1f1e1f6f78f39b8fef7d4cce39c7e359b8bc58d2323815258c2b893436421735518b555de0c2f0db95af79cec93d06cf7fbb505579fd55ec59a9fbcad8b6414b4d64238282225a0ff191aba189268f1c9e587d2ef0f437f3d5b2d2b5b4a0a804129319745193d90c0a74f65293ad5b8c8dec4a140d4d1d3bb4d60dfc42fec5fe922ef45fc95ec98bd777f613ff6dd8d55761f3e13abd4545d48a502f293693bba89dafb2fee7a628b4760cbef686bed00ddca30bc107999fca729f266e0bcaa50a3e50e9d344ad9491810aa22dd0c50ac6a6ecd93d4cd69bbe357feefa60577068c3f172a9423331e8c0c36631f442da4e510530498c0cbc4ee6814733338c0c8e10b656deef06ce6ba94b368b29071a9214d5e7430a5ede236b83dfef81015d549080961d554275776cb22681544489216b67d46f37886d4a632dc20f207e9042114c1683dcd6a81976e3d2e3233b4e0a0ad31694830a249d8c69832fbc8e43df876c5ba508ba836ffdbeb24601a2c420da96a815218a1e913590873889c187344de1e58ec636255c0fbb76b94718797579a58e961aaf2d508580c86e67e9fb8f32f73ca0a3b397cf231f3ca36e61127dbe7873d986cd105914181ba10a741c17208e63f020fdabf342238c08571ba0b05dc18b4bb3d6dc8d276f2dad10b6a2ad8c75e109c70fc0db018d30e587da027af7309552b96b2bb6fe15fbf71d19d7bbfcdad83bfbe4fed103d8cca08b0a93c4a85e9ff94b0b2cde5ca63c506638d883b13718694ed348b2b903e7cce453c18fe0520b752aeb8dc7874a955233310452b1f45bfd66d0d617d49b7a55e5a58c9395da58be5e1a1eb0c4ad88c5db626ee2fc7fe0ce399c73883a4e3470a28e7bfcec69ebdac120beffeb49e736be77f7bfdbe3363e916ee660507bf24ccfd617245c2f9e4674ef3d006b29c7cdd20dc85bfcd129d45099b1dd59f5cb77556debf2bce59cf3c29cc382969059f0cee69c7736e79e069eba62e62efd6426eb5f4c433e83d129c480664267d54ff775e039d1c05d2f9e464b456a0d9e5444d630f1e367c4875dae9bf38ff6aaead85e55db7ffc04b481a5691aab21d3bf8839c4199c38d3c9f6cec319b7b53ff3ecac9d731c1e94d56b47879cbb77d1b93f2eba8dd921776cb4b47d4034703fdf3bede4ecf301ff0d0faad73e1e72eece8c9b997ccf9d387ad26dd5edc94cd30fbb47f07f7368c8af4921aa940fd1dc0caefe0322813c8db2639d530000000049454e44ae426082</data> </image> <image name="image24"> ! <data format="PNG" length="979">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000039a49444154388dad944f681c551cc73f895b999111dee006e64152f6492a9d3d4836e221a185b6d8830942684ea507b7cd494b915a3d489052ead1a014e2a9e9b6623c58a3056d2f42521053506872dae9417c8186bcc52c9907199c4117c7c3f69f4ac62a7ee1f1e5c1ef7df8f2e5c7ebc9f39cfb5ab8ba58512238ab1326a44018ab5165856eb3aa3cae0c1fae7ec863aae73e78fee385ba2ca90f62d70ad51f623b062514da6a024fa2d7237cc46a64f4f1a91393ab8f059efd68be1e4ad5483d49351098cca0ca8acc66e0d1bd0b45b66e3156db15ad6b275f3fb656047ea2f4e4404579035f66cf949ce7770f10ff6ed8d35f65f3d775faca12ddd6c8a7249bc95de4ee6759ff65d3f1dabb869e7b415d2902f72a2f7823f35311f62be28e4358a9e203d57e856ea78c0e56713a0eaa5cc5d89491bdc3647de981f90bd7870ac1918d26c24a95566250818bcd62e883b493223d30498c08dc6ee7814b2b338c0e8d12b5575e2d02979450159bc58481822445f6fb90825b72c93ae00fb86040952524a044d7a5238b139bac4520243a31649d8ce53b4d629bd25cd3f801c4db2994c164318887ae5b5111975e1fd14de2494cc7210caa90743ba603bee37613fa3e640f5d384131f8f68f2b6b78a01383d3b1e8b6c629bb686ba0047112830f699ac2d35d8f6d4ab41e15ee72af63c4b55b2bcb28a1703b0ed20bd0f66197be7faf73d705ba3e77f51262fb1fd62d4af4b9c59bb76cd48a1065076335d2a39bd883388ec185f4b7ee8366a489569b20b185e0c5a5396beec6c76f2fad10b5f5838e95f748e26d707741334af9a2b180da3b4cb512166ec583bfe2d0c1a909b5c76f8cbd7c501cda378ecd0caa2c31498cecf399ff7481c59bb70807438683118cbdc1686b9666925d1ebf608eef08be0717ca9167b3be78a256a9565a89211092a51f966f061d7545bea8566549883859698c95962bc38396b8ad59bce35c9ebcf417789ee7fffa7c7d3488b7be9fcef38dcff3adcf46f28d77447ef168d07874a6b7a8a79db49672da2cdd8092c5df7712590b19db9bd5df7f45361e0c39cbe44e93fc6f3e435e947afaa5a0fedddbb53cfff9629e6f7c926fcdd7f29f4e897cfa4037798fd324bf5e3e8f1292d41a5c21d1d630f9d5bbc427f29ea2e46fed97f5b1fdb271e8f419e8004bb334572366bf752ef73833e43b3d4cdf2c06034cd5fcfa9111d5183f77063230dfccf05e23fef356fc574dd564fdc861d9187fed2473e76f1039e1ff03063856f31bc271ea84c7686d06d7fe007d3efc652c188f140000000049454e44ae426082</data> </image> <image name="image25"> ! <data format="PNG" length="274">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000d949444154388ded923112823010455f1c8a14149429a5d3237814d27302eee91172006a27946b0311230111c6c2f1cfec6418767f36ff7ff8230171cec9da1969657646bcf3323ad7902e93afd838265b24df1d32d4e866892b7a91904dce3d1a9aba11efbc3475f3d454e445d0dc56568c31c10b5bd9d017cf05e27893e15b6b9dd2726ac3178f9246c41bb3323d492db5d6f13fde89d82130b702a0faa2cc4b0074a6f1ce03285b5900e96e1d00c339bbf1168de5ea5482e7338db7a46239c7d3f9df0fc7915fbbe1d21b0e20a7b39aebfd3198d1d3bf8e3b45d823ce592ecf060000000049454e44ae426082</data> </image> <image name="image26"> ! <data format="PNG" length="790">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000002dd49444154388da5934d681c6518c77fbb3bb1b376626721a92ed4929544dcc1820d049a1491ac07eb5aa1147be9071e6a2b34c5b64a4111859e4ac11eea072234821e167a4829696c7543bba064536db39b7e64a7f6236fb44b664da6e4653b644699ecdb43ec87d09efc5d1e1efe0fbfd3f38f28a5f83f448636401270804440f39cce5b56477a9d30d35de9b6547310d7d1679d05fbc6e8efa70a76be7f9c9c0c11f70d63db60683d8c6d60dde481eedfd4b51175a6a2d4f4bc5213d3ea01f579a52a636ae2f0e63fb32bd87e5f30b41e4636f1cef4f15d8d7bb71bf34a759f552a3da8d4486942a9c18f952a1e552a7f54a9faa49a1fdcd5e87e86f700621f58ac7d766def31e136fdf1dd914f2aab104bc3f6ae27e32d718c06ec6d9b85c20108cb706910566da4e9f99e4846b733c77e9e2a68a4db3ed55b924bb6bc9b7b5f06fce4d8f6e75fe557ef041dda750824bcd907720e3a24b86530b3a47ab34bb6bc54d8a7a55fcef6c45fb4f8e123e7a0a8d9bb3bd7a43bf11cd013200568e6a2c43041fa10f64350045dd2db61f668d229c7e2af67b076642c2bcc5878124201d532e8800c1e4c8dc5ccd0c1b34999183173c67daa2b2ad634b5b646f9670e6802b70a510d5cb1b8cfdc82860b7f39a03aa012c0ace4fa55efef58a11a9e395bacfe5afa6574a133eabdd0bc2cd4782204d7816800b76f415d425de28470b9eb4334eb6dbcd2b7d42e7ab76300d5796e9eaf72e2d43977a2dbbcd39b4cea06d104ccb9106f85656fc0d204df049739f48a462e5a80491b910f8bd187dfd2f638b1f5ebda0e67548404023c9f8ae8c36fff0c71e74bb25227552b92c2267e25e0f8143ffe47f0afe4e4e1d3b51cbe0f5a00d534f649101792583518385d63e00b813f4ca92c19883daa20a2ce7842cad73a9f0e5b0d7d94952b0dcc602f71e32a7e2de4fbe1f0dafe71f6840d2e451ed73253e3b96c1b7d9915bc8acef2944ec496f8a529867353f40730062c3c56f0102d80014480063003f8f7c2bb58d7601edd97881b0000000049454e44ae426082</data> </image> <image name="image27"> ! <data format="PNG" length="890">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034149444154388da5d341681c551cc7f16fea206f20813792400614b2d043d65e26160f59417653226455906211c44210bc78f114447ab0210729514a302042ca1ac8a9062b65cd219a8ea0898790eed2364628640396ae90e03c74c8fc691f8c874960b78d64adbfcb7f98f9f3797fdebcd7c5235959dea869ad02afd723890589134c2c5f0193675e39bdf3687fc7a95e5fad6cdeda4e5bb3ffe77ebab2bc9156afaf8e3f310cb07875a5b279b31d4fd3345d59de4817afae16ff17be305fad6cac6db64ffe579a2ecc571b9d0157aa95b92fabc151dfe6ae54af6ddebadf86afded84cffadbf35278071209c9d59686b9e9d5908b4728bb9019dbd789815a55dc44af15858f5b894c70a5a392a9cbe94e1d3971602adfd70646c58bbca2549000b49024a299258f4b1b0f93b416bc5c8684103e1d4e4dcb8a75538323aa49503519c804d8824ab8d9d0662d9391616234644d05a531e2be8dcb3fd95f268412b472122604184832afcf17b84c4722cfc54fed4cb833d6e77e03dd383dbadc8e59e83a71dec83188b837d60b158e2fd98e6fd5dbc3e8fbbdbf782f9b7eeba1fbcdaf7dbccd29e1c393196c9a5ef7f3191312d130ad8968963a1792fc2c48202de1ebc19685f5dc6126ecf0cb5ed779aa61aa00be0fdf7a6031461b954d0b9933eaea348105cb28a804882522e72fb533c1ba2f69aa8a11c8d9ad415944e7db8655a17e83a7c78f7fc5420c865bfd72fea5e8dd7ad888c010be5d787f1b447b4fe199e2ca1e3269e030920b90c07553a7da1661e830f73f6dc850105030245053f0ae85cbf5f391bfcaa7d1ba29d269e5280008ac40ae2f9d4d6a92b28bd34954dfe187c541627862ee607f838e737715bd0c32422081eb575ea40e9cc275ba62378e5a3bc4e2ce10b2f12f8fd09382e58c00124c99a2c44c665ed00ef0806a84ee4b558c2c230813fa832d408c409ec1e9c380f9a4d8fb53b7c7ba253f8b5e92d83a57423a4deac49b6137192e17b26bb450d83df17a11cdee8180678f3f32d0394967ea6defc293be36895a187d7c40224fc2718e09d2fb2c9bff9817ae3b6c0ae81d121e803ba154482316e673fefa8cc9ecf6b2c61e964143cdf6fc0516085efeef4b363dcc9278601a6cfe5350fb9e6f550544e8411cf24969989afb72efe0317aabd3ccfc3154a0000000049454e44ae426082</data> </image> </images> --- 894,979 ---- <images> <image name="image0"> ! <data format="PNG" length="2087">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000007ee49444154588595977f881c6719c73fb17bf00eac38031b98b75e70472e90592e34bbb4e06d0c72c1085e10eca9482fed1f4d5a446229b5178bda0ad21ca22452cb5d6bd54ba5f42e7fd46c8be96daab5db6ae36c3097ddd3a43b57eecc2ce4cc2cbdd1997adbcce86d72fe319bdc5d2f97ab0fbc7cf9be0cf33ceff3f37d372d2d2db169d326d6932b8fa0461eaf90e2738e07860a04800a4ed0e61e9002db033305910742053b00538568c5f7a60a91c7fb91cac8a77fc90f376d64c0b9fb98320577445da0252104143e02b64049ac837350aa831af2835b1af0affbb89b14056d1bd0fb24a41f878e756dfd88e2c3eb3be1ac8d33c53f3eb6c1d7593702eeea81f401e8809a6d81eb523b6f81ebb771995be58915fb6bd199b161cf04610a047cf29606d82d36657440e4a14385c51a195542041a26a5299b4ca709116db4c9ea1988a21b3cc6656ea812167594ac890ddcd2002301350fe8ec85b00c1d1aa52987d2eb307ab28a75565299ad821ae17a555025b667ade2312e73c7ab40470001981b19400b322960ae8a3f6b32764c10fa59422979fcd06e841004759dda74091541385d4226d415bc88daf4a99d3e82ead9845363180258b020651201b74cc28b4fec7fbaa69b0f69ea419c968db95532e21cc6a68a33eb7062578db1972d469ece41e88062e0ce94905bf370e904e08017414adc40f7ed02d214d008709f0f6eee818bbf5fbaffa2b53455c93efa90b17d105b2be2c822a5d618c30347e8dfd50f59b05a058ca48173aa028a84b0825425cc8c4282b85fe8e62a945240a30e6a80bdb82204e7fe7259bdfcb7a547de285daca372cc6d3977387a83a14b0730ba34fa3fdb4fd01d70fbdbb773c83b4423d960a47c18a533a2784ac66e5524eef428a83e0436e8ac41378862de04a3a36dc0b9cad253862a1d027eba7b9bf1a9627394523486990af9d5c030aeea32e40d31343544900aa005fa369d46a2c1c09e1c56c3c69954a13a8ec481e93aa0c174a38dcb5ca662e57402d73d602479d86df9aabc13f227f3f476f7d0f7993eb4b4c6a033c8d1e651c6ebe388b4406fe9a449a39d949cbbe722910ab233cbd8eb0de80a71131aec4883f06187dec665ee46dcf000d7ab206a70522634ac8645d6cc52a64ca95562707a900205ecc0c6ec32d16775fa1bfd1c6698da172b70c141aad0d39b210ab25057901f8af99a1cd005b48d70ae5741ed4dff0b4e14fc6eefe70d72c773b00b6ccf46a4046a534589147a9b7d1cdcf6285248b426d45e1e21b36700eb4783e49f1b65df374e30b0cd46660be4d21227083154652d362c8cee003c70beb75c868977feb474514bb0c5eeb43850df472e9dc39ff539a01f24ab7e858c8cab8a2454de2a910b4378751c4e16a8bcf0064122cfd8cba31cf9e6189a50404d43505f8ba202a2114fc7fdcb5570b53c630db94e88993039d135c1fee6414abd25fa3a63e58e138201a1007c13f7b107e0541147088c7416351d124526c5f306a4c00dea6db45771674515dcc801604934295423fb7d028d9c9a61afb91b1cd0043003464a81792082aa90885fbcc1c49d7938348ca62be4ba148c6e70ebfba009524fb7d15cc58d4e112bdf123bf4461fb8f7e19dffd49bf2d9e29b1550c09d070cf023705b30f19683eb8113849884043b32ec2d4cc03d7d90006b36e4c097f294675d6a73824abd4c88bf061d2f80cdc00218ac9e05d7ca9ef5bc2e24d6db20374338035a0bfc0418aa819a00995010db158c54dce90c438bbb5e43414f424f579642b987dcb61e14a1ad41a3538545e0e3ab4300c0d0935f9dadce55c6fdb32ebe1f27dcc4a443500e513a414943d0f2c9754365dac7071c074880e3d74005d9ad605fc853ab376e9e03cd083ac03f7f1303806b32215f287b1178a008d8bbc720bf4bc150a13205c6562d8e654aa33809783071068ccd19aa75e8db65807071aabb61ae864c2a6d7460ae86a1c78a44196a2d2edf6c1ade36fcc83b53a11e740f7e278f73098c2d71db742e80dbf2c9776954e642682888747c310d221fb94563e2a44334a353bc30cee83d0fe0cc83b19955a84e835585aac7b713ac956b956675d80cb23f0f678863ed7363baa9498d89d320930a32094280dd80dc760de621d36960452067b38c3cd34b1f6f528af319a715ffc76af16ee0f1dc13679858ef3ed0b1fffedfccf7efd8fd89ccdd1aa2099100b71c224cc8a5156a8d908ca9e05c0a09e714a264482ead509a74d155c9d1674f10cccb770bafecfc3af05fe0ea8aff2fb5f73e58ef46d492423e53982c6124410ae2daddaa60a80a6100195d011ff4a442f97c884c284cbc05a1ab72ecb8834c1844adeabbc015e20ee27e68bd0704eb19b0543a5f782a8a24a32fd520056122247f17689de034a0520f095be0786df736a17adee7d82b05dcba7bb97876f4c1e2abdf7a0cf8777b2dac584de22744eb66390040f9f4514f7ed91cf7eb3d035c3ff1421c433b807c97426932f64ea569131d87ea9cbda0fbe2b967feb0f3d7ed932f001f00adf5f4ac6b00708d96feb3f26c75a0329b41e82093f164351271779402468e9f200a24c182355e991a1f6934aaefb54fd8241ebc5789637e53d9e86976dbf71ffcf31f49c99d870f1958d3b1d25215f01c8a9316c6a23c57aa8ffea43a35fed7158a43e27eb7aee28fe201806bf6bcfd8208d859baa0924d6b8cbe54a17a26225ab42ffb9e7da470faded75876f715e2ecbeb691e2ebb2e1e314e8e8ffda8b7fdfdd9ddf5299ad20855ca85eb2c68baf1d1a66759cffd356bce1a957ca461e0068b1285f2c5db0be4ba8feb670e6811f079e3dcfea38b7fe5fc5d7e57f510111fa24fb78d30000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="687">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000027649444154388da594cf4b545118861f23c10b0a33bbb941a00b41855a480b6d15ed6a55231238d022a1852deb3f88da583b6d11b590ae0a3173910a178223181a08a390388ac94c90cc40c85c19e35e51e96d31f78ea34efe7ce1f09ef371cfc773eef9ce87248211b727a555296ecbf7e3d75f2652572bf7578e8381... [truncated message content] | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-29 21:37:29
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv27487 Modified Files: qcalc.q Log Message: bugfix in initialization of undo list Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** qcalc.q 29 Oct 2007 21:18:47 -0000 1.43 --- qcalc.q 29 Oct 2007 21:37:25 -0000 1.44 *************** *** 1314,1318 **** mark_undo L = //printf "*** mark undo: %s\n" (str L) || ! UNDO_LIST := [L] || REDO_LIST := []; save_undo L = //printf "*** save undo: %s\n" (str L) || --- 1314,1319 ---- mark_undo L = //printf "*** mark undo: %s\n" (str L) || ! UNDO_LIST := [L] || REDO_LIST := [] ! where L = zip (map (flip (flip sub 0) 1) L) (map (!2) L); save_undo L = //printf "*** save undo: %s\n" (str L) || | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-29 21:18:51
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv11740 Modified Files: qcalc.q Log Message: make the standard editing operations work with the script editor when the script tab is selected Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** qcalc.q 29 Oct 2007 20:55:41 -0000 1.42 --- qcalc.q 29 Oct 2007 21:18:47 -0000 1.43 *************** *** 10,16 **** /* TODO: - - Apply edit actions to editor when the script page is selected (also check - status updates in timer!). - - Make print options a radio button group. Add print option to print the table, the script (as plain text), or both (make print option work with --- 10,13 ---- *************** *** 389,396 **** if not EDITING and then neq () (get LAST_EDIT) then finish_edit true (get LAST_EDIT) ! where EDITING = qt TABLE "isEditing" (), ! HAVE_UNDO = not null (get UNDO_LIST) and then ! not null (tl (get UNDO_LIST)), ! HAVE_REDO = not null (get REDO_LIST) // where HAVE_TEXT = neg null $ qt CLIP "text" $ // qt_val "QClipboard" "Clipboard" --- 386,403 ---- if not EDITING and then neq () (get LAST_EDIT) then finish_edit true (get LAST_EDIT) ! ! where HAVE_TABLE = (qt TABW "currentPageIndex" () = 0), ! EDITING = qt TABLE "isEditing" (), ! HAVE_UNDO = ! if HAVE_TABLE then ! not null (get UNDO_LIST) and then ! not null (tl (get UNDO_LIST)) ! else ! qt EDIT "isUndoAvailable" (), ! HAVE_REDO = ! if HAVE_TABLE then ! not null (get REDO_LIST) ! else ! qt EDIT "isRedoAvailable" () // where HAVE_TEXT = neg null $ qt CLIP "text" $ // qt_val "QClipboard" "Clipboard" *************** *** 742,745 **** --- 749,753 ---- where _ = check_editing if qt TABW "currentPageIndex" () = 0; + = qt EDIT "undo" (); edit_redo _ _ _ if global: *************** *** 749,752 **** --- 757,761 ---- where _ = check_editing if qt TABW "currentPageIndex" () = 0; + = qt EDIT "redo" (); cut _ _ _ if global: *************** *** 760,763 **** --- 769,773 ---- CELLS = sel_cells SEL if qt TABW "currentPageIndex" () = 0; + = qt EDIT "cut" (); copy _ _ _ if global: *************** *** 766,769 **** --- 776,780 ---- VALS = sel_cellvals SEL if qt TABW "currentPageIndex" () = 0; + = qt EDIT "copy" (); val_copy _ _ _ if global: *************** *** 792,795 **** --- 803,807 ---- CELLS = map (flip (flip sub 0) 1) SEL if qt TABW "currentPageIndex" () = 0; + = qt EDIT "paste" (); fill _ _ _ if global: | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-29 20:55:45
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv32669 Modified Files: qcalc.q Log Message: kludge to prevent evaluator from hanging when a user expression outputs strings not terminated with a linefeed Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** qcalc.q 29 Oct 2007 20:38:20 -0000 1.41 --- qcalc.q 29 Oct 2007 20:55:41 -0000 1.42 *************** *** 431,444 **** /* Main program generated by QCalc. */\n\ def YYDATA = ref emptyhdict, _ = yymain;\n\ ! yymain = writes \"+++ Ready.\\n\" || flush || yyloop;\n\ yyloop where S:String = reads:\n\ = yyloop where 'X = valq S, Y = catch yyerror X;\n\ ! = writes \"+++ Syntax error.\\n\" || flush || yyloop otherwise;\n\ otherwise:\n\ ! = writes \"+++ Exiting.\\n\" || flush || exit 0;\n\ yyout X\n\ ! = writes \"+++ Result: \" || write X || writes \"\\n\" || flush;\n\ yyerror X\n\ ! = writes \"+++ Exception: \" || write X || writes \"\\n\" || flush;\n\ yyval KEY\n\ = get YYDATA!KEY if member (get YYDATA) KEY;\n\ --- 431,444 ---- /* Main program generated by QCalc. */\n\ def YYDATA = ref emptyhdict, _ = yymain;\n\ ! yymain = writes \"\\f+++ Ready.\\n\" || flush || yyloop;\n\ yyloop where S:String = reads:\n\ = yyloop where 'X = valq S, Y = catch yyerror X;\n\ ! = writes \"\\f+++ Syntax error.\\n\" || flush || yyloop otherwise;\n\ otherwise:\n\ ! = writes \"\\f+++ Exiting.\\n\" || flush || exit 0;\n\ yyout X\n\ ! = writes \"\\f+++ Result: \" || write X || writes \"\\n\" || flush;\n\ yyerror X\n\ ! = writes \"\\f+++ Exception: \" || write X || writes \"\\n\" || flush;\n\ yyval KEY\n\ = get YYDATA!KEY if member (get YYDATA) KEY;\n\ *************** *** 1972,1975 **** --- 1972,1977 ---- process. */ + post_msg S = do post_msg $ dropwhile null $ split "\f" S + if pos "\f" S >= 0; post_msg S = catch () (post MSGS (format S)); | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-29 20:38:27
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv21365 Modified Files: qcalc.q Log Message: bugfixes, refactoring, comment changes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** qcalc.q 29 Oct 2007 19:36:39 -0000 1.40 --- qcalc.q 29 Oct 2007 20:38:20 -0000 1.41 *************** *** 322,325 **** --- 322,333 ---- normal_cursor = qt "QApplication" "restoreOverrideCursor" (); + /* Switch views. */ + + show_table = qt TABW "setCurrentPage" 0 + if qt TABW "currentPageIndex" () = 1; + + show_editor = qt TABW "setCurrentPage" 1 + if qt TABW "currentPageIndex" () = 0; + /* Callbacks. */ *************** *** 444,447 **** --- 452,457 ---- else echo '+++ Error.'; fi"; + /* Compile stuff and start the interpreter. */ + compile _ _ _ = waitmsg "Compiling..." || init_interp || *************** *** 505,519 **** = true otherwise; ! def REDIT = ref false, LAST_EDIT = ref (); ! ! text_changed _ _ _ ! = EDITED := true || update_title; ! linenumbermsg _ _ N ! = statusmsg $ sprintf "Line %d" (N+1); eval _ _ (I,J) = finish_edit true (I,J) if global and then ! qt TABW "currentPageIndex" () = 0 and then not get REDIT; --- 515,525 ---- = true otherwise; ! /* Editing table cells and evaluation. */ ! def REDIT = ref false, LAST_EDIT = ref (); eval _ _ (I,J) = finish_edit true (I,J) if global and then ! (qt TABW "currentPageIndex" () = 0) and then not get REDIT; *************** *** 525,537 **** where S = qt TABLE "text" (I,J); - updatemsg (I,J) = statusmsg $ sprintf "%s%d = %s" ("A"+J,I+1,S) - where (S,_,_) = get EVAL!(I,J); - = statusmsg $ sprintf "%s%d" ("A"+J,I+1) - otherwise; - edit S D () where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () if global and then not qt TABLE "isEditing" () and then ! qt TABW "currentPageIndex" () = 0: = LAST_EDIT := (I,J) || qt TABLE "setText" (I,J,sprintf "= %s" S) || --- 531,538 ---- where S = qt TABLE "text" (I,J); edit S D () where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () if global and then not qt TABLE "isEditing" () and then ! (qt TABW "currentPageIndex" () = 0): = LAST_EDIT := (I,J) || qt TABLE "setText" (I,J,sprintf "= %s" S) || *************** *** 546,552 **** qt TABLE "editCell" (I,J) where (S,_,_) = get EVAL!(I,J) ! if global and then qt TABW "currentPageIndex" () = 0; ! accept _ _ _ if global and then qt TABW "currentPageIndex" () = 0: = EDITED := true || REDIT := true || qt TABLE "endEdit" (I,J,true,false) || --- 547,553 ---- qt TABLE "editCell" (I,J) where (S,_,_) = get EVAL!(I,J) ! if global and then (qt TABW "currentPageIndex" () = 0); ! accept _ _ _ if global: = EDITED := true || REDIT := true || qt TABLE "endEdit" (I,J,true,false) || *************** *** 554,558 **** where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! if qt TABLE "isEditing" (); = doprocess (I,J) if member (get EVAL) (I,J) --- 555,560 ---- where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! if qt TABLE "isEditing" () and then ! (qt TABW "currentPageIndex" () = 0); = doprocess (I,J) if member (get EVAL) (I,J) *************** *** 561,565 **** otherwise; ! accept2 S D A if global and then qt TABW "currentPageIndex" () = 0: = accept S D A || if qt TABLE "hasFocus" () then --- 563,567 ---- otherwise; ! accept2 S D A if global and then (qt TABW "currentPageIndex" () = 0): = accept S D A || if qt TABLE "hasFocus" () then *************** *** 580,584 **** J = qt TABLE "currentColumn" () if global and then qt TABLE "isEditing" () and then ! qt TABW "currentPageIndex" () = 0; check_editing = EDITED := true || REDIT := true || --- 582,586 ---- J = qt TABLE "currentColumn" () if global and then qt TABLE "isEditing" () and then ! (qt TABW "currentPageIndex" () = 0); check_editing = EDITED := true || REDIT := true || *************** *** 588,591 **** --- 590,595 ---- = finish_edit false (I,J) if neq () (get LAST_EDIT); + /* Various status updates. */ + activate _ _ (I,J) = updatemsg (I,J) *************** *** 593,596 **** --- 597,615 ---- eq () (get LAST_EDIT); + updatemsg (I,J) = statusmsg $ sprintf "%s%d = %s" ("A"+J,I+1,S) + where (S,_,_) = get EVAL!(I,J); + = statusmsg $ sprintf "%s%d" ("A"+J,I+1) + otherwise; + + /* These are related to the script editor. */ + + text_changed _ _ _ + = EDITED := true || update_title; + + linenumbermsg _ _ N + = statusmsg $ sprintf "Line %d" (N+1); + + /* More script editor operations. */ + indent _ _ _ = qt EDIT "setSelection" (L,0,L,#R) || qt EDIT "insert" T || *************** *** 613,620 **** = " " otherwise; def REPLS = ref 0; find _ _ _ if global: ! = find_dg || REPLS := 0 || find_clearmsg; find_prev _ _ _ if global: --- 632,645 ---- = " " otherwise; + goto_line _ _ _ = qt EDIT "setCursorPosition" (N-1,0) || + qt EDIT "setFocus" () + where (N,_) = qt EDIT "getCursorPosition" (0,0), + (N,true) = show_editor || line_dg (N+1), + N = min N (qt EDIT "paragraphs" ()); + def REPLS = ref 0; find _ _ _ if global: ! = find_dg || REPLS := 0 || find_clearmsg || show_editor; find_prev _ _ _ if global: *************** *** 709,717 **** = qt FIND_STATUS "setText" S; ! show_table = qt TABW "setCurrentPage" 0 ! if qt TABW "currentPageIndex" () = 1; ! ! show_editor = qt TABW "setCurrentPage" 1 ! if qt TABW "currentPageIndex" () = 0; edit_undo _ _ _ if global: --- 734,738 ---- = qt FIND_STATUS "setText" S; ! /* Various editing operations. */ edit_undo _ _ _ if global: *************** *** 816,819 **** --- 837,842 ---- = (I,J,S); + /* Helper functions for processing selections. */ + translate (DI,DJ) (I,J,S) = (I+DI,J+DJ,sprintf "= %s" (translate (DI,DJ) S)) *************** *** 907,916 **** = false otherwise; ! goto_line _ _ _ = show_editor || ! qt EDIT "setCursorPosition" (N-1,0) || ! qt EDIT "setFocus" () ! where (N,_) = qt EDIT "getCursorPosition" (0,0), ! (N,true) = line_dg (N+1), ! N = min N (qt EDIT "paragraphs" ()); get_pointsize W = PT if PT>=0 --- 930,934 ---- = false otherwise; ! /* Font operations. */ get_pointsize W = PT if PT>=0 *************** *** 971,974 **** --- 989,994 ---- = enable_highlighting B; + /* File operations. */ + def MAGIC2 = "// Start of script. Please do not remove this line."; *************** *** 1142,1149 **** chksel _ = false otherwise; ! /* Print. Mostly pilfered from the Qt3 docs. */ ! // Vertical offset between paragraphs. This is used if both formula and value ! // are printed. def PSEP = 2; --- 1162,1169 ---- chksel _ = false otherwise; ! /* Print. This is based on the "application walkthrough" from the Qt3 docs. */ ! /* Vertical offset between paragraphs. This is used if both formula and value ! are printed. */ def PSEP = 2; *************** *** 1159,1164 **** WD = qt M "width" ()-2*MARGIN, HT = qt M "height" ()-2*MARGIN, ! // define a style for the QSimpleRichText with custom ! // vertical paragraph margin STYLE = qt_new "QStyleSheet" (), P_ITEM = qt STYLE "item" "p", --- 1179,1184 ---- WD = qt M "width" ()-2*MARGIN, HT = qt M "height" ()-2*MARGIN, ! /* Define a style for the QSimpleRichText with custom ! vertical paragraph margin. */ STYLE = qt_new "QStyleSheet" (), P_ITEM = qt STYLE "item" "p", *************** *** 1259,1262 **** --- 1279,1284 ---- where L = map htmlquote $ filter (neg null) [S,F]; + /* Exit the application. */ + bail_out _ _ _ = qt APP "exit" 1 if check_editing || check_edited if global; *************** *** 1768,1771 **** --- 1790,1795 ---- = S; + /* Process cell values after edits or after loading a new file. */ + process_all = begin_compute || do flag U || compute_all V || *************** *** 1879,1882 **** --- 1903,1909 ---- /* Inferior Q process. *****************************************************/ + /* FIXME: This currently uses forkpty, which is convenient but Unix-only. We + should use something more portable like BSD sockets for IPC here. */ + termattr FD = tcsetattr FD TCSAFLUSH ATTR where ATTR = tcgetattr FD, *************** *** 1904,1909 **** = S; ! // Suppress messages concerning lines not in the user script, and replace the ! // temporary filename with the "anonymous" name. def TMPNAME = ref ""; format_script S = if FNAME<>get TMPNAME then S --- 1931,1937 ---- = S; ! /* Suppress messages concerning lines not in the user script, and replace the ! temporary filename with the "anonymous" name. */ ! def TMPNAME = ref ""; format_script S = if FNAME<>get TMPNAME then S *************** *** 1929,1932 **** --- 1957,1965 ---- = S otherwise; + /* KLUDGE: This does some cleanup of compiler messages referring to lines not + in the user script. We have to do this to catch some errors which are + really in the user part of the script, but are caught only at the beginning + of the generated part of the script. */ + munge_compiler_msg N MSG = MSG *************** *** 1936,1939 **** --- 1969,1975 ---- = MSG otherwise; + /* The reader thread processes messages received from the inferior Q + process. */ + post_msg S = catch () (post MSGS (format S)); *************** *** 1949,1956 **** --- 1985,1999 ---- = () otherwise; + /* Set up a pipe to the interpreter. Returns a triple (H,PID,MASTER) where H + is the handle of the reader thread, PID the process id of the interpreter + and MASTER the file descriptor used to exchange data with the inferior + process. */ + task TMP CMD = TMPNAME := TMP || sleep 0.1 || (H,PID,MASTER) where (PID,MASTER) = pty CMD, H = thread (reader MASTER); + /* Terminate the given interpreter process and perform cleanup. */ + fini (H,PID,MASTER) = close MASTER || kill SIGTERM PID || waitpid PID 0 || | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-29 19:36:49
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv5583 Modified Files: qcalc.q Log Message: suppress some editing operations when the corresponding view is not visible Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** qcalc.q 29 Oct 2007 19:12:21 -0000 1.39 --- qcalc.q 29 Oct 2007 19:36:39 -0000 1.40 *************** *** 513,517 **** = statusmsg $ sprintf "Line %d" (N+1); ! eval _ _ (I,J) = finish_edit true (I,J) if global and then not get REDIT; finish_edit ACCEPT (I,J) --- 513,520 ---- = statusmsg $ sprintf "Line %d" (N+1); ! eval _ _ (I,J) = finish_edit true (I,J) ! if global and then ! qt TABW "currentPageIndex" () = 0 and then ! not get REDIT; finish_edit ACCEPT (I,J) *************** *** 529,533 **** edit S D () where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! if global and then not qt TABLE "isEditing" (): = LAST_EDIT := (I,J) || qt TABLE "setText" (I,J,sprintf "= %s" S) || --- 532,537 ---- edit S D () where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! if global and then not qt TABLE "isEditing" () and then ! qt TABW "currentPageIndex" () = 0: = LAST_EDIT := (I,J) || qt TABLE "setText" (I,J,sprintf "= %s" S) || *************** *** 541,547 **** qt TABLE "setText" (I,J,sprintf "= %s" S) || qt TABLE "editCell" (I,J) ! where (S,_,_) = get EVAL!(I,J) if global; ! accept _ _ _ if global: = EDITED := true || REDIT := true || qt TABLE "endEdit" (I,J,true,false) || --- 545,552 ---- qt TABLE "setText" (I,J,sprintf "= %s" S) || qt TABLE "editCell" (I,J) ! where (S,_,_) = get EVAL!(I,J) ! if global and then qt TABW "currentPageIndex" () = 0; ! accept _ _ _ if global and then qt TABW "currentPageIndex" () = 0: = EDITED := true || REDIT := true || qt TABLE "endEdit" (I,J,true,false) || *************** *** 556,560 **** otherwise; ! accept2 S D A if global: = accept S D A || if qt TABLE "hasFocus" () then --- 561,565 ---- otherwise; ! accept2 S D A if global and then qt TABW "currentPageIndex" () = 0: = accept S D A || if qt TABLE "hasFocus" () then *************** *** 574,578 **** where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! if global and then qt TABLE "isEditing" (); check_editing = EDITED := true || REDIT := true || --- 579,584 ---- where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! if global and then qt TABLE "isEditing" () and then ! qt TABW "currentPageIndex" () = 0; check_editing = EDITED := true || REDIT := true || *************** *** 593,597 **** T:String = indentation (L-1), S = qt EDIT "text" L, R = takewhile isspace S, ! C0 = #R, C1 = if C>=C0 then #T+C-C0 else #T; indentation L = () if L<0; --- 599,604 ---- T:String = indentation (L-1), S = qt EDIT "text" L, R = takewhile isspace S, ! C0 = #R, C1 = if C>=C0 then #T+C-C0 else #T ! if qt TABW "currentPageIndex" () = 1; indentation L = () if L<0; *************** *** 702,705 **** --- 709,715 ---- = qt FIND_STATUS "setText" S; + show_table = qt TABW "setCurrentPage" 0 + if qt TABW "currentPageIndex" () = 1; + show_editor = qt TABW "setCurrentPage" 1 if qt TABW "currentPageIndex" () = 0; *************** *** 709,713 **** where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! where _ = check_editing; edit_redo _ _ _ if global: --- 719,724 ---- where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! where _ = check_editing ! if qt TABW "currentPageIndex" () = 0; edit_redo _ _ _ if global: *************** *** 715,719 **** where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! where _ = check_editing; cut _ _ _ if global: --- 726,731 ---- where I = qt TABLE "currentRow" (), J = qt TABLE "currentColumn" () ! where _ = check_editing ! if qt TABW "currentPageIndex" () = 0; cut _ _ _ if global: *************** *** 725,744 **** where SEL = check_editing || selection, VALS = sel_cellvals SEL, ! CELLS = sel_cells SEL; copy _ _ _ if global: = set_clipboard VALS where SEL = check_editing || selection, ! VALS = sel_cellvals SEL; val_copy _ _ _ if global: = set_clipboard VALS where SEL = check_editing || selection, ! VALS = sel_cellcvals SEL; copy_selection _ _ _ if global: = set_clipboard2 VALS where SEL = check_editing || selection, ! VALS = sel_cellcvals SEL; paste _ _ _ if global: --- 737,760 ---- where SEL = check_editing || selection, VALS = sel_cellvals SEL, ! CELLS = sel_cells SEL ! if qt TABW "currentPageIndex" () = 0; copy _ _ _ if global: = set_clipboard VALS where SEL = check_editing || selection, ! VALS = sel_cellvals SEL ! if qt TABW "currentPageIndex" () = 0; val_copy _ _ _ if global: = set_clipboard VALS where SEL = check_editing || selection, ! VALS = sel_cellcvals SEL ! if qt TABW "currentPageIndex" () = 0; copy_selection _ _ _ if global: = set_clipboard2 VALS where SEL = check_editing || selection, ! VALS = sel_cellcvals SEL ! if qt TABW "currentPageIndex" () = 0; paste _ _ _ if global: *************** *** 753,757 **** (DI,DJ) = (I-I1,J-J1), SEL = map (translate (DI,DJ)) SEL, ! CELLS = map (flip (flip sub 0) 1) SEL; fill _ _ _ if global: --- 769,774 ---- (DI,DJ) = (I-I1,J-J1), SEL = map (translate (DI,DJ)) SEL, ! CELLS = map (flip (flip sub 0) 1) SEL ! if qt TABW "currentPageIndex" () = 0; fill _ _ _ if global: *************** *** 768,772 **** VALS = cat $ sel_cellvals SEL, [(I,J,_)|_] = VALS, ! CELLS = map (flip (flip sub 0) 1) VALS; special checknum X; --- 785,790 ---- VALS = cat $ sel_cellvals SEL, [(I,J,_)|_] = VALS, ! CELLS = map (flip (flip sub 0) 1) VALS ! if qt TABW "currentPageIndex" () = 0; special checknum X; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-29 19:12:30
      
     | 
| Update of /cvsroot/q-lang/qcalc/pixmaps In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv23286/pixmaps Added Files: qcalc.png Log Message: revert removal of application icon pixmap; people might want to use it for a desktop icon --- NEW FILE: qcalc.png --- (This appears to be a binary file; contents omitted.) | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-29 19:12:27
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv23286 Modified Files: Makefile qcalc.q Log Message: revert removal of application icon pixmap; people might want to use it for a desktop icon Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** qcalc.q 29 Oct 2007 18:55:06 -0000 1.38 --- qcalc.q 29 Oct 2007 19:12:21 -0000 1.39 *************** *** 10,13 **** --- 10,21 ---- /* TODO: + - Apply edit actions to editor when the script page is selected (also check + status updates in timer!). + + - Make print options a radio button group. Add print option to print the + table, the script (as plain text), or both (make print option work with + empty table and/or table as well; print empty pages in that case). Add + configurable header and footer. + - Catch window close (workaround in place, but it is quite awkward). Index: Makefile =================================================================== RCS file: /cvsroot/q-lang/qcalc/Makefile,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Makefile 29 Oct 2007 13:43:55 -0000 1.4 --- Makefile 29 Oct 2007 19:12:21 -0000 1.5 *************** *** 15,19 **** appdir = $(pkgdatadir)/apps/$(app) ! PIXMAPS = pixmaps/flag.png pixmaps/1rightarrow.png DISTFILES = Makefile COPYING README $(app).q *.ui example.qcalc $(PIXMAPS) --- 15,19 ---- appdir = $(pkgdatadir)/apps/$(app) ! PIXMAPS = pixmaps/qcalc.png pixmaps/flag.png pixmaps/1rightarrow.png DISTFILES = Makefile COPYING README $(app).q *.ui example.qcalc $(PIXMAPS) |