GAPDoc-1.6.4/0000755000175100017510000000000013714505050011677 5ustar luebeckldfmGAPDoc-1.6.4/3k+1/0000755000175100017510000000000013714505050012350 5ustar luebeckldfmGAPDoc-1.6.4/3k+1/3k+1.bib0000644000175100017510000000052513714505036013505 0ustar luebeckldfm% 3k+1 bibliography @book {Wi98, author = {Wirsching, Gnther J.}, title = {The dynamical system generated by the $3n+1$ function}, publisher = {Springer-Verlag}, series = {Lecture Notes in Mathematics}, volume = {1681}, address = {Berlin}, year = {1998}, pages = {viii+158}, isbn = {3-540-63970-5} } GAPDoc-1.6.4/3k+1/3k+1.xml0000644000175100017510000000426613714505036013557 0ustar luebeckldfm The <Package>ThreeKPlusOne</Package> Package Version 42 Dummy Authör 3kplusone@dev.null ©right; 2000 The Author.

You can do with this package what you want.

Really. The 3k+1 Problem

Theory Let k \in &NN; be a natural number. We consider the sequence n(i, k), i \in &NN;, with n(1, k) = k and else n(i+1, k) = n(i, k) / 2 if n(i, k) is even and n(i+1, k) = 3 n(i, k) + 1 if n(i, k) is odd.

It is not known whether for any natural number k \in &NN; there is an m \in &NN; with n(m, k) = 1.

ThreeKPlusOne provides the function to explore this for given n. If you really want to know something about this problem, see or http://www.ku.de/mgf/mathematik/lehrstuhlstatistik/team/dr-guenther-wirsching/ for more details (and forget this package).

Program In this section we describe the main function of this package. This function computes for a natural number k the beginning of the sequence n(i, k) defined in section . The sequence stops at the first 1 or at n(max, k), if max is given. gap> ThreeKPlusOneSequence(101); "Sorry, not yet implemented. Wait for Version 84 of the package"
GAPDoc-1.6.4/3k+1/clean0000755000175100017510000000015313714505036013363 0ustar luebeckldfm#!/bin/bash rm -f *.{aux,log,dvi,ps,pdf,bbl,ilg,ind,idx,out,html,tex,pnr,txt,blg,toc,six,brf,js,css,lab} GAPDoc-1.6.4/3k+1/chap0.txt0000644000175100017510000000134713714505047014117 0ustar luebeckldfm The ThreeKPlusOne Package Version 42 Dummy Authör Dummy Authör Email: mailto:3kplusone@dev.null ------------------------------------------------------- Copyright © 2000 The Author. You can do with this package what you want. Really. ------------------------------------------------------- Contents (3k+1) 1 The 3k+1 Problem 1.1 Theory 1.2 Program 1.2-1 ThreeKPlusOneSequence  GAPDoc-1.6.4/3k+1/chap1.txt0000644000175100017510000000340213714505047014112 0ustar luebeckldfm 1 The 3k+1 Problem 1.1 Theory Let k ∈ ℕ be a natural number. We consider the sequence n(i, k), i ∈ ℕ, with n(1, k) = k and else n(i+1, k) = n(i, k) / 2 if n(i, k) is even and n(i+1, k) = 3 n(i, k) + 1 if n(i, k) is odd. It is not known whether for any natural number k ∈ ℕ there is an m ∈ ℕ with n(m, k) = 1. ThreeKPlusOne provides the function ThreeKPlusOneSequence (1.2-1) to explore this for given n. If you really want to know something about this problem, see [Wir98] or http://www.ku.de/mgf/mathematik/lehrstuhlstatistik/team/dr-guenther-wirsching/ for more details (and forget this package). 1.2 Program In this section we describe the main function of this package. 1.2-1 ThreeKPlusOneSequence ThreeKPlusOneSequence( k[, max] )  function This function computes for a natural number k the beginning of the sequence n(i, k) defined in section 1.1. The sequence stops at the first 1 or at n(max, k), if max is given.  Example  gap> ThreeKPlusOneSequence(101); "Sorry, not yet implemented. Wait for Version 84 of the package"  GAPDoc-1.6.4/3k+1/chapBib.txt0000644000175100017510000000042513714505047014450 0ustar luebeckldfm References [Wir98] Wirsching, G. J., The dynamical system generated by the 3n+1 function, Springer-Verlag, Lecture Notes in Mathematics, 1681, Berlin (1998), viii+158 pages.  GAPDoc-1.6.4/3k+1/chapInd.txt0000644000175100017510000000020413714505047014461 0ustar luebeckldfm Index ThreeKPlusOneSequence 1.2-1 ------------------------------------------------------- GAPDoc-1.6.4/3k+1/3k+1.tex0000644000175100017510000001366513714505047013564 0ustar luebeckldfm% generated by GAPDoc2LaTeX from XML source (Frank Luebeck) \documentclass[a4paper,11pt]{report} \usepackage[top=37mm,bottom=37mm,left=27mm,right=27mm]{geometry} \sloppy \pagestyle{myheadings} \usepackage{amssymb} \usepackage[latin1]{inputenc} \usepackage{makeidx} \makeindex \usepackage{color} \definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083} \definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179} \definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894} \definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894} \definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000} \definecolor{Black}{rgb}{0.0,0.0,0.0} \definecolor{linkColor}{rgb}{0.0,0.0,0.554} \definecolor{citeColor}{rgb}{0.0,0.0,0.554} \definecolor{fileColor}{rgb}{0.0,0.0,0.554} \definecolor{urlColor}{rgb}{0.0,0.0,0.554} \definecolor{promptColor}{rgb}{0.0,0.0,0.589} \definecolor{brkpromptColor}{rgb}{0.589,0.0,0.0} \definecolor{gapinputColor}{rgb}{0.589,0.0,0.0} \definecolor{gapoutputColor}{rgb}{0.0,0.0,0.0} %% for a long time these were red and blue by default, %% now black, but keep variables to overwrite \definecolor{FuncColor}{rgb}{0.0,0.0,0.0} %% strange name because of pdflatex bug: \definecolor{Chapter }{rgb}{0.0,0.0,0.0} \definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064} \usepackage{fancyvrb} \usepackage{mathptmx,helvet} \usepackage[T1]{fontenc} \usepackage{textcomp} \usepackage[ pdftex=true, bookmarks=true, a4paper=true, pdftitle={Written with GAPDoc}, pdfcreator={LaTeX with hyperref package / GAPDoc}, colorlinks=true, backref=page, breaklinks=true, linkcolor=linkColor, citecolor=citeColor, filecolor=fileColor, urlcolor=urlColor, pdfpagemode={UseNone}, ]{hyperref} \newcommand{\maintitlesize}{\fontsize{50}{55}\selectfont} % write page numbers to a .pnr log file for online help \newwrite\pagenrlog \immediate\openout\pagenrlog =\jobname.pnr \immediate\write\pagenrlog{PAGENRS := [} \newcommand{\logpage}[1]{\protect\write\pagenrlog{#1, \thepage,}} %% were never documented, give conflicts with some additional packages \newcommand{\GAP}{\textsf{GAP}} %% nicer description environments, allows long labels \usepackage{enumitem} \setdescription{style=nextline} %% depth of toc \setcounter{tocdepth}{1} %% command for ColorPrompt style examples \newcommand{\gapprompt}[1]{\color{promptColor}{\bfseries #1}} \newcommand{\gapbrkprompt}[1]{\color{brkpromptColor}{\bfseries #1}} \newcommand{\gapinput}[1]{\color{gapinputColor}{#1}} \begin{document} \logpage{[ 0, 0, 0 ]} \begin{titlepage} \mbox{}\vfill \begin{center}{\maintitlesize \textbf{The \textsf{ThreeKPlusOne} Package\mbox{}}}\\ \vfill \hypersetup{pdftitle=The \textsf{ThreeKPlusOne} Package} \markright{\scriptsize \mbox{}\hfill The \textsf{ThreeKPlusOne} Package \hfill\mbox{}} {\Huge Version 42\mbox{}}\\[1cm] \mbox{}\\[2cm] {\Large \textbf{Dummy Auth{\"o}r \mbox{}}}\\ \hypersetup{pdfauthor=Dummy Auth{\"o}r } \end{center}\vfill \mbox{}\\ {\mbox{}\\ \small \noindent \textbf{Dummy Auth{\"o}r } Email: \href{mailto://3kplusone@dev.null} {\texttt{3kplusone@dev.null}}}\\ \end{titlepage} \newpage\setcounter{page}{2} {\small \section*{Copyright} \logpage{[ 0, 0, 1 ]} {\copyright} 2000 The Author. You can do with this package what you want. Really. \mbox{}}\\[1cm] \newpage \def\contentsname{Contents\logpage{[ 0, 0, 2 ]}} \tableofcontents \newpage \chapter{\textcolor{Chapter }{The $3k+1$ Problem}}\logpage{[ 1, 0, 0 ]} \hyperdef{L}{X8769FB038733F6F4}{} { \section{\textcolor{Chapter }{Theory}}\label{sec:theory} \logpage{[ 1, 1, 0 ]} \hyperdef{L}{X8729B87B848E3F89}{} { Let $k \in {\ensuremath{\mathbb N}}$ be a natural number. We consider the sequence $n(i, k), i \in {\ensuremath{\mathbb N}},$ with $n(1, k) = k$ and else $n(i+1, k) = n(i, k) / 2$ if $n(i, k)$ is even and $n(i+1, k) = 3 n(i, k) + 1$ if $n(i, k)$ is odd. It is not known whether for any natural number $k \in {\ensuremath{\mathbb N}}$ there is an $m \in {\ensuremath{\mathbb N}}$ with $n(m, k) = 1$. \textsf{ThreeKPlusOne} provides the function \texttt{ThreeKPlusOneSequence} (\ref{ThreeKPlusOneSequence}) to explore this for given $n$. If you really want to know something about this problem, see \cite{Wi98} or \href{http://www.ku.de/mgf/mathematik/lehrstuhlstatistik/team/dr-guenther-wirsching/} {\texttt{http://www.ku.de/mgf/mathematik/lehrstuhlstatistik/team/dr-guenther-wirsching/}} for more details (and forget this package). } \section{\textcolor{Chapter }{Program}}\logpage{[ 1, 2, 0 ]} \hyperdef{L}{X7A4605C07A94C9F6}{} { In this section we describe the main function of this package. \subsection{\textcolor{Chapter }{ThreeKPlusOneSequence}} \logpage{[ 1, 2, 1 ]}\nobreak \hyperdef{L}{X7B1A31B8870EA092}{} {\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ThreeKPlusOneSequence({\mdseries\slshape k[, max]})\index{ThreeKPlusOneSequence@\texttt{ThreeKPlusOneSequence}} \label{ThreeKPlusOneSequence} }\hfill{\scriptsize (function)}}\\ This function computes for a natural number \mbox{\texttt{\mdseries\slshape k}} the beginning of the sequence $n(i, k)$ defined in section \ref{sec:theory}. The sequence stops at the first $1$ or at $n(\mbox{\texttt{\mdseries\slshape max}}, k)$, if \mbox{\texttt{\mdseries\slshape max}} is given. \begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example] !gapprompt@gap>| !gapinput@ThreeKPlusOneSequence(101);| "Sorry, not yet implemented. Wait for Version 84 of the package" \end{Verbatim} } } } \def\bibname{References\logpage{[ "Bib", 0, 0 ]} \hyperdef{L}{X7A6F98FD85F02BFE}{} } \bibliographystyle{alpha} \bibliography{3k+1} \addcontentsline{toc}{chapter}{References} \def\indexname{Index\logpage{[ "Ind", 0, 0 ]} \hyperdef{L}{X83A0356F839C696F}{} } \cleardoublepage \phantomsection \addcontentsline{toc}{chapter}{Index} \printindex \newpage \immediate\write\pagenrlog{["End"], \arabic{page}];} \immediate\closeout\pagenrlog \end{document} GAPDoc-1.6.4/3k+1/3k+1.out0000644000175100017510000000036313714505050013554 0ustar luebeckldfm\BOOKMARK [0][-]{chapter.1}{The 3k+1 Problem}{}% 1 \BOOKMARK [1][-]{section.1.1}{Theory}{chapter.1}% 2 \BOOKMARK [1][-]{section.1.2}{Program}{chapter.1}% 3 \BOOKMARK [0][-]{chapter*.3}{References}{}% 4 \BOOKMARK [0][-]{section*.4}{Index}{}% 5 GAPDoc-1.6.4/3k+1/3k+1.toc0000644000175100017510000000100313714505050013522 0ustar luebeckldfm\contentsline {chapter}{\numberline {1}\leavevmode {\color {Chapter }The $3k+1$ Problem}}{4}{chapter.1} \contentsline {section}{\numberline {1.1}\leavevmode {\color {Chapter }Theory}}{4}{section.1.1} \contentsline {section}{\numberline {1.2}\leavevmode {\color {Chapter }Program}}{4}{section.1.2} \contentsline {subsection}{\numberline {1.2.1}\leavevmode {\color {Chapter }ThreeKPlusOneSequence}}{4}{subsection.1.2.1} \contentsline {chapter}{References}{5}{chapter*.3} \contentsline {chapter}{Index}{6}{section*.4} GAPDoc-1.6.4/3k+1/manual.pdf0000644000175100017510000051535013714505050014331 0ustar luebeckldfm%PDF-1.5 % 26 0 obj << /Length 282 /Filter /FlateDecode >> stream xڍ?O@ | s5 J%P*ڪIRķ(U;Tb;~(&{W$W 'uH$` =KxMuQN9rQmY>ͪn܌Y h ,#.>ՈA<6( "z@e,gRvdPwh,18}W׿tū^i#/(0IX /9q%~'bS]Dy+8xq'N,l+kʛeMWUeO{ endstream endobj 36 0 obj << /Length 280 /Filter /FlateDecode >> stream xMAo0 I m&mUi!j!(/P'{QTKPDwi&2p(~Ȅ%pEq_qQx h~4ge|۵[cujwLZY!8tl,V tKjZrkx?CS߁.(@ٌoeH&`rEOcҘ'A\8,f}J"'cq蹞f5͉q=ڏ,F S F;(}Ү;]?է"s endstream endobj 48 0 obj << /Length 356 /Filter /FlateDecode >> stream xTN@[:BZDPEK[rRs~;A`"ѥֲdz3!4^e孰 Zg9dk`Ad+XE n;yBZA䄞|MIBIa44$Q= }QZFP68QiZKຏ=6}؇9NtY9.-mRq]ItKP endstream endobj 59 0 obj << /Length 1791 /Filter /FlateDecode >> stream xYKs6Wpr&!'4I3I;mxmǒPTl."(J4`}~ d _NN2eU"3$H2A:9$_g68٫pi}|3H*I,S\#Ew63 P.H s$CB(bkGBDD‘t y<HbH'$& MjLԨۯ 6d< aITH`%!6KS1)6:!i9AT?LݚCp."K*PG"dr[5 md$jn6{| fSxlR=>|XALoCez@Ve*'diq9emɗ_^6o|& o~^*6[/l\_8<`Db%XvMԇ{Xpk+U͗ڭNK ϢPCt1  fQ=E٬2l8x+*m~9q{sY^E{RV?#6azQ }tEv4̖~Tl_JݮeeV.ϙUl&e3FFӢ[ejFtg;кGWnrn*wcLlM\Ƹu)SI~Qnխoډ84A8ݘTZmPVՏT@묮W?ؠA41"(}37j]ofu kk\ܾYNt f,)%ȾwЙ8Z^'΋B,RoVu>56Q{9,M!!$DfZ#J^.BjWZmחUqaY'lUͫ=w&Ê6>V#ͷ ŀnEp<1m[׽-*8[>DMomǡ@h9H%G P[q τ/F4C ZJتօʎSզ6M!UQ33 L<1[.iq\/ e1&# {vFz2y0P4?hn@a4gPip6C;ޭPimx\<;0ZOx۷^,m^~;Fk1jēXI,c~ζvAg'N,!(~Q2\޽@ JnEBw\RC;qojnv7f O9^6ғ EZB9Yt o^ XGf6%|Oi]T .CYĈjĆ>H1B֪Gd׬0p`hкK;Go˪%LѝJavm ./ZLn]U]m*7ѣ4h-uLTD{ tf/ѦrlgC}3ˣBA endstream endobj 76 0 obj << /Length 408 /Filter /FlateDecode >> stream xmR;o0+8RHtk$@vHfp32- B ߗm'4'=a^Vx0`!VnѠbZjҲro}>Ծ>C;FG+2Dv~@l+D[] )+Q wmh`D>~dX7)9=GIh^諐X2@*u) nft8q% T5c{ Pi~NY?.}"m'I眓%]BM'e|p2aȩ8q76m=TC[+c㜢WFDwOІˁV O)ɺ/ަloQE UrfO?M endstream endobj 82 0 obj << /Length 175 /Filter /FlateDecode >> stream xuM @9*8{ RCQ{N! it^x%h'.Ja@H4ap0U@Bf:^w&'Yi-0%;Qbd{߆.I9ߝd4,sy!Ǝ]"$O) } PEPBQ,]EkRJ$ֳJE/xA endstream endobj 101 0 obj << /Length1 1441 /Length2 6128 /Length3 0 /Length 7110 /Filter /FlateDecode >> stream xڍwT6t*'^IIJH EzG)UwTQtHQQzzZ߷Vgfyp6VqDA($N,AHL1E۩x,lBnu`IY,d0u/B±Tu#/pݐ(o+' ǻhyC0Q $@Rb'so`ꋆr̈́(4<'Pa!^ps`#@$տpk15@?0tד-a(F 44U򿜪((@XTĥR A?buN(yz w^HG!&3@ 6 ?WYWwEw~?A]A( ֮>q㿽:8A*Hg" vVw\~\p$6 8bQ *,],Ar_<_ gH\}" 2ub7(D!B'|2 As/$ĺC.KB{=s?ʀ`uƿ׿n88ɅֆTz /˓nfX Qz5FLrs&uh~kڹvz;[\u&L]Og1AL"MCKt=Rѹׄ޼eR :rd̿|2Ƶ@L%v t1&: 놮|!Uw|4][^!߹#ptrlUӏ/Ȣj1(o8>O;5rYڰKrqHqӡU30+1Sy$MXLيOn"u}'ǻGMױ~'pZ%=)4% AG}{|.m%2aAtbbfW ɋ⧏;:Ty'=bqiG`zXfMcaϿgVUPo:~Jx3&,Y5FbO.G9q#QAӣ`}6"1*ร q ]'}rhd^jbŏBg?[ n{N'Z:1.-#.OY2Tq f9h t-A\NK~,X Kme "2?l9^Qiay=C_f^4wqW5Ma"XJϦVw1m]SVWھ׀]T:]!C;Zrn=;tėB? ݄Y\SZI8S1d4?%@>]w@'zYk۫HNvxrU1?-1!$3?3[5V̓nBvqФW-Wd }GMI 4_,jEѨ㜧$>N뎬9mM5fY3Kx$tN~v6tc#WcBbBG^7a'o[U/y*B}-̕Y,?00ToZa;klA*#޲Iܢn]eg{{J@XA$neQh -O\ؼQ@H uE1Tk9zQTCVZKr[U8THcoDBglD=3Mטg^SU.vϵu?|fhQ(&$% XZu IH[=ZV@cP7{jgqSCRɮWѠ-7դSoI򟴭.xѷ3-i sgȆ2r5ԍ8+kE=nK,{cd⇙;sug*ΣFOjj)J>˽ 6lV;V#jZR=~pX4!jSNN7dHa1x,!hf?1 T[%{haû5szVw@[Y2)jrYv%t4씾T5!:)h[rO_Fo>&$6 kJy!Y89X L! N:3N, Lbcl4#‘qJ cn$WxϔTp¼`TIgMVBn+%6^3P\1{|wyR1 ]ߛK?޻޴U_^jҌi>6,g(wckZf&cU[IN$2BiO%>]zmht{1d#Uq-\QltV`ۊumG;1S4jvIIg+ajfZuE(>ݏİbH*yIg4k%(Hgiݞ?N=V rLkTmN{'%o)z_s|VDB9S'oFa/wlt$&ְ~,LR~ejhY0=mf}~X 10&l*.`b=ok0$L՚W$?Wʷ]DέYK^_[3]JY"Vwi뢧6Sz[Twţ_}MMf9r"9c܍@f\^f5+AotɿIv;8,uݩ{tvjV#p$jaQue!y2Q~p}v7ĵ"oͻ.(ETz2snV;vժ55< :!G&J}alYIR.c͉ tXu~a_)=5 oٚ>i>EsxBJi5$ij{]-#-/#ݹA<>n\'jA2k퇅(Z+-.ݪ[бeݵ3 f;\5M^l^7>:}Q5+("V.=Xn UznwFX2lfg\ĴL5yyrJZh8^C+}y3^YNm*Y =t٣NZK,h(i+FָϼySfЈ fs}r3A?hWNRRG9z|22λt54P0_ꐚ,˕QK㨿;.|L.BXcrx2)LRUSvєŧ_t}<ź_J+X)h$*Wlceص᫓f?a&AAeuB>tc퓱m@Eͨ0$Oݿκh9@/A8fִ"!Rg oUrאָ1/.SN ?'ne9TpC؃}$_xm/7Ȏ!O^pL6X%$嵂Rc>M*s5.SݔtV6"{zG3Jrm@_Ch 'uc)--/YeiUdwo0sg 4I& `hvB)9rZ9k42)fK>'TN?;\əƊzz|;UPx'緻k"BѕAqyy:. QŶIiRWo:!_EgX*o^.ykMYN. vķ8m$F0upgD^5ȺWn@Џ,-zf$j{9pv8;Oii#ff&˥/UF`_:Mէofcu7;b\ w5R)6\{>,b5;Gh%60鏁l}YzvNM`!vQa0␶ŘY'j;әig]MձQ*EPgl]aJp;SAwLIpE5;Np;c-Jm>3 de3AءxB]l&ߋJ@c/^(sw+*#yIѢo">6p<[]knzTl`n:9[Agw-V)>Ik $=>#".e7)ZյY?a [n_Zh .7;S)'ou6g`Ӧ9q:S 󤄳jS_X^eAo4l(iaOvs&'I٤5َEV2Q/3%uyWiE'ER}O*4y2)QS)ނo,Q48Pݿf>RbDeaiAģU2yajN~|(A9KJ`мnK)J2b!AQ/Ү1g@>qdR_EJԀߌwry]LQ*N^PbҫpL{"^5j(0Іz׎FH>S3gJRDN.J++}^V'}Of}W=c'E$h,,ߛNaC"rM7TyW|ۿ2} w{p#ש}Sw70A-I;ZbҴׄ:Y=}G9|vs.zPm ߩz#̏ a>1Wh)fXXC 4 а&pԄW7J(z\/H}UjVCY!n'?=nkWW/|ۼ{ϩ3azvM/眱]/*_5f.s]Bw(TtȄ}/96r7:n*y^5 ,c&{AMDє4YB҅˺QOIh5%v3| +-:"~8iv(DnUT*-FqM8S C">>I>~?lf)(,h Tw0]?qQO}d :ٰF*T;kcMAﯣ&爑$D}`į=zT͞]D JqYlS 'i\miٔ<:1}:1[44eg;5P{Fá .u2X:p~brFbO@ {#%GMQ[)/hml"$󰯠l"@_S 6)+E'QOT\L{>H7bb,x۫^91Gq|^ ጺYYګT~<-:[)R;x98ZpF{خiK{F=tp&$o̔ 1["I!f c:PX[YHdXȎ*CUz5uo8a,{|<L+\)$Siע-yb>㯛 hyLi&&mWo~&^?vLK|9#ZR&%mB׬ל/^P {P ĽK!~E}'7Fk)^dynKw> stream xڍtT6!HHĀt)!3034H ()0"Rҍ4;ƽ[֬s}>هXP!hA @E(%4a0 "2XLtp %eR2""QH* h!  uuCc JKK v(CP'0 FAܱ':acG974CFXGB ]y>P !΀_? pLܠ?1FBXuQX/3 0{@:w @Pog ].PB`/"B``( % )rBB=(!D_awVAChɯTHtq]~!l zzA4UR0W !"""%-x Nn¿›y@~`lA H# @!4  ܑgqI C\GB}"X"~^b匀C_auMumSVFE"/IaA cMj]?b_{3Z?"q~RS(/wB /췙0ݡ0hE`TsȟՅ8C۪cA 5BQ /vr?)A Yb[_6h9=>($ jp'H ؝ Ego4-/@$ ;`"}0 ?(/Ű0 GbN^H,[:ج@ '1lʈ7J}W s D6zݼ"3ly̒ϡE懪uɆ? ԓL ~(TzL$hxhG-O7 N|}u`{V W+$I1_Mۄug'D 2Q SbzO/V` tD`EόH;E7PT8i\!K23E3*Fq𚶷޽Mg۟P#i*o@כ\gZ\?g 0BfRsq  L>@>57ؙi t^9DHgmL;9ߟU5-P|(mï%?>+`pSsȌPky;m([  - $-JL|(To[/ */cVfZ(oȶ'ط^ڥ.}伾xTRlG0;+Q~D*"QQf~Rޫ6b;&l5 &Ζ_`4U9 'u;7'm'T ބ(>: l?yk g4ʷMN/഍[b<+y-^ x{6~0qKl휩RیOkw7Poi 3t ƒ/g)&+GTQEܳiWU1F!b?MUpUʡ#?zˇN,6!6uulǚuyovU|Zucg.:}i)Rڛ 9O2fsCNgcweR[hF[7ozv8FJY=of6wTȰrIMύZdfH_wI'#v8(kcV/Cnh;WRZN$_z=+V+E )N칾Dq)/=hNhӘgRQ?46Xh.˺~דMKme.{om$X"O9O;C8>u|*j/4>{*d7&R$Ú zWlu"oyz/4Ϊ)7_uFiկu+֘F8rL ;sH߼ޞ<,rؖk4P͕a1S5V^HPaT珳`IyMXAIDq8/p"M (ZMx.Tc)/6-_I伵k<YY8)X-9wX]Z㻗^<S0%Zkf LAkff sw(iki AF,FkC!'^[[Pu0̩ 31:9%$y\N1#ݒjh'F+U* >\zCFBcw;'ar?aؾ8D́Ildk86޲GIGr;,m!OeR PÇ)5.72g#D}(a#T>W_3oQ r<6|Kӝbc635n8ru/24yW-PAo6e,8<ڶ5`Qwg2KRBuŵ՝iTOȫo_14琲e҅Y3A1zYP@5*4i]qNSLec >JD֤V#!=W vN~M)A6ށvrܞ$} kZuGCQ%yüQN e3p߰p(7jߒwj<"=u4ӆxO;Sp˾%-y>-}I<{~) UX73@EHJRuz"xWsA W=$p/ msXԲ^A;~R>Z>s6I4bR4AsݩPvg=^M!Ƅc: ֆQ:nKK?@RxtPEZjanzt~T]Sk^oG22yMi7N_㊨ 8োZ޹7+CmgpL^ǐOs)JE_0o~]1>8\Z"HCV'"qj^ߙv[ܟv y3;qkr.޲TlUؽ^# pUqrv쮗 r?uKgDCYѬ'[7Mp9P&ir{~3ȬsVk}]P]&v +mfA%;~!z&ї[l.(4Sk% E3C5gC]/ mf^xst Qr/NY饒inX+pߨ{_%aqz'9ZB|ɂ2xOU BUYQÄݗG%>ז5JEb.JaPҐơݭ/[̪G2 S,׍ gJhDj:0mq@zvCEv1؂cǵ;~"om|k-[`7rW::ʠ=oֺǮu'F=y!p`U2Nv6WWO]myCUgCjnFs';G|I4c=_]""M\$zUrڨ,fk1xg| x]GW E}yv-:De 탇7 x?iʔ7TE?NQ+B~>ִ_9x5pj[]B߾5iMKld bZ'ؽ?MeRi]jDSSrW8$+M,)ݙ/y~%zgM!gh4Dl3&F)U,X-j}Ԋ?BxCBr]wBQ>ònCx^ïm3UuuACU]tLI]/^'IJ7h jSst|fxql7̈O*FjF5"yeq1;PQNVV^}GiZ=W;HV_7yw_TۆN%MrAű6o [45F~ 6+l+NvH[̊+w[0# mwRqKxgkgL0$  ҫUTQqLjIoDo9kbC~}yiU!>÷%>4;0"3:B]t얤& kZ̑LOnW|"A64DbSw{-2]{' " zxcfR~YpC MuNLb6T{Y`4*l` o2- q7nUM3&mtsDV;Z2}Z)S@OJkXK^-Vm@\ȁgfs$/3 #gL[,dMM+8q.%֫Q6: oyfok|n0lXlAD8SxCXzK8y)ҎZ Yf_(WE|.䬩rA8&4D>W3l"6S[/T[a|ּx \ N>sFnKڮĠT ]˶y`%̮>ZAg#Ul3xE]9gZz_ i}nu9r{*jpoA[$SڬnU@}1a a?*pj8~93.L^nN4G!3)o"=xK Wl%1uF־oJu)g(twߙT&(5ًJr7R%:?z,+̉괱c 4#]}2Pʮј̓mm9TDpV5UpC苽lQ&kbY>owT(7AmAr*MK$m6mU|mQiΨ xCD1eAזW\ )f]WtZ| =-=&,c"'=,Re/spC5$5yYF]9S3)pkb().FNs<_%l~3$zRdh tԅ͗0*[ٳ.&m5W@Aa,x'?ꌸҝQ<.:9Jk7@hz5 q uT}S&5_dEDQ*͕ ’yF, v+3fwckʐrX^tb^Ow$\:yn, 8 endstream endobj 105 0 obj << /Length1 1382 /Length2 5970 /Length3 0 /Length 6917 /Filter /FlateDecode >> stream xڍx4\ڶ 5 zމ(c Ø3z%z.$:A JFo$ZtA&ysk}ߚ羯=u홵 ({: Tt-E P\#2cп\fP74TA,PwGD2R2@ @ r<0> Es\lo`>p ! #[ BQ`81WOOOa Z 'cFP4 rM `G0F0 7(k@P$⎄@c-+X/ DEODp`rq!H u1^A !(l<G챀߭Jv?npW Z GQW6!!*((&՟* ȟuF<`p$k )5$Ғ# (򫀉+;+Îà/b_4 C}(cP8ٱf(5^+ ~Ͽ TVFy|ĤBҒ@$@JJ< >#V CjOg.=P￉(c/gWݑ;\?,s1X袰Z@7tu{0 XF Gý8k_Ol_>اK.(VC &&! g]I|E@~ "Da!ʍb@_ Gr Q`0ag5JLB ۣ-{$03O}u4&)An >1-c=z6'x1]3ֳ/TbtzJdBngoœb>}.)vm = ׾ؒs3`"*Dt1FZtZ:`IDNel4( " _ '2 T%v4"6q5! 87P֝kt1ne>+ Q@' }wJ݀ukGL!QwJ"( - - u.VmŚoV54|E&hx:Z^HNXRw2&qpf ԯP9`Uϳ?(DY:y˜=`SP:S31c&ШuK{xIv~D<ؗ/fD3i.1t{?TB=yio ^L'0ɚJU+ufc?IUZhBPuO:mFP:~8V蛙65w.-Q9^\{1Bz7('5;r;?+Mɥ Pj8'"zg5NCWܱ)"^ފ$e|.W΍-s&l]G+IfJ*Q.z 2MV2jG[9O˨E}{'3gɮ]A#OSze!8{\yet!k+FB;@eY S$;DJ#dҕ~Gm Pt1`Df7ַEu7:zY[z .ϾFLm;{i'XG2#d9;)?'(|ŧ >u3o|>{oCٿ.}ӹnphw~jFltq%5N&%5k-Ua޹~) lT{YS_%nψTmcf.4Ys*z$_Iw D Ħ 5M,hV"BaL4>n;r?48|y FXy;nuF1|kzzeڎkc #Jw MJko0+`/n!KA4S(,V܎<yLSO47ֵ d\_e9ZQ$r6Ɋ j0sdQɐCQ웖k>_6RY $dD\/Ar*h!H0|&`/Z3K+gO<@:n=l7fٶD**rF/˯&q $9*>Z\' (gN1~  W&h{:|s& ܮ%18~wuqBJZs|(K|]f9qIO<!!:W["4ybBv~sEPB"&$Ї\2ۣW ۠2sM.[_6Z(a_O"$X#VϩBLR?D*I^zuÓYf@MR&A`a:(g%WJAf6z{?UXS|e4(^bH١jv/VB$GZPyږ\BH}aNrZW G/Gٖ,i a|8+v#i|OݞX%}|aGqGשU>SX֨A͡WFՇ3S5YI!r鯱 {tGmU{C njSry;4cLEs,{grIA[Em=Ž{(K&g%-H>z3F/WsƐ8̄)R~x$ "ʭ W~Fz?9mggܩښ+HU5+qi,nێ[b:mX/[~oz<nO'z*䑸9՝ 9kmHR8Gsw7;zVbp>5W;IT=WϬ1%nC%u= cXΤ5[^wd8s:;sZٮÚ Ϋ)^+=yʆ0~b%3~VZSfGwmN)Q&w ^hrޛ#v9\K o<;᧻|ddr y4|(BP&78 ;nI[^)<ͻZm5[DQjȚ#F/y5֕+*-Ya qsa2QQX3mM1Opk2w1fnɪ@-g\wsmcqWdY0i;<+*[\N~زeQN6g5m!n #}X=pY\Q72ZsfX@(ZogG""*Z',ۡR ޴"8)K^P-Pb,ŷ]Y)/JcD2/.[j؋4m 3b $~ʩ^>]SuЌQ{I3"ξ^H YǺz&|ۭ }: ؍&Sc/*Ni\iot

ai办3tr/%HU豼q`;(0W{h]ƜA҃-1"Ŋ0e% Z &ϣ7_❘ZMy2YML[.F[:5^= äV[i<)N8t6Y'w; [ !=qv34*ʝcNqZzG7:E9$Mk 'À rŝP/}r! I0ۃf+euE*\HԙC^LzN!4ɏUpsX1%覐L|WCQ|mnޓ-҂j]KN%h!`'zĺwVlc pFVc({N Yn%{#FP70<+3 MU8 X~yU;!gyg:9blIe*`tիgg꡻jDNJ4we]i`@~(nEB'&u6TK$bUB_J>ܹ wТ'.K1]9m=Ӓ3z wuP 8Ey3j4^7C)SRAw>kJbDۖ #[YD'IUI*ڬ o#aټְbNXQ6J7V=&Ůy6iZ<}}}*{4y*Z<%bՎ'\7Q|~ԚyR◞fs߯4e^ -" A ׶t~͵ZSf܊vu+u%yH ~T<-51>÷!jw8X;q4YL{][Ƨu(×5|@"bJ0C=S:-BU.=F(>s F9&~Ѩw)-OC/'" n:rVXr_,}N%-Ejy+r@kI=&M$Gb(&s_iRNnT3a`ı`tԭQ ӽ(Mi[ڹA<}La'9g‡U`nyWeLY{vf i+z?ƫqNrfLu>U޷[/5T'r埝%E:,T/wRþE֮ɽr]#rwOjڪFθ*w'K<CTM \o;pG~$i_0F> stream xڍS 8TyOҠO۪Q:\rc99č IeI"Et֒PU.",wy3~^fv\,fc(nF#S TJ|\)V_ $06GW1 hVVT*S 8Br `5R&VJ`>n>1,-с n·EċH1ʯB8.P Iɘ$x)P 8xRX"@U2pDDid#q7Ap`TJPd(uxatv` &hdڧplU #C&CAB* $bC "cCm@DI9DKRD C :`"R*?GDs+) x!(*+S|Q$D:N`-ʠY8>ER 9i*3QCDQ`&0%28"K7Ap0>G'0oN_TB~4@U>q1T 1gӲ?9Pfd3s:S9XxBD_p]QKc O, :;F(ƟOeR9ć}T?2po<?$BqLK/Ed{]q;4X}\Oe2f uB9W&t$HIZ ąCd(d $$HwUXL"!clrěcá0XGo}}nE \ֻ> ϝE92N7ٕoYYEs[it} /4v+Zm͍(7x+^w}&ߛhHtf-?;m.i+V0&Gۥ۟_Hζu>}Z=:[sLՐgi_K2bޚZPoIwxqTH i󛐋7:~k5 G5gFes7pR/Xb4[r뾭To90E޸wl,,ht=:p=:tbF9yf9Ucn O?evGc)HkC:-:&FYeZt C~i4r:pμi{ùW4 7?JZ2 Ea!yxu_f?7agg,bO`R. $O2 eQ&CW=u ]\5?Z#y-eǮsݖL<|ӮE96:8 fd~]Z^q:%#Y7?]٦k/_$W^t<Q'}VP6YYpZOJٚONn~gE= 5 -f_+MZIϯl9;\Le.Rq_Wh!~1-.[33>%U]p?. ُX̎%S~ hh <<`C#jB'yK Uf3H̞Ԛom?ȞZ +WUMJg}da)VxT2+>.&r7oŗ#XѱK?&֗,}`Q/>گިq+x2cDNn˿::y7AVN=_{޻)izdvHXsnffA ]l1zqb.>' U=}eKԨ7)X/wܣ|{׹[V,N2z{ VO[ť'45?X:\ާsR#w8qH3 Z:7)Frv_J mfƮ*hWbh{sKpW;*\ Y S紵$ _WV\6vJM3{dt1=T<́P"[^=T=Z[nKK yf{FWʹyՎGoL~H7~ endstream endobj 109 0 obj << /Length1 737 /Length2 18714 /Length3 0 /Length 19238 /Filter /FlateDecode >> stream xlctf.Xwl۶mmVN:Fc۶m}o?Us^5k&9#*`b`#'uZ9؋y@3*`abb#:8z9[YXL-hYY94lܭL-|B.n n 8WK UTҖVPI*$@gc[)@h;8lLͬ ÿw:@^\MXBQA .ʨ& 07In5_\5_:{bcfYLVpM T`H 0cfk`lP:9f@g{pDLXH?0s3qGl"a 4Sr{Wg7Ědԣ6*;vݟ45(](dI9|vyd]օ|ƸGW4h*f 70IbڢS殜O\pmET2\9!DOaGNd*X@F, ,毁S{ܝ.{?)%GDX|S9 WPi+ҢLN.,3P(h,t,~0*KgvT'z}/aoN5)MO&ׅ_'j{axX=DFuOCl_sWxpfǯe 6|KQ׸_hoxR[7IMA{`k=0kZ0 p!Ќ?rdOU>:E҇B2VR歎9|qX 0M}%I/%m8 lZ v⿼})7$̒-R^nŇjΚږVyΝO GT>˔B8ivyEx>+XCkHAPJ<~~fr("zi 7ˁݕu u<v*D"Tqf9VKCmKmY_|T0{Xd2Մ^oϒ0~JHJFub ^[Nqץq5=&-fcҁsB䉅*`}[XiMM %fz=^"ҷ``ap<8,vH%E0.'V Do@$4WN[*]a=҄qx1Y;7wbSll% D יHT3 -לvƛH>68re{:`S}-X/)ɻ^Z5.]E},Dov.?:/P?bapGy`G{H//Bp0(?Vlida.zymlMO$ Z0[a-Jų"Ų(*yg" Q03ؖv![c"lǫm6zB#ࡇ(] Bc]Lv}Yu#y._ՑE͈#ljN z.t?y+S׾]y];E[h󅖁 2zB p|[:!vj 4|_B^Su _fhQ+3;{=+i湔SGosW/"ݑ~_= DмZOKBM;Eqty -2_Iz@|cZ7~u d|2_oʉ 㮺b,(BP7ijȮR9DF. j$hЭ@DX|X* 84d~7B 0ryZNjdY9'" L[K]R֘g&*ߧ"?pՒ>{^"~,Rt=:iqgr +yi&'7TELIgUr  plw57i-Sy(Qs>. u%4eAҸW㎅5*"Akt %s1v2pY 0o,j"n*WɿܪK 7h g"֤[[~%ӫ쨆yGa֋ͤȄ%{6ld?\]]_c7p.{(מCm~ȋr%cM_`#g+V}kOl=lͫF4bW;ۮnx!o+~!Jg>XB!NL\U@d~_1֘D@؝tp0 *Q=Q"IuƾG ZfP%`#U9YEބ]gs)q:=1B.yS0&z6z󈗬!"6 :pmY#xRu:\Ecƞ{TJ&wN);}\US8SGیo:EN*`?fvLG(0-XYښ6M!XwDګ~S-}k{SFR͍߯+|Cg9Ox>u=).T=j7uLzWt>^ʶhH(3yZj/lSTuodG$he[%Aٲ" ]^<AnG a~ lT3 PR0<5BCzHЕb+% oe1$dÓ&Emo+SD!9BCOA ۄ'Czaֳט"yG2s'@9gb'ލhJܚtc+"Zg#lϞ ,{- :eׯn[i;G{;"ިwz[i-J4*O< +xQ=נwH+SgO`3Dm):U4q ~S|OpJ^E5~w>IĢj:.c5-P [X5~69PL:bɇnI˹X F9&,M{nk}Z99aJ;ܺ ѳv'i"y'N~8jow4Y}?T#@U]LuUzރwF,OpV<׆%TpJzgwy}sޏ+YG7?{7^ :߅p6`-bu9S p*esj @v u3فDz"Ew<4'6=|rW"sÓ- ~5J? o͈X֫i2ſw0U雋#W8U- l9l+(]Н(-=8cW-dE`әC+,x}1~t˟&12zd s/Lb(gFp$2:Otxk)(o6بTcXg^RS&k$\@KE-cW}KyJݫ"NBPގ>샔פQ3A_^qļ0pmTp[FNu/ASo [ TT|(9G]ML. ojZigW|(@&iQގwi>*Z Kwyl冈P:U A^R>/:(ٱ@YQv3'4sW'VspD}CP <1famФWc _.ڴd\?h+64"x,!!#-^ZI3f@ ^B_ɬt/\YAr7bVW>r@ƞ?{-)R^170&vR_UӘZ޳M"!T"C/.r8t lT3EU7%+ &3hۂݹ#sSGӢ #Ksix"DXӐ !+F8%VfлwJ6_O<'Gv[ "^m(?A3h^.³l~736`@t\oOr;TQgq):œ5%~Mdd?p,~$NQ,S(?=:i*:QzgvH0WPШYiϏܫsdiVz>I E 6uzY4 HYi8᧮RlaH Zנ'~ D#Y@^m]#0%g02mT(^KS> ^s u<P_Ň`AԺqQDVj4t&l]{ c|# #<' .~ =|ߗzT뒩 zaP$yv2?ݴ= p'1C )>#\&Y$|MF9`Zfqſ#G` M5XYyXF rq^Bp(EYt8;R!P Ff $ r#K)r|$M%MY7z-nZ0bD! #0b7_z}8Z_EM,V/ &+w灥nb>dOJPz$5/pp,"-YD`x CUUf 6$^&ȯRRj6e#U:l~IgXI%.E_NVcx8v Zp_mY"+ȉkAL*QY 2aWGqjG˄I[ 24W0➰4ㅿ6[Zܵ;}^Dd7485&* Ese`>qROh"g!/LSyN[y țHgH"2E܊۾0xG%@(O aJ P".],>@W![TYC GZ<(`5Db#q6P垈fB\ӏ_^-S䯘\[s +cγXޭ\̩\x "!I s|8t$YnXoؠ {2d.xQ^Zi||옍bJD/+KUSQ\$>ܜL`PnlTU7I^1,O̠;k ˋ}دj4x:kpM|U?xu3չƸ7ElBk?z E0䱕H>o8;Tr M1i$r_z{sCq{p06֟7YDldӞǸ~fȓ|ם'jiMnJAOB~vō8qxƽߐ7Z*Q.I~;^  zygCb+03l gbʌ%NR?wXJh*v. . An59^WV*M =P&N~3Nڤ]UZ_xݳ:g!zao ʐEsQ"Ȏ{u'm2AlE!D[g/o[)u1e.<hE%Z~ [%!Ci''-/zp1tVd)׭f/rlteo%b{y{F,hmKSȹ<+@[%Y#?~v~MgL姑 Fw :1gl|Ig局qB#6ջo b`+uSRnHs"1MEcܷbh{ Pso#@r!5hǎ*)[i/yi|j*ú2t4a[ebnƄFW:OϗCBN^c(TؚoWX"U vUs]*$_hҠU?y~ĔgkȘ@Ϻ"rTzܧ$3e e6!(fkz:]/C(RaH?^k%;Qcy[k n} "E԰zF6I0Ği!6ˊ q$Cp]Y#;+R *pF(>L4%w?6ȌIg4#. ]@\fdRf#ZLhs+ں3Åe~D8# w96d ݋zZu|A =ǚ%^́V;I.%= 9e͉},`y`6:Ÿl`erO+U[<6(>;TviCc2ʩgud h;C5l3lb4CRnɁfp9\t"[H7X˸ݞ EjSQy 4aY]Qԝ ~C D]fDG L%-n* 3I%c8fP*hDZ@ ffB"ܾkҒ{ñU &>L}B"Mב1t~AI>ܢ;=6 dEWӎN~|dǢ.̑Dq|w/Pi;CS~6珦r~BG= IdQƚQ\((^VJ! 롉ږ [e ^-@% (EJ&}&d ArQ("8InH?qa̼9$f+. yz,y1IPeWvpaJ &m"vss;%󷔶]WJ9p{IC;uaOpb&W]>j"q $UD錂?㿛Zd.":Inܷ) /N94vϧ:nk,L 0~e˙qח$D`FUF~ U:C2FM3~rF0 m :/Stec"^g黝]*wBgv(N}?.#'3'W%zՓ%OIc'$+p(,GA>l[ S2O*6WM8+?OAsrhNʋq-.X/ /.43To<H%񂯰z0.ɥtWMp?U{`-{ nC#ɜ5N%e ; n;s>ԏkh0m'~z*|[肘1%Zm,X㉁U=N}Hmt1UoV$| NcМ *#1+9U\1gJ1r2 / ԑllOsw98sD,Uyf ud|N/GI^z+!#_&>an &P2vJaY=5;/sLڠ;_M(Y $jD?YX4Jt;|2 IjA*Wt%Q;9YLr(2d.]V4be"&`byP+@==TEcE=]L?6|TVSrlntٖ'K0&l#3,aKү]0ߥdL]XRb2¸<{dیt:CK;q]G{opGUK( 'B8Z+:*?B /abgeX2쉥".=,+NTihF 44bZUd2%qx{5S'=jev*UC8h^G%:"C޷ł7ݬeL|i,귨{F v}G27|CN"LZey[pIG!ES/J,]sjI+_Þ]lt3\͎߽\2ƩIlCdccRJ5h›?:X_edo ԕ܃$ c',]~7C?.9B^R žJ܌?1'`lmP|%2Cd pMlrM@; \}nv< (9 `'^.,l-2y$ L4аk"GF˱-#J4Ub{҈`C#:T &TW| |q°t>f;Q:TY d70kLK>`\]׍,@@ϣzzBM#t}HU e>xC9"]]9% Z[5z q߮A)xũ}rl xI{j1 L EKS:p7ٌڤ7YAT( ǧMvꍈZ>6{"6t#$;aEjQm䉬>Ϊs8.q>Ν6Î\m;=b#P сG=t 9 2d ,ɖbjٕȺӝ!Mȼ$|!aRZֻ _xt OD RZD"^wzi"8INU@Q %ggGۘ5>C,n6lPL2r2yZ4a=n*EP ׇP ˜o6bLnd+>(+{ `5wffZfV,]& ]x4>T\st {"KIRS*o8Ѝ,$c[H甛.#v `O6qynd]D1“済L-,ā͡s>gqEzfu"S HqG@&#( eNzBFj9>s7ƪs37#n"6N)jA!];@&v܅˅=R# IZA׸?8&ft>Lpݍ8S0UCdlxQf[up VP/jRloNtx<)., ѕ SAu %{A3By2騏.LFd߆z0|R,Keh)$(}_()-0XEu2.~iuShx}e)}gYߍm ƪ]H zZn%\!6 u0sC y~٫ٷI M]y5S/%b=ݟƇ7~ބx-s͵iܖ'8i'%SVṀ(+\v{6ZT1 2۴e{yYBsݒL\cY5 ބ 9௕izfJr|cwvW|v;Qh1ز떠Te̕s$2So y2kZ^ç:̠۽ BzQ8'dU@:w ]і!bufҘ[)֜GFjgNmqAO|*9Tv3bTsZ aC&C,2M^om>(*+2e:xD@ۤ7X`4ؕR[%C=S&EgזJ=Q~vѤ9h~x"*ier7F^2=u[#O脷#M쳳x[@Ś:jQb4j1 ec<>k4[>W!#2|gr3 W+P˨%x.I>ZÙ'١ed]ccqCoeݸH~n@]J7h"ZO z6qT;EmSIީׯE, ᷍_BYώiҐ VGwhc5@fA-!D]pXmIGz[Ť3f_OBEC_ - m(E#ʶKZ pXA\8te}Y4KYS{FZ&{6==QLTz"T})[/4D|gveZIQb>Q[R{g$Ev0(#:Sa$0H^=ݻH8: M;zƿtBbRG^ԽL s:t MGScW4N᭦DDjݶYVCLʮRG 7Fh{=#`X-ϡnkV8RԾVuw KcDqn8"#TEIJ*|gȴM?x9APnvCP_;>]P;_˙ŇK`09RU'N|Zr endstream endobj 111 0 obj << /Length1 725 /Length2 30914 /Length3 0 /Length 31418 /Filter /FlateDecode >> stream xlc=-m۶mm۶n۶m۶mof̩Su^^J%'bv*&t \b**  tPŽ&v"&\j&&LL PvfFv60p$cgmjadN*BGO'egsS kay I9q q9Uq[GkCk # #['JS;G4l-ɉl]M!fhgC +"(&/B *L"L``kL #Ow[g'&Fʎ,Y:Ǣbd$00r&041nvlq7!P!%?hkk9 a;{gGY;cG[ihP k_AH:#?1e$fnb`Ύ.&qgndM-\lMUc;[k3?{XʑsXd-֎?,xҗt%jd3/KEOެ6C ΎԂ(T ר>WΆæn\QeT[dy&.R:%[-Ȧqn)Y(Y[T"L9>Y.m9ɌA4ggA ߦA/AV~U RK5DKyX󊣑d\׌?idyCI܂k*wR%.7)1Ջl@!1p54,- MظDXf]HiGG+iOv=RL&.vcž5R'lp|n ʢ% 2ߴF~aWHܢ {\K4o.:ޟ8cNo_j 7w4?]0Znv&{Ol_T,F"f5M`i]uT8%yt0&* V(Vo<ѣ`FtT?'liTi:06Jii"jxxӏp;r@[ȳXOm_[;Mmv`jZN//aLPZ{]cV)}&:;_6Q7ⶖ:\\ Q+RKQB9vD. 8j8c ^t%kJ8P^FDez3@9/6Ir!P]\ :Î#g34)ba>jR=Ooꄙ~$0#>'[A>vu;* 7(8y(ɷHije.xFx֣ #:13(xX?\ 9er^ "ꢇfYu!uejo D֠L8f *IǨMf&hʽ:Low I'Ƥ <7#jʵ MLyoI* XlC;;AxjL 9;='~CU.r:$㤿fy^6'Ǩ>U}z+A緛&qF>O ˃EK}:d $Gۺmp^_mwMCzOo±ޏ!3%TQDe YA2TP[>U}LWKIƜH]y[rη=@U_ Qm+L1Ź o_LTt h5qa-+ek0=qOP6Y߶D>ҍqq?{m44J [s>4-~ k4äz\!tYtJ#i-\{l}](m&F M]DcOmRYKY ۼ 5rEC''wV'wd,SuJ4TX]!-wRԠ~m1Ԟ@xj$Z̲[(imhœ#$་ -4~1_G66;<)0dӲ|ʏvF3L_[c5H,HG hU_C_ y zL >7.69JLu]stbR0X1uI0]eRm<#ϫh"`M2`]HFӐ#|ufIu A^[ ~/ڦwl [,3Z[1TXHʘmth@W?pnZ鄌bPMß^"԰ZpH^do+e'+PE@bIn_6Znw̻-7tVol&:wp$HDᨠ=]9N nҎIA b, @u!L~"_-I_X@Wl6vl;˚z~#19S:4m-@z/x%X];}W}S*\am鄤 H-Q|>F&tt-*$}^j+IŊޖ~ɀB"%@?UdoQ6񉯏,s s#['@9[8e0vM%bF=_?@3}'ل2 Rl)Ё\^׸&v^}W-j~d'2K%Fr%1*i8}c`D4>^T5jP@N]9D ,#[v'13J`4xqV>숪?9:dހ =:?K\+ kyj7agdL . "YΏ8﹗`x`4' M"ʰeXa*l\>DFX~V1_^ecfT) ˉ;rUSy,7[Hp}=VHaV6!w*JE4!돃.j 8SyT|gg^yb1زq>,9qR2xl)NGrxs>ʸ|֯X*oҖL>lۃ]~hcv?PT֔"a%ɿ;q/Ь?1qD1 'B_) mTsB2U u_ I0S 1=dA6Dy?F[Cׂ^l J=%TġeRi8k )c/m{ /Ů43zMfQo^#!UՁ|<A)ir t Wʹ$ί@.=x.K58͈ult!Db4 aȿk{Jh^OPoniƀ)%,Z⟒08<)w&P8|S*uyMV4bdoﲍϿĵCV6 [We Kɒh>%,l\1(<:,җ_XqDAUi8`إApdyidu4;6DUc-w9VY80dJ3G9vhac>֪bO42i^*˘[lhF0 :am yw-7fUꔠ|]Uu cX*2K)*΋j)fFsgsQ z!={uI_TEeq֦2/7s/[=J%{{rR@/j55ҁb9tcH)+Ey̐b]RQ5%y'"sM>[t[S ^:1,)C0^mt[h2SRf2CbT?H/؎BHۄ:}Y0Xv1.9OvW Ax=б3JcA>nMY 1MܺA e':o_sGJQ^*&O>zsn0Q?Qмc`Tn<6"UeL 2Y Oh~7|" o\a<6Dy5˕YvZGDjC>"$;(+ Qij=`Kb50禝E# cL`~0TA1/W>V+ab:j6Q7;&*#Wk!ݥ |kBZj ڎؖm6-=.QlL;fuUaW<|`k8 e'z{RȨ&s<2?i+>ǂ ֟15:$|ra>4^YyU ?>)'7T/RNOmvY0+_UD*sI١b Dl.?[*^Td_J4!!7-)n[ǘ t-KIXzP**ꁾFH/^Vh&k^@uoN7JN*aV3m_)Ōf^Yq_(䇬ӼoE SUڣVj`0v'yT¤MWxư+0>hg ((T}ݵ^k@d ^`[v3<'؃]M! J@-=N4xߵOG:i:n\nN`| ;>2!kXveK.L QCdK:zYFCu?G;JC,%O2@ grf4P>6Yc NN_N@*C5>S{/L#N? ^ĕ'/ [T* H> 2Cv 8֓lWGNpl?m.I'85O 35~ȆldIrHid/:/\ZY͗wgwՖ:B& cXaNP(4B]|6X|}hvi' (Fooڋdadv|1>d &䚈"NBdxC6IƏܢWЁM>?AW9@[&˨ꑟw6h_0.1`0O^>C(76R0h=VܵK{![lY'o@º*WVbAM0W#$.{Ra4'la^#RLtC+ݹg1oo$r~-ۗ uku3 mk q뱼ς}Y+<* mtzB]h"_~Vsb1ۂ݁P;+[h-/$ꔄ] Ea~ dG@slEezi R|yas7u" ƃ è! 3U\D@ڰxI3G"R*8kS$w"3ؓq\\ .ght2"oq.H.p@ש l p֗yP_/=P0\Y)v([(JreI(y5,N2ZU3cZ,wEjLIi7~nfԄ #Ne, ~K{pR_yGEnĞ*:)bY+c wx:ps$B:7_;}#qgX 9Ib?IM2̆x=֚0:.T!evz˲Cjˉ$;[`bԝ$jwGڰ1j;7 ԝ-HN-}^1 {[=#8^aO]bVkQ1~BhZ ")`T;MiÓ^vrdű^]|lbB+S{])K;!l^e՚3U$ؕ4?[s5/i B[ pbX>~<Ǭ_>{˧Bc[Ψ! ;_ )Vzr^JCg76aa 'o9`I#e{9K`F-JɄw:bAIe)} 1s-\b|*XBҝ0fȶz:SL_´ 5RRJ~]2rE_ҰUT+Ye~MS([[}9+Cj!:IUƻ4޲#:Ƅcڧa3kyBx$sS۸(aYPD{Шp?]`;|I\:>8N g+j7<'a@C,aH{L/O'*~}džk\(F [lBS[BLT^$}`U #Z;9cvuxW*f\VpcR°+IMOiQ':9icC,a6 U#$*A?]h -,ekt)ېj BwZ6!=e]Fg|/׀_NE-險7s㖒ZdK ~}o\ 7ΨDXG[T/_ZҙnHU67q~?;Vtx]4*,. ZDձɤOHQz<[0ԠHgn "<}LQLi- ۇ-sr鵪v[أDA=u"h:B  _r NnSeOW6]iчΙ*f,J?ևv|Un [z3567ʖݞf=&Dah@[3wvۗ1y ߺD|6{gi,^y{7pIٲz4N?< 7Sa) cT.hicӎW:I.{K>N7CpFn>N#@ f0qMPkӤmD'N(M.0Zo&2_ :_~zld 뎶^h1GSqOW L}d<i!8-TTKfZ£ov`g,,<)/T םԡ?DMQWw6M9[@º؆E/s7!1HN(TOڡC'~nV}#y30<bUuLCPK DzCPXDPIm5sP0`wg8ulZ"-LHE7jԿg|er>7xxq*EXCpƌD8A skz젠؎ˬV/( OK4cZ}r4F/(Uqfͣߍpb!Ϗ݄e<O y\EmΦFd9y0Zd4W";pijHN+X>!ryN[6!vJ(62(6DQ%յ_/H1@8ևߣ.\A@0jZB̦R6h)ހr-/b2LVF{eGQ1Ql,&OZzW(B$b{6]4ŕُ m Q0VGF1b!eʯ nrD;%9NldqR4Áɘb9tIv`{tGy$qF/hEH[߻`>PZwy̺'oG*̪,r g1q$^$z(- HgROp ּꁋ, Qg :Mr-_yyI;gqp"6/*UmucЏpd*%_b#,c9( /DehR/\'GM\n x};fCtbb MkԂ6قw)wv( Ŗ?$`G`F%xu+_{qNl JpsOvH!yLB&RO/ RN@vU P$ֹ)"妰,}TymqELOY%3d16R_ 5mtX,hU%V s~(3tkׯh≽Ed1ʒ nW{T?3#@hIW-'HU%7 ϙTE~KzݧuTBv@4fCvL;IjCL/b1e}\#=f k6 u~O{r}1!Vg#eTfyʮ(^ O!*WpnX^>M7XS;;R:{AYNHiĐ} -|N#O#;&gpyx% КEvyV+p4EB QQAp4WT,ρn*`ѹT!&ʳ̫Hꑜ^^~`l$WM8Z>DPyt(;о HbKb޷H.\8u R8ַlRzʑaʊAz%MDև9`eWEt^Û"~AEȎXG&v˂l^ȟsVݤRmbK{h#ö>QAA9@pɰka6*3t7z^3qCNh|# MKxF٦*ꔄgRkD/t茣unނer8% SBx%5|;"1L`5ېLשlI4Ɔ'^Oo3SÐ6..6Z0 mR^D͢H R|kt;Uke/VR'E4e*HO[=QCkqV9;D<Z2} c d$#ǯF^ox">GkpЩiẊzꀻpCqա5EY, .IO;PpU6,tDOدV;E _ -yFrpd0~T~nB!83xasip`eH Npй,%~19ԨxF8#Wjp[R# CGf_(a\7 Tw:UJm4S2nD-[Ɠ~AN:0` a)f!$msF"ˌjWH m@"J} nz^{ sD`Cy7Ƀ.o,n6픱U1𯩽Xh]):HҙX_Ii65O`RL>n'\^5)ӝDڅ*p!n)del(! !Q`}{G{A:/VR&AìĦd~Н{ n =-Hk<7ĿUŨk;;6d!X< 'qJ ߒNyh`7mD5)}绔J#FmN&]]H_v`L^[/4̉QLs ]d?ǝ.@!G ]rO=^ؾ|Gf7p}f-| ==I>eFύ9!ojFQc#UHjIG!NhÔgk˹츙ꬾzƃJ -i%v͡d% 9iWmNi}[|r=̳r{PMvЕj֣\=.6q_L5ﲇy\$Zj?B$!*ʰvHXVJCT H `~x,KI-Sqݝ#V;lf08^AoҀKI$ pQs{ôA1_G],1@e6Zj iuXvh̓8rA|GsC%*QRyoF>,? ١bwB8ܷzsܸXWgіV(귔2I&M@<[#Zŷk\_C_sG3Sؤ6[ʥ _w6{0pZ`dj߅G(3s 4bg4]>}[#߉ vD.H.̜ϢY,<0")Jl[r#ڈdTľ\4 p s}JC`f챷T6PFg:ҞTk/Ҵ{;\n"./H"-[EL} aXygM>Y'ڴJgohNKi3ߴӵ?aȠ qGyv;XĭRx>"db*MCQu4de^~rP4"?L5(dYH#,Qg$~oR K|/E8=L%ʿQ} .P?]dt! ybQH|0ϛ]JȢA$Lf(q?|^i[G=4F,S`\ l(gD{w?r;1CĽL3Tncp[ K !'p3O fe8X{H,ZY:u%.5@X0gVFQg]2neǑ9 ('=?Sƌ0D$E("^rKV G`MlC_n^P"JL>öftf͠ol qzWtPB}h7ᛜTG\#ćkȧz4Q$3:T(: K)Lƒ mTFq >B[Fʋ94Aq7+e3 "g)QEctst,ѮJm?RMm$9ˁ]%*J0/d.c=a[͌ AT/lLbi ;bJY%v]˘rg2Ķ(QwCwO=VvX Di㛾Kj\ y9d̒'ޜ+F\shkeWN{ek9;#ev䏦|yGuؓY%Iu$eBV(*@(Я5 iW07l8*;rXoa d&ΖH ,;ҍ=q YmBwϵZ;̷7Y^ҙfZxU&ZN{c(E~ݷ7c ügv= .S*vCDva=}T gS> XN |V@VC֊U+`qwb]&uP *F.-Dż3( FwBa9zrܣii6_K7 gbGo<I`L4C xN#dY d xxdpL <:mH:rěLv[慸.XN5ʢh)4&NI1 rhz9{9}WY>`u 54g= , ٖI]G\j.0PT9/4 m>I Y,P8C7433aP3K\n䍒F. )tq΅* GB/QcDɡfY@i.Fm S1*,4*qp]$'Gbr˸Ӂ.eo@- k.JEka0lv2x9g3m(nzv֍U\|^+V?z.e#0[>d]V$\$(L|NzP!lS`4gM!7=4l/䣐>]e"1%Q/IP7vd2t9oOS͎RTsvAjY%^ 4E2 •oI]1{m96`1m۶mwm۶m۶m۶m;ekg~ĽIat슯Ae!A3z'uiЅ}N]!U6Hpu 3X ]JVHȃl__ \k/$9]oD@w@y12ZloFN%}RQkF$YgkM7O K_D<{7̡z.%b#x<= nqlJܑҔ)ꑐ橑JmPD=zϽ;8{>1&2C"h{l#2cS"uH6Ŝ'Ǫs`-q6IXQBΉs+{NݵχǗܫ<}Cx} FgEeg/ϑ[+9"qvFYl(N Lc8K2+tx> K& cjKn$3ъ%^R4teOЎyCj|D\r O'}`2Gf@m.?yUO,.iGRޯHY X1sP& PXP/i$˥B/At'F:}G"Xw+k e;uƇr(ܰ޷wRy^$(t ԟiH&D`9 uff,@Q-4$G(Ϫ0Bށ)VnVH)5F^DVq5@5'jD-gQt+U,"ͪ94 s?CIBs{.Ym:Sͷ1#\h&aXo*r6|ivl߄?dx]h4'!5ȪczC;= kk_׸?o[45D vYtl{6`NNm Z>1`?6<.52 |bwsf[yh3A9i }+_~4" FL"B†t:t׃j;nTǰW[R [yh?N-X6qLW\[ѦI>X;b?8&$mIo+E),k[FʅIҜqHqC@v]^U5aSlV2V?ғ J&,\P8_o4=<1TG|棎nw\&fi_O.\c%]eDŽsRPdoo!l<^ Tk.W;\6+d-@O/-@GCYSĮ4V0ïv{e9)Eo ^ lCK6P&µh+h~ވbRf:Utg/u2Uey)賈UQ!iV+F{Ԙ3_BoV?cO@2>ky2dɆz~Υ͉T ="D4$\Ëx% t:!DDgf퐺Rdfρ#4nŽaDDoz59o*R+l겲"P{x9Jy@Ōe,|\2jfXM*F9'BybÞO ֛YWq>b((EzJ;m،j<]/4MOigʕ4YtD',ok 1onet~٣{OqklrC4uHBCM-\GV]^<ʤGl?pNMVA*O%yNM ^T7D2Tc_nP51}J[7#:z2+ET]%c | ]5Hg+/jm #a=`˔B?$>}"~MOR8xl6"b2pIoMW3Y 3Tש+=j%f!ZinωCJ"h;Mn_[&$^NMс:H9`lZ{&D!!OvsghvߨJh!|MoI oFۙ>86֋Їfr 蚩 q@Mh!ކ;3SKmaģ ޝJ ^DUw{:X}>*t ־\]Ox* ʖջZb6fPaS Ibz1[|*z&2s!b$.eípQFPt+\tU'N#I62gU3X x,tʜvfP|>iZƌ˗9>f~Uޢx@ؕ2,Lt ΁Ҁ թˉE1cu3!ZVg 23Y,?L( 5S;JгbMQ1%pIC bKf08,qǔH&QOsFqÜf+; }{|NV=75Oʗ/UHvЁ*o#ytR#lKd)⦭[9ǴEgO!&<)Li&UZ]QÜc!8?*UZP.R4;>2ܪy^'9=8Kb}6s 6$sGB}X ^hD5G54|atKCGM,g6-̈@Ġf`v-=(6$[\C`/vF&ZwxgxV$=wfRK. vm㣍+L5B-,NyżIlHKĠX` ,|LAq^&;(G3)څ;c-,4ιI}S чŧ!>﨟?RN)a?O$b>!zܩ{UKs<>Dߛ M{t{Aj?~)Drzsz!kȠAg%.>mbŚCIdZwCl`x)@S X]y=u [+әs/Xad(Po2IELjlq-F9ϱNhpBNv..trVZVa*0=I9LH(-: ]:W Ε7MN54$$ _'WΜjA1  35@?W[!\-($ru_7ICx͡y!yLNWе0xc+x_'k7]&;ߥ ?cc3\7' fOJVvhHnFLl3(WZ03}cΩFaߛ6 U/kC l&ƺ+}ӽSYVBB}v?yj4TbMc|e;QN ڝGlXFC_l&yW2Ot3k?r6i&MiA+V_ڸcL-=zRWxxp7e~ ;$ȝo;Zd#kU"I$h)H>3膳x׳1a IGl=͙G=KUyaPk8C] fCG1#j(|0=`L\1V@W~PsLu p/ ˓B+.e0 x-4-^AMp#z2HiEd'Xb~%1P%;^ԑI:C4'_ R+DX+1r\8mU )9l#.{ODz>g) 3&>E(EƓ〻) X7@(P:͕D EgxQлџ{mBUJSsP%O7bEWDGBti? X.GO20Ԗ{pEfEP#O,> ׈9>&]DQLιT<:Fk PݖBxTNƮ}5 vJATv'w_$38`ڼen?`{^DT.wPv3&^K(Qso+mMT-ү=RsyR>Gs06[6 $~ċPgK=MOGgwX0$Y3TX"B=c-UqMvWr HCہ<3VK,|"NqjG켽;bUP^3䙼[g%NLr)СFѰ6( SWdҜ0R'2^]]IdJƞ{݆];bxeib(DCpyՕZ R+0ӓ\Wz6 ˵z\j5FWk,bhxgyO Ї؀cOj+Y{ c.}S`֎t; ԱDA8"g.g9wrgCj.*h>{(E㶒57jbjq&jo]󦐒y-oGصZDl(.}pBPj=E,,h4W\=hbP_Z̸dQ1Iѳ]3 |!afl o@le6&tN8m\JRמ0s@ DD~5 Y/Q|-%;ݐDd!Vp?'jա,lXي`}G9Κ?շZ`$0;hPpl~l(h%+ZZ21f]|3pdq(0 @:\$C@/uA^)#jf* F,Uf-PJ1b1bws|_< JE-s%_}>4:gGL=47uRxvGɁ/LC'i Guao_8sLd : `ۣA89ldw^j4h Z0x<ػKpxJx{)4ȩmyĸ Շܐdt͸WV,/ʵu]? i-^'iq%<;yRGpս:.Rq 5 `[{*}ާH\ Yp0t4v(ROXVbwMj}ephrp7R珹v1&LڂF*e醗!\7DF|;O%j^K>ؒ9N#\}+c&tB'GsЧA#?١>v>mf@6{f:|u|Ok76M$[AAa½N¢rCuI0'ϫY H@I*!ùǒuy?CZL0\8a9EZ:*^av-a.u3;mGu'}ŐN' Udk[w&pee_2ڿ^\D,M00<_{{O>~Xp< 4Y\-8a]r0pq$xnXX+qY7 5ЀȷlD*KTdJ3{:hl4ۛF袒 v^}d'y.2AbppoP 8(ȟb"~R4xsS`6r".mWfq!I׏GgUzIu:զ\ϰ&,~iD>YQ9oo֜I/"ѾѬeJ<|pEkazk,d vSXw oZ|JVrVWkpߞ&'!zi3i[MV5NOP$s{Bp0'vy3V%?cKE,S rKEOn%;_Y{aM:>9t€oܥUI&_Ҹ\,}Yix(*qVnⶾp?Sm(RnZ: ڲjOY$T;%Ѻ"}s_a0VP4LϿ[zrS0la YBiNS2TߣYILH,@mohO|Xtw#2AxXswn-p=w|q?LxO_)T*/H&2Ķ2 %]tKJ'HFf⳶9-HO߸=^EjLj1u3m'>hYM@EboR,2T9fSȵuP'_pW:Qg&RX㞣d-c䪽oEX'ij?%⧓}qH-^F訧\|Kf@(vIQȁߠ,"{ 0Š%t91̖8ӆl#hZqh/]%@^KO-aH"Sɭ0eNbsL G8YsD2u ͯ$,;oQVx=ro"ȵ#*Ք`!Xȩ(d6OP*enO zN i҄LprE!TL@խdaā8; ~&,\ )hp=nVD|,BLx:3a41|N$#㜹M`k|/ Ҩ-Ý;Մ7 .Se$J,vWíS>]D͈: GGa ž5WS,Yj{XL(m=]L_"JAYcRZ3; {NT#Nis}>PGENUZIP֐^.~P .pO\Y8Ԁ2 ҳBM .r:>ˮ3vXЕ}6zɬ5uhMCR=ysD|X!`od e7O"ջl^:N@[ܵ4Vc[5U[jyjX`- ٗTh?MCdNR{u|{k&F5qX/#鲭sZۯ%Gta7< c_FvGL :F}9b~Zlv埬jl7J.=^E3GaV~zE7WHAm|妤܉wl)DPv(GrY-ik#b;ĐNMqӳxem}WruU~ɜnG8w%uo%B +pԿ̔#]`Qe-ߠ&˟7G0_pƼ%s7o~NRc^XH}0 ABpU7y2!TMU7Ѵǎ/$F?x%Bk6:8J/kN]m[g\V äardcMl#V\y2ld|ׇpU<p"zz= h4"m*p*BsM 1Q(.GRxțDԽ.,>.H!"Zб3 :d'<,R8Miޚ2 Z:d.~b u/؟ƒ3ƟYD`bgY<"霬1-׃q+K{='꼓޻,H7ۃ9EB>:53 aMڎm3>~͐&W{!ɫH-F猑)%'LW/!S 3J8DսH/) ;Zf Q=QvyLk+F"M'Z+H]JRrL/ٓ7,~U:MqД<t BH<+8ԞC8etۜC|uJrkLT_m3{8`}+W95wv50' I@#8Tc n_C&}pEz<-L3Bq-{RjϗF&sMC*;Š |Bpa֦1W"M hc3õK#P+C-+3hAAQjce {srXlJ ikBNl7aSh]O0R)7oM>3g 4&]r nȗhG.b0䐅YB_/Oxp^8[̇.ԃx_9Ӭuw!Ss"B rVTXF!&8duyb}lz_^E't%9z[Vћ8D'Vu 搩 L.zCj ךm Wen2FU=CQ|% H֔lZh#%,V&wLnUv|&3L $Q}k-ƅ<~j=!PjP2Dss(#?Ƕ6#({9xFX"‡ljb>O}l_QŊ4W'[\ l,rw)R= af0_vog8DW@|dAWU̽!BȖw='2,@/N55?n2XKD)2ѥhWfK SCLɦHgLofsmbu颶8WC/L>[MmOLM؇c-ź~IG0RoJ_^'aSQ[8?Ay EGpާ^&d<`"7VԧpćDϖ.vpf<ٿq hhxꛌXҸF(ӣQ38[6'@ Ȟ=6ۭgÁJ4WR8Wk߁>{r - YRjږy(q[ euȧ䗶nmǖq+b>6I%GSHÛpJ龳ּb ,OMydDmDļpҳ|јKKL L?>}Ù&8=H$OWDe} PSqf<ωv]4DO|X:ҋ"_KU۔2HIL(aE3fԩai֋Kk'X>,&W"]i#NȶJj['G# <{p*|;7tMBpN\0-Sʭ6|eP%C)51Nt2.LRe芑+p*\-vI`y8`7aޕl\#ߥuC s2l.u>ٯ )23מ1D2OQ !>spg|1K edzs)#wm]q: y7wK5 y煇JsLY7}.:r)kA&}L`QH8Vʶ˳,:eΞ Q%B+Խ5R7O%bZ93瓩KwbSSRi_u ',"mԏ"yvV o*F qy.aЄ=ﱤu~0uv CTy',AZsVW([flWJ7bۆFP}j(團PAV)^ώ9DZ+"yMFB%\ "@,oXD:8*x[M>cR'xȢA$B]M$/G>?>^W~03;DRPQ,.Zqq3k _ä0 פM0է⫉ щ#W㛫7nRS;7X@ fn8}_PRn'[Ķmӏ}5nmhvuyD6xNe|~o-*ʭ>CdV]Y2_;3WQʸ|^K9cdؘ>Y]mӆEl>Y^V, V\YÄkH|D\dNUY.%h1Th{֛#8&*6]r%v)؎HCu;?R,YFf쀘 k`ӵOaioWmED ^P|FYaS+[ڙDQ‚0.$Fo{e0ڧG/Jӊp8}}`yx8MӅύ+5 =q\2a&Y8 +hq f0@R}w7XאBdaSؘ3Nա8g-w %)/ut= =/Ix#4wtBRd rȊgܝL@)6+:A67QF\1vHS4]J(?E[ڤ(m+ 2+uMV7nw]3g 9ZhZQ/s<(<  ʗsR]YzY oQ$L({dRuN"+B~3ReWI8'|8DRe'lI8`ç$d|&,4(Ob”,Hfl ȧQs'Kfvd_7VpK~O&H$X^ulY625*,J纂7am pfnX lTX乨irDVub~+;I8SE]QM&†\Ґ]ϐ\% ˀ.pϒeoh+% {h[aHP+t-:F9WidTsNH0vѳra3uV^,mK6RIN K8|L  endstream endobj 113 0 obj << /Length1 725 /Length2 27709 /Length3 0 /Length 28162 /Filter /FlateDecode >> stream xlzcp.mlyb۶m۶mޱm۶k}swn[gbZc5Ww;ػz9113rTUU,0dd"fFVFf 3S#CqprtPP+P52r;:[Xx])R13Z̭l" ZRJ y5-@ kebfbF0wp8؛Z'w7sv@NLUH\A^ & *07JSnDz5e?Yg[0LLS+W= &eo`wSr flm"vnf9S3g{hlOFvV^_EH#?1;d"nifhޮnfk{oL]n&쪩]V_i1{S+{ ?z9'𯴢տ'D/gl aa-vcfdб3Xؘ,~E_&33O3UP JpYC5U&൙[daKSkU8 c=bx3өXHUJ ڝw·H0ul;yۨ{͍`Ei?Ne|LH KOTz(Ypf45Hao^6@" Bnɰ ,W9Gh6\[h).0uKbacW~zf9Z=}.`] ~˫( p )SūZu??K:K+(F .{3fw)*%3ɵ5B_au:hA\x|vLX9uT7=ؖi~y8y{t\;!иE>#}@"ҭ٬a,WW a*ĸKV!!65?`d ~tȒ 4iQǣO)|LM/l򲁂duU»C^Rޔ! ȩsS!}wi!hK%SF{S "y0. =l[Lf :n-6Q% H7pKr丂9 #|u偍_R].$ }:uz~҅W3=MA‚k*m=Q tuvΔ^G1<*s]SV. lQ`B\oBRغHX[2| tCjO4K #y-0X~b%wJh!NfyZObW̸c@10BI݂Xqf GOYW \|{/Aup~PL48 xs]l[;5Fu# l~m&omc@,șZKq%42t=☗2I,b r%}ӝ eKa5}o;!MMQjmoX)_V,jgH@aS(/{) =8_-?GrMCTFrVIv!_}uÌIVb7bسƯR]*#c<1fSm4ͷLeBn ڥEI+1qy0<'>ƴ 1n~~9+`ea@QvPĕv@1yL+,ؔmtR3@` `"L Ol uVjp=hpoM?ƙc3?w:>\kCm[17]Hrxxp.Nii[ʹhA N&ԕBB;g@*}NET(Ċ>/o;R99yAO__d .JGx]#QB>s=wxi_B\n &wB]X2MBowoNR(?=T].@HJ etLz>Jf+bn4:EF'<9 CE}GwPHMyx.sZYNj+$Zq2}NMU֏ 4ITAO'-o]"`p'F`#O1 m(yasFm|8׻&u0cj7a·k.SOoƮj:SEXD-ȱ]lnq:meQzMɠrvmx$ \T@:-֥hF5Q&Td1xw@YT\ 3bϥwFi;Xg93~-f P"{ފAt^\elZnbVR_S|4&y(/޾v{{PmuPDoO#]A(k4]25״(WZ^S%xΞ4.oT~2ޅk *ʎlw& E$BڈҔiӌu-Zfu; @U$u4Y8##-ao#+ Illl4FJE3'!<6s6K7,]KOk=_{j7*桘py}AgŸJIG1 @ [W}hk{lH[ASr Ji`|NHH/0zs naZ̟kՊI<{/;>$@Z6eWY6qהwy)ھ3~6 ĸ|&ۊN%\U#|p/\I;t\`O;Us၀Aߒɇf!i<xuFJZe`SM wu/gjg6IΛ7)J.%5tt"~Z=i2ezZ[~%qqrbuHX*+f"`[g(7V3ٓ@.;=&C9 JPD;}E5߀Оo)-ًbG a w_yxD`Q7"N251DL= y?򘬦#g*%-p%R =eA阻dN/"{Gl3s\`7FB]N4MCU(]|pOFT{<ˇ.|[y^=h" O4}K[KZu%R4L=2I֝cwN~6[(*$iU"ͫY[즒3 + hn1U'R0r5dlHMCtș2=K8(6>'NKU[L˸RG@TBD)ߕ) /&K,@ o$ װ'ڸkQǙ-D8c }`&'TyEȠb!rF R6.SxylнՀ ӖʼU k^[tvkX}:ɿeD"R^֞NRސYxIɲM骺pKXGYWuE~ćŮp3I5Ӄhxr52%{4>c5>BcEubb 䃓@1cK7J)jV0sAI0[` XD{Ioilkp~'E[>௻K$PSV@ǏB83XD̆~N.WpϺ͘Q5$ZM Dž~NU['&[Z~o;x2O3R-]$&]&րQѵ9(/72>3| Tvq tf$5TĶЍ˩#|m$׍QPN+W/j"yB j3W$h!v|U}A;Z-sm0ᵀt4jy2ʷU>t~Z eQ~&%g*l({5{@NdO>Z(+F#r>' &8=d#}EѤfWrie/HI(n6s DLT<@eѲICoґz ]PTm]&iIӥ;+eM|SRUvo)#a\n݃7_D5#vw֚RAWb PxyѭB0ʀж<ÞHWi@cISW|娿omٚy|!OD 07a+#KH &KuSse4Un{ò7OEgS5Bј(:KOlKܸp*ZXeՄF*yrdGO6wxgKUcJB:ix*|7|s)zmPxRr,u뷎KyFUc.mwWT3$"9SmDpB%Pb#yfSW͕ W3pؓ&]}S5/;\s|s5Gb5 ԟ!fB|Zح&D2g[f '6,-bi1)Ir?Ɇ༫xQs9?I"&yp^fCu&k5{UVxWNȓS`x5!@I Ccq#R1I4 w+.plfb;7 ə.Hc: rثn>+W ~ߴf k43X•?(P2@^)ڋƪva^̪Q3UZ 2#aj$cAj0ɡо5Ƙ"[LAW@K"*. x)א9[> Y# "m1+ 'X[~ 熶#k4!X 7 c@|:kV]6 i}Ò,0q13Sɬ/Nڷ gPC^DEDA>Jr{ nxtD5h-txz&7L )U)"F $0o~Nt5 ]'ljLEo<=8\Ucm&TŘ:VRk`ZvhPHmNArG?~ Y$,J bdf͞)w]b ^1GDfUfa[R1nlzRݹ?&)ԜLΕ  UC)ӕf#O,G2S`Yd1W2=h2 #@l4ik.M2q#UCT*?X$s劗)So }+;,~$V}% xsS5zۿQ)Һ` ^>Fx;^'΃n͏PU!1d;v/ىq>Yj@O;qJ0V6 9 |o%_:R/u ^TLTs0qqlIoEbsxLVQ6=e=t)(G_hTh89_FPb#v  jv _ή)yq9{ q yu^KKÅ_l2jj )< .ߔT镣El 3U}ˑA9(JUS Ƕφjt{.luxyx,ܝb{Z!#q) b23~6³-h3\X\*Kzѝ:^>m+ ^khyYz̔Xef@ջ0A<*dHÞ]D3;uqнY[[8B|8Cme2.QYH leT|\{ xvWchw3B 4XYlR =ִQwATy*3.@ S[o\]96_%^Ho׺@H:1}UD}lK4y8*g{2ǺΛ(5ND As* x .(s k+Е g(U dj8OT:OAo+6+H_vI'? LB^z]<^JԢLo&p>2@/ӿbSo[z+_Lbc!Lk"p/Z ݈VX,е@s;q 8+t!oqf UJ8tPevh.W_0b^KvtڴGE6oA؃R[(i_J4(`#ی\YTn{! d]&j(TG v$n#&&'#n2EUT3x6Qh5SUg<5bW=t~׉Hul\FIBC)-ʗZt'rKvjj>= Ɲna4/2Tʮ݅n 145#B˼fh|vVh`3 -<򸘎 H\O;C}9)O G=997}Sa~"Pa;#FLXzSӑ8W ۢ~7oّޥnC1|̇}Aۀ&͒ޕ]Jlv'N/]ݬ07V>n9=زN7B^| BrKQT]rӂ5(D2rwL⦗`E'%y˕舀+,!$ ^5tWHl羉^u[@BXM4K#@[C$^X F`#t,aH,Lcʏ JxawM |((/C^_Z\`'` fM JC9sMc(@M?mcO>O?`d#b:mIq޾YPǀYiۘEi0|}/I}){2MM,_-ݳW"jAzSO{^̓bö !š"#y3>Bb /#^ܭ e=[i8z3܂$QlipE7 u]S$=įQ/gm*NK0A S U\Ͷ)7jusACd>[;ӧ'xdZqNء`m}Du:qbWӮA hhg-X˓5pM>jD! ޮjUE7q3Al1V$3jˋŌ9\! C*4XYb1T!Ru}얹ٱ$ZJ7|-NKZSּ2oI6nO5n3^P9~TKϚ/XZRqEKShru\  +kzog{n Fit-;qW[j]bGL@8$omu׺b!Tgě+Ʃ*;,i!ξ*$Εݝn? G #|QnO߯k>T ) `Y 7s=ǹbxs5YUu&O`Z|n}K`\O¦DIGh^E޸ZL՘ i`mWDҭD|zB]l[>]N)ټ'z߼'/c;{BQO2jE NsDlAq,Hӹ ^`ԭ3sǝDpsr'w$JǮF)n* 3Wth&"xt qT[˔g66݂.Iʯ-Z:ca Zg*#Νjen&^|ƅROo`+!Z2>=rwS-_HĮ[h.Q[Weޛz@$gR>bX]B&to3ʋrGU[uI])V]!cnjXx9iM< _p܂ ֶ܈ 9B&%㬰>| }Ί%VFPFfy֦Zu yfg9wn4<ӹ_Rӫ_#GWԲqRh/q^Ku=c0"t-[J|x5\89޶U0n|$HvCGmv ) έIe9UpaNbIu'|KIm68qObJ=9H`˫PH~.Ę)?J~'d;ˮX!uT_lnuFȐ2kZ.kA)?կ=:E&B]K"tRtꮞzZ"l=z8JvlRC۹cD瞵aʼ gpTj}WсcoƈU!4RTRV/A+1Gyz*tv)T~i F EU)k 9[ A 㤦 0\tJIQ#46gWȠJI^iH@:fR^ꯪr=0YGΒ|V)҃"jBAP=q7LES2yR1wW@AHl,"غYl$`|? fJ렦 V1JqJjB!_ mǶӑtLtt2u7ĺ T/#aT-E䃼/Յ&y-;:;xbr xXάM 䬎ah3J2XZ{KHbS/tujo}= ~lQ_(BxYNtlE>m/cFJn[ 75IF9э2Kzw_eFJjTI-Х#)c; ^5eۋdYV]^u^?Wd]3Bi$Bi#`he\%5 9&yڥ)q2qp LRne<#Q0HĴ_kuEJG%67D{h6'4gbհk,9=h$EI8y0LQ)M~#IfOӡOb>SQ)$#HӖ\SrǕsp5y$]òttL(n{NԄ[假z7bVGQKߗFadrоP2I]<;'/ʼ+fg|CM&]Ve t'f [7*AeAL =s TRb vXHLlޞ4ο{0ϰLJu8Rvr+ٙlM8%u6쥑= q)t+komġ 5 H[R&F 5 \8==_Fۨc$< ޕ$촘D\DzIB֧yy)NceuQx괲p =[]s :lBʤ$+ThC=<+K ́a ,܄i\{)Y[ (8cO NƄa&]e[A ,Ό?\?ϝ:s`~)a)bg출{UPj8b[cCM!%׶,/G) cwi7 =lUo'W ͮY$m5Yrhu58hdbS;Ⱦ7~[ξUt[bnE JngLLX-;}a⠇ĨToG֦Ls\g<}!H>DǸSX!bW\2 >9UA>.ctD2HͧRAe}|+=ʑ$NrZ$%D7@DUF('#LU,G){S uY\)7;Yw%&1dz=Z yuxA8Az (G˵BPMu죌Zy$9ǜNlLX2ۢG q CŠ QWE@w<^K#\~8 zUCלd; tˮ?FGJBkxxp|m4{̧ICHR69.ɹBf:6T/u;K#xSّjѐKf!ߘrT NZVn˞?2R͆Ut4ˤ-;4`HPmvw&c=ȣXݼfq͛?,l6l5ʞ>-̳:!{1?u#NR,5WNNazB-긡4yPmp[:^!qLaEU$'s1Hn9ȵLcXw~Tu%{:!<q, m{ TRj#q}Oжo|dN~oIVcZId@!Kq&y ΔR~`1{/iI.=rsT:1ﵯ>`t!޵Įq ڵrmK_R4$ۆ`ԍ(M!ֶHf ᇧ{Ɣh!ٿ0ۯ3X \@^r$q! ,cBV\5ͭ^OڟԺixj݆/8!,ԙ1X9UvnPa+SL}c]v';w;jT>9(3?5ZʸfaiPSpU6@.B gvN4M 9e'^FHi2HGi^KwY`+4o%%~뫹@|МJ'FFcmũl\''~6ֲH)& ,jq t&gF:Y{wpNlG2׮s`B^;A^jeSL7g4|sHl`p5QzrR@t2oUWЌ˯c.?53|x;5/A}wۈ#)F Lw@ٖ s+X됴rD (q+Kq=tZjL42eliÎJtef0D%@a]B03MOk`s%Ԛs}ujyl0&$`2=7Ϊ kgnZa⣔\?6ɬH%G$ =L#7~;%ϊ{AABmo9eA8*,][\/W^Z㭛Uq6 rjݫ1' ;:y;)5xާkHbaio,8=ێVsZE׿ Z*Eu NЅ~q#EKI"T ߯Ɓ"X=53J(2p*gssM7ֱX(NgHqr]IMX6xxsV+q z5!d ,RڃZn]tK9fFN` eTbNTmx(s}hK1ߒRLBܸpk*Ns;!ۢ;-;`}JqI+`ª)~/V*5=Q|> ̪5f]ҝM$6R8o7rZћb4>FKr몓cq}`Vq9䙠C\)+0Կn.ӹAYD(q'}/ >2ֵ2|:#kL5{b ˤ`Ie[A{^. ǻ`j)^RF[ے+m.,FPh"! 6ׯ-i+ג c5Cc 5SB:-4I m+EBJDƯ#tw9@G\#vPKGxtI-ҷPPBaYj$]W\86`o8C/"G*5!=wJcݫݓ1śa_kS eS?G?iC6C븓*A0KpSC) O&JQΔj\qg;c ?H'i~)rvy^iwegӬUXpיִmZ;pZ2z̒#~Wƻ>q6h\7cK] (/ ~hF eO %y {hS鏢'h"!8U].[7uQ 㲝m)희FN= 5?"ƪa1 - mBm[.M녢vK_S H)RΩ7>c+` )!̮оzpu՚Yx㻲τͯkrØ}k%=R$sFDljocdeꢤ,Aa Pu|E`)VGcmlMu+]T80`_m\0LIv) >jYŦR"Ý\jۊ8֜hb@DP1. {wīhDhrh*b /w53v_VJIVwHt6Q߭Bī >sac<@XL!]WeĈ Mv:BVk{)k32 E!tow.Ѯ&Zm/u6o=׎ͮ%%ϋ60ր+u/x:l {xvw&g%PRhMm"p hA}w}6I`ՑϦ"@V\,7"U7hdD9g_ꮔ~6jR#L ݊$XGeхqXfIP~]uFf;ga3~ xK]䇓܏TWrGX ,,ULNer% ®vR sл̴Ui%~C+<YTCmHJDQ]' s䁝!&Hov v 5)lȮ)8"tZkVMClى22amA:V .{d'lx[x?:*fȃ®(\#Q&Ѭ>uU~?s|%iիш~ɕƒH'"9 .h 7d:]`cqY0q 貆[TՋ$\6#4`Co[S 7s@埔t%]LrRwOr{o`?)n OoحWS bY[tŠqčg7t:gǁ@Y5Zv?ӌHl DF%^h ¨Mj;h 4|[4L{T_GF0khW$JjG9~BrK44]pnZRƅ݃v4.,1cbr@rHO z3m+*,;aCZ!9pz17 ӛ=O(yבtJyā:)D㾐ЗLR1uF$;QG0*pCgVpi1TўrX|.ܘtcm&ӋZ,ur lQNz-ҿ0SÇw?T!pScL-תR nDMB [8OHGL.Eeֽ8e!~˛XHKǩbK" }3,٦ ][$&4l:N?qdNOS9l1WB~qG)5Lb^70 |h]Fyqu_\X3=}S*6 ԠLN)y^kNAǿ 6 V^y&UVfQO98dEG' ӧD֢3+I!HziGFHIl 02Pŕq(O]I|h8ώ/2/P-ITSޑx*HFe*"S wڊG@aT\b:O S(^9Ic[`/ͦF%>CXhTN!mH2f}VgD2WAEmJzՂ5NJyGl3z!%Q6VD T1-u*ucWāΈ9D4jhW L8jopE@vpAV}QMʑ^qvBw2[:$"BTԚL.l<2TO؅Q $BJ#vu>Oi\,ˣ}-vut"z} TOk?{F{eD+K pILmdGjV$ tyJ lː.2,0+n@/L +qj3[%' "L,së5`h ]"a"2*>UkEc$&2ܓ/`uC"tIAqS=GSSj&kVFֲmS6 p)z+1|ٔmlL' conVXį+W {j ߗY r-'?*>z6ݧwTD[D#f]_lĚVŞ6\mYN>yؼp|qɧl1O>A:7Ov s翵=[d2U\#4~庞$I1r`CLٜo'&SbUM8-FDrF#a|/3M{_w#8Oꦼ8\(dѼj]h[ Dk vyfS(!DL/ *8:&?c;(b-p w3 t9:>N r #;N&y%D'MXe@1e4hIk4]uNڭ>wTlٕܪkXI_τ?1^'t/m2%ewYMC;5J5Ez$`Vҵb^M9%خBXU8%gB^<0ͬ'ɤN_SL݌w-BevҚ?w |ڑitwth4nu4Ft(Qwg, cL(`L\}lʈ ȰTBxR1/fT3frK0V{ `` e"nbLzk`F8!:ڜM+l ~uC^E.u rj`gP.9~"1WhlxX}k em 9y+3'GnM QI#Bwn9u_0Vkj#OD:!F!R3moVWMsx()ς LNSPM|fWK90ˠ} C`; ۉ3l />{Û*Myǩr pocmF2]!BC\{>fܦT _;$ yB27&Kq ! ,g:^N9f~ & u8&EMTu_?EJs+}j扥sm10X'C_?KYOM7hСS4j5 <t*& jt:ėrmZYz +#y.ɬ^^/u̢S/BC.r۠\r?Ԭ. 1 ơ  B&DX 힓t/FpJj= Z.S]_#^dR›]fg7Lw%=YHyte5k A~5&}aIgG?NP cWNoTɳz X'k5ͩ q8 p Ǩ+U5岱l*Hb&ެ8f Z#t.]Ё砉X4ztuP̉P2mfE#+C-%bbGO}:=U0_m㱠F 8`q 4>[nF6q3KO?dv&n_yٴkrÏ!.T6W9G&uz#lҾ&ʳgxJ.e"c\EwBfn$Lk(6ABH?J0rY- Q Qݘm&wQ| k>CnFB-\xgӫ24r홻1*D +L2].>/jʥ0Xulmo"8"3a׎o>#/<ĭV˙.VrkYN7t >g$;й;mcTZ ?Dc>,r>Oh{XA);X>إs&`?b9ORoG8)nnY ^  z7 6"W!-yMY_qz<zѫYl)oc矵&L':ͮBSd~Rd;x`Y k; YI*:/tB15;s3M sAX}vto%W%AB|T"9E B]]77~<PZ2CHR&hCM>oW6,ےlGOz-B,-ʇ]g %V-kvfPjpC6dJk8URY:tz$ 8I) .cuZMPm{ߺ<~s &wI>*O:2vqH iӿ?dCWq h 0Ќ{5(Ӝw-ZlnMfcl2j7*س+כP<7 IFoCLZw'W"f,a" %ä*x7 EvO\Y@O26ީyCKů c{PlpE zv;s$-{6GiQY(J705E: e|;!8= 2xWEfdB^NRm6Y+'̗lŴBp-hJ;0Y$H@Z^ /!@*rA߫FcFJQj6m{P @TP֩x c؎⌇3Hq]EoݦZ6+1Z^lMCnCoRj &u>i[,^5(Y=PƵaw{4zKv̵FMz;fLrecZ&?<|FSxhH&7GKI/.kn gC1$dN |4Ih@ְcܦr^lD7 [5!Pg.G>rkVp}esi)*D@ߝU;- 3{р⺿Ucmyd|%snb-[mc(^ *Pcl[?.8%|к_EWwoJDLGH`FY`߅Vg=R["'Rqo[K/V.gÁӕ[e ֶP4JiFs+ANbEW6;F%J&qvE©F( mrl`@va^C/5WdG#p?qປ=ZYޛAiO]gv()g~&(18`ޅ-ßSy2*U}IKb|#gǎ?$UsKnCqhJ1H㞊'ϊJ^✷L4[NhL*حWw@0JbK X,PxecC]Ed"(f`C&桊w|@]2Lg8uDl*Q;eV _+ŖCXY\OOGß52s;w h8hsTjiZ ?#ԓMZTQǠ&3,ڿ ,S~7!7/KЕbs©0犟?]8Wgy"v#1G5oN'Z{ey㣈?vYa"Ϩk|%Y+yދj>"oEr&PV=1I{)0YԒ|$1w*ȭ#&cVY< Wp'8[qqӰ MWqόUz:aa2S}ӷ*Tf  3u4V܊9 \m!W auᴋ9sfv+aGS(** .A`d}=Z/}?9d':?XVM!Rg@:δQwۆ (m>ۯFh jŠY9=^?q :FݴăC1ШπzBfúL#FtD#aݲm ǰOhcCs\Z 57x[xRE .e>Key2cds#kap+uiP6L1`?_ШǓ ҨѢ C>O(>-RzaZ+GNh(PPPƑͅ$$+i\?HC;|I.wuӃ&}%HBS[r3|%W>ɫWAE 2ٗ=2#p[⧱Ÿ䣄1M pKb'Bk"R'U**-,^!- T_naiW[Y&\+DB9nSOF#:r~ #'S?R}Df܈Jx ȩuf,ԩo:m8YAͯI%5/kk 7ԫm`.sߵ8OB6sSr7fsM|VKM\p + dYyJu=Y]fi7Bj*-bJb>D9V럽rj؉%O5i:fL da&B>!`fmeZ@68lT FK1t:=* ȍ5&G y*]ڀF]T AhrUqF-0窸I9Ek̇v9pCJ-Үd rS%q85 <hܙwz'pi3Yp3Æx*4Wz'd~TAr(1c᰿w^l !cdFmHO-eNB< t&  & H0ǜK\kMS4[Y5 +xJ91"h̒{!gGqQS/wX%N՗SyJe^-KRMC}ږy7U$M*J(c1| ᱟSNm%j+!v`=; 'b, -\` ,B}/vs6+(X7ʷ]Ph k}4lЭp3.o_ps 'U-JPR9-Ƣ'奌 .7YdաV`O:b^j ἧ+egT:'3R3vS:lJ/q셦mX ,vh YFoÉdZ@,߮n5gf8x|jdl6MER@oO㘟 $n\^8b::} tÔǖ}7p0q~.:6dE$۽:EW2zx+ObA\+O21=5<;/ipP `5<>c]ԖpՃKz4Oޢ٦dɹh]UѲVZMQG35gj4R6\Z?rţŸƀÿe ^Ms@L@%o7d&Wsɥq.=.EYy]`%[J)y_imgl7X<Hd.Uz# ((sx;Gy?![X`ƸyrR71SkP$u:w_)s˚v90bVi\z|p֬z)mr禩N b5|{L/F_HARzZ=8 Spϭ48߁1@:ޮƦG,QX_.X2 S9) ܱ1ac1ͅjډDSSV1c\&o7YY>[3B2,%CW)4F H;WnEMgwAUHljԘdKZS5V-W > stream xڭTg8&z%h(;QF wa F3D !HBآ$j !j}w~u^^a`,A8@5pss@BWsJss War9C8 &++K !>(3552s8DÜ@A} 0P Xjk&E\WЅp4pD? C`筡q\*hP0 w "!A Eh?CN(`Wy8# $ pa82`H jgg<7#.{thp( s @`h+GD.@NU N FhpOߺ!>QAC]q9\n'\|Q@LO?OApWu$G`p)NeOAEEM5Kߩ5<\]Anp/ ߘ r͡VH1 TN8)DEt0o(; W܌.p CqZ^ 3qχ.-{A+sQ{zQ81&>H\aCqΡnIBpMT .@5-*v?,hc@pn8(NыێkŒCP0,撞)ez5n"F|]a\hJ,[d6\rHgr kI4\Nּ˳< CDX7ۚН'5[^04ꄘuAEI~RH[GWbm'ye͎m%fD2nyS`G [%T",9|C,|pYYm| z&pBU!2[Gaz+{Ej/ckEC"!8(U:"*5;U!.sN(1I@ Ε O2'SMk'~6[nzX)3Nлߡ ,;+hk Xl'cjX;$  X5'ԉӇ¤.IY;==X9QIDlJACkg 5}C(JLJ&Lkxr(^EUTAN}cG\ծT79/%/M0I1Bd+Q>"%ei3g `\pc_V=Beg_;h ?qW*Rw<qq[-!T*j=͢*q]5{HIiQJaQ;-;eϮN H>~EP|yGfE5!E}Ak 1q=4Zh1{o.)\Fj;c/ E]o&j&vrXbD4VPsٲM3#12)LC[woEFԄ6o(׈k]w{}'n )> A}utbV#,8^PvicRIb,ۀ{shCӍ_c/Lu(:sG%r7v '~c R x2nKR7fiT{FYYCW!&¥VźwRȮ.!2w H:0LI]{@"t[Y YI `r| V5}M F-էW)7S\wd \\$/~4Ի${{%ݤ|b+NS)z9gΰ^fɘ=S;/}\V퍇nBUr0X`'+6By??ntRϛYThlaCڄԞiS[ 4&cm|f/$PRI?Fܾ`ZBƆfTKƄʇvEyɃ2w`&*ˍoU~ A|]\0'Ȃ/\e7#B[*oAaf >>!exniq70$?9J"nl.ouQ1v%[ϵ_֖ltK* F xR\41GvRyNrpG3T ^,='K|]`69NlC"F2agaRIKx<'*^ ᲝaױrmG|H C2&j@ O׍xK72%jmbmeL?~D ֆC&Fw5OP$W - .]ew}>_BGe:)ݺʾ#SwÛ 5U^jqXlJ=$a0V½q{㐼n3vγ$W+bЫG~x*_O؅L!f7 ͓A$ Aߕ _?i/?X JhJ}ax+ I4CC.E [w%VHh1+ɒl+k.U!M 9@&<䒯I߾Wp1&=?[.l8#~S̓dRi]!s =8(qGfNjVN=BXCT+~u#R#UE%P1@[Kbmz^6:5'lqGSh=J2}r.rῘ&;!mXbvVxsit&vG_4KzJF,B-̭5̅IkIB20'-q蛢|E;ކ?Qf8)98n~]p6HK<\{ 8˸c˪g?ut8Edy*ϙYӹ?oJuRC*F_ť7 {9QTXQߡ͗[eJ함SB]_κcgq¿9~hrW2_;/[(A= ;Vs|jI_zu_ ~)ȼ#:G%,?4n"(vئ3Bv7EN^wv"u}܅@?eRSE5S ?O~`t+fw+nT'ݒ XRdYlB,E ֹh*6_WRg:q7Mkכ+™[TXrSUd6 uڥ9,'{J|z3Jb2Pϡ +[(NO.KcbsL} a_:1߽ұUA$?gTD~>]9[=r< N6ʇHsݫ}i+n6$b*rmL<<0/mV%^~u3cg^:roJQ+<)J4ݽCd>/=r#m"$r!Vr+uw˜O]` ;*=2ZV#H:p 1?@an:^:-4gR|!\bIbnk"XnF^T'Әf7qYan߯Te.PteծR.qj'ejSSנ,K Ӫޱu6dz8'"IS!Es >P`ޥ1-\»!NfD)Caf-/_-uIGe)4{kqyVϩ:m4u`}[c(x;~[H9K1u5bʼ! a{KbL@t|[_ΰS{ G"E^&J;̅KuCE#X冦aG"o5VŢlurK=vtγ gM2^Ehz:OQ?ݵDmă#쵦 a'L3Ϲ*dܯ'u 6Ly-,d,, ~0F;|6܁9MA34QTL0S K)C߬ypKjͰMAnGi hi H;`RWhbWHh2U?P7흳Xx< &{@DVn3h{<6zlWzV\gP/“jd%S2C5e a:U걻Yb1Sp"oUIGi9Gн+^ς!J*2U|)ORK%ѕ[fH3rQY^?YYD!#+M&"}n7Zxҭwz%ַDL[%&S~S<̣n)hͲ‡{W2,ܬdUur~tv欌-nC9v[g)R-Iz*7U,/=F<kz(VB[zl-Q@tź]!]\;#>l7VӤ(ΆF41k*wy!n!MJb dxwfO Z=/x_Z0'S0е 4}x^IZbçjD_!(eі:#ı&;@[tc>Zf5`1'RzS 2byD+g_GmfyEêO>:u*u*"ձOi| endstream endobj 117 0 obj << /Length1 1144 /Length2 3181 /Length3 0 /Length 3923 /Filter /FlateDecode >> stream xuSy<[&BPu;3vc_ˆ-a3̂RTl(kT-)B d_Qス{9=w9EbC, CAp;oX^DTBЋؠh4 1@ȼ7d  V*AkŸXdCaC@Q2e 5VKyx(ȓ\?$˛@@?Gya@E f"KG.yk8D{P99O@d 'A. ;.0Jp,&y~aHD/qs<t;G8&ˁ큟>?:0x o (Ocm1/Qo$Qx<|1Ov KyE0^ k/ p ?(r xc=/T_߬z\vȯHM9!{[̭xjjEVeL*Ajz llGcdhKt]\8n^/ ;hwY`On:Np3P;`n` }h`{Kđ{Y[_Rxo=zɝۡX$pVY\UO%{i8yG99E*yqg6tfTŸ}s:R+I45fm|@ sڥ[v~]ڿ4蠨r棰 V$Gjb}f,?C(NGMb;*xe].ؚ?+ (ub?jMwz^*VuV8O@gj2:&qO>xR5FE Q[H\D?y9'sa}HR=:e|"pt^]OŤMpBG#뾺^=)qC\8[|4V]A%ӸTTpCB7ߝ V6d㗺lYt4eo8 їfskfbjf%XX@oY0_wXߤ,駸@zn}؜*WlSBH*M j2-|SCS.ɦd=اs4{.I20Q&`Sy673IBe)k49]KJExyZN+/29"w9L}9bw`67oͱ6!Mt/A8!NW#"J-Kh6bLg<=C n-[-1]ijǦYa20gȨ@uԓe>(GES}YUѰ0T.DyV¢fggl*GGe+$[IHٝ:xi|iY|U cOԷsQ tD;M_C.)ĦťQ,lv+plg; b8Y7IeHi(<[)GG,:Nɹ揎ߙ2}K}T2 $,Ĺ&.\j5pnF Ϳ;UdBȈ6#!UNg/!,xJӫèAZpaj~,8mDOJR:ojŮ!DE ZU @/©9&fq!2(܇ꭱW_̈jl% Yc~qbJ"ԍѨaa[pM)׬|4#j;0±7' %"akD2T* 2tW4e&/;\ta]qqg[ՍjTH4l︹6\X&9.SyUÙL\BuəzfEQv hO,i0˔kjTjaa| ӹtX$[(iMDV!72^GpLZF#M?"-^ vGvP`z79$l%[j3hplG74X}4ӥ쭊~Y1 ;xTӆiG"ݷvRiKc'4w}4wzɊYNV&2,Oi/y j+GV]U oYeʳFGܚ+kZ-/`(urE1w40ͩ)sڽZ߈›o׋߻x~Jhx +]CNm6)s 9O/ܳ)Z2JIc4*K!wb90ꂌ|Sz셣O5+TԸ2NK&Aٸ#Ҝ"v.0^jGs1t^2*>7ˎ NKEy4Q5mzN ] .Vr$T̻fE.ĥG L{m9)}Spqidu-EHJYf)39K"µ񺟙XKq_|WҿZw&P (iу|7؋Kᇦӯ'tM^tS Wi|ӈqn;_UB?w^5 Jpmnc<_|2*ݛd2j$7W \?8E@ojkp}3 G6HbZ.Ыcsi麄 ]y C5!K: 7mJ[8`Km=)>hd~<c]Wv1zgZo4E,t~lTp:7*=ML ~-ſ Ti@j+]-$N0'n:i<ܭ6lNuvV.nޥw㛿 I5J TNSٰ _iA%dǜ-Uw:tiv7&C0|Ha/‚ma"A5CEy>0Oh\tFa'.,alPq^S6s,D99ړtZN㈥7'65f9</Qy.Mu:\ʁqN7X<)."?ܛ endstream endobj 119 0 obj << /Length1 1177 /Length2 3066 /Length3 0 /Length 3812 /Filter /FlateDecode >> stream xmSyu\nTu8f14 M<zRIhyT&iAT<@S1N>4M4af3caZO $D& ai  hd,H1dJ{Pegǣ*j>  M @ :Y $df㸭X/%Oݒ (P^hA)^P"HPa6kIY PxA,SXƟfG$Hyቸp g">Dxa Іiaz!XB$| Fqa Mx/ @Japx,+U ^?h*à0m}3/G"BۡA@QQ?7ܜ,5p8SUJ>H"?gNA t%*+ّx,(216G#~?@1z pO`>/ '!O]wgu37?A<>9X.;q?"@33EA iHv%K4#آ4297gg! 5~Ra Vjq^ޤM&BٞI@,e^A8rgeg=L 7r YK@q+5I&IdMY2gw.*Xt bI;OKMLsBdJ y'{UžE}&Bpjk@|fzTսtȍjHy׽ڧ_ZR+0]G|m7>V+JWXx׶?Dzv ڇ ܐ6w+OLcn%KsYyRӡW}kxRtwܫ~7 eZm{P~$A񭟧rԛJDlA_zHpY9ӴTQ6?x9'i).,A {|p9,3&(4Y)Ě3P؅m7&@ zsi,ޯ:+9Q+Ur+Dz& [rȊ&XՈ<*|)*EK47n'.Ox8SoEw΂nFD d 0Amy0`1^f,žHekK;'9<q7Ǝx-ĽVv!⻝+\'OEbY)7*( hӓ9fڙ7^JOmRS[ӺtONzqkP2bG]6;벓.[$}yεTdz>ޒhG49^b\X_ns:tWs@˭Rqθɟ<]q7s."dc_ڨyMc^PͿCʳlQL K\3+4ꆖdكՅg^i7KXwW KA2M#cR/ɥs~ԭ&&O"mqh׼Π2y -m^xsnK%1=.ك6؞q*ƥ:Q)dP:2=iqxⶤ3 4Z=jq1}YkhkϜo]_ѷ*#қ:St aQ%e{I4cndyb4>2#ZjPhb(4OdZ(Kx=%BK\mbCv4,#1Ðg s#QSѝ..7^mj5l9Ba>+7Swu1T t"M~k0U˫b=>>e¹rxEJ0-q5xmp5Ǧy,&@Ym;b;ȵLTXZ*.3͂9Z5vyиaE(V5tEF7";@[ջ3#AkQcsO̐(Ⱦ4yٺ_G kFClfIz`R￱q!lt+/{t=UUߚ޶lIԊմP.dG')3 |ɋikaQVq *@5:<.=w|8P"O蟇H/uZDp"F: ͓3X;މ}*k Silo+9| EMo& 8ϱ? TMUxnjʚͺ@@90VϞOFY0rv]Π3YG>Xy:e,~ȯ!F+籞w,=^F6dԾypj{Ř^u`A4FGP@;3q*h:ۀ7VϳQ*FPq-\.nG|Re-K1k^\H]l+;z>mf #HL+ڴ_j> stream xڭyePܖ- M%8 4.݃}wܩ7?ϖkS]ՔdJ ¦v@ ;[0 #3/@dcbg`# 4H@#0V hMb@++ jg2U4ie+`O{ h ~'`D$Ԓ I-ll 2ȁLN@#)֜߱F'{ = fE:ڀ޿@NsG#[ v_fvw{y)9LA`{U%1[zw#MLjo;̻lunj '{k#`i8;lŀ47r4:9üc5 /wrfH,5MAHL튴vSg\y'adjgk0!1)؁Kg*3 +K{ZZ}#[;8_)F6 kWҿGkV}`ۚ#I4UM,fFۮnk tu{fYLl.oL Jtw߹G+vy FD ``cgy{x8,ovtffo0&v*}]/{<@iq΄/25# \38.z0ؾ^ ߯ʮ75l:a}eGvw5Uw2O79MO>v.&bԴcHϳuNfqeg8v6G;?r|?[{4GǟnG/`{v>e R$% M^a]!GudEL*Wi}3*7gnl4"ElnĔ~J:4ϒ@Ǧ>jÄ"Mr1s0ʰUԴP3#L{숇+GүZcgA`u!$H)v¹01RV?(ygTټr2=@Nѝ~|@0? ١*ۏ/std&y{V!7A枦0JтAsXIjH2O;Z8}(*,;32kMM VI"ƦZOMI7ZNJE1kH~txȝr:j7CA\=xZ{Չkʌ^7D(g+RqxaAlj=dR1j^t]xAnIׇ %C8z W:W^I67셾`XC6x_hk(ZET}nDy n!T6S lW3ʂu^t^޶{ L &4RR,2Żvȥ?`"nBKvj۫$' Z#y͛p{,[ca aвX{WOMM|1dUw0_9??fFFȏ"+#AFu.ކo [de}Vvi]peYގ2tjF.#{ Z&ƒנ~s-0PR`:٥Ab`o #l[ju=;CjZ'ወO%BAJ92x' #5J{Y&jJ I*WZK3#xpEc %p?~>aR/O+HHJV?]=QXxY- 0.is?:#sczq~D>(L*V4Y8.n1t(StTf/7OJ6NOjt'&O/0|:ZH$1 腏GWl/8 9RTjT$ʻZNcP(ژKR9!Dv M]LBBLHνʤSu|,MXrAtb EAYӖzmMKۃEgUƘu:Taϙg6jV{SA9}^:Ɨߡcǃ޾^qFQ~ n%^ϣND{㢷eXEa"ShD3e)f?I_ؐF͖9&05>,2Ak)10\xgef}TC % pп]K gIn6uF_ZE멛!ŘEgA4DIKrS Vkr&Uxh_D"KBV'noNC6Hg3Fc[}ou;9z)Ӌ7 &(m!v:s7F 8`H.WH^g M'wٮFLB(kD߭96VcDǵp_"\E5%zKW;;z-z@,e͞F5Bi0O rl8Of훊'vs')n0uU+IѫĀB:F&lX8 :i8S>b]'eќ]7}q\󋥥FZVٟ-MZTPM-OpT{R v%YGF/?D䕨$MbbJԠLR@4n4Na& yXoXi01j+jI\VNr.VEm Qts3#oS1ش&˗ ޼ 3 2Iք#sxdm4g+iar"ڙE=Br煣ۓAHN?x@!},\wk@es鑓ƟZXy:箰 L1晬(x+Q[G$ԑ\:28: >( WZ\*ɟ #-B BrJCJk_Y3lGWlᵖf'YVkMq֥Ro8 0Ş"t5ի,9}v MQ?Ъ\ sjpU/CeY7f;?He' _tZ9^e">ebB ڔ|69gdFTmvh=qIкqO7@նі5^Ek4Dg&PL"M&IEHUWHL0!FI;&8י !Kv㞪&_exA+Cj&D*Mgq FMAPOu}H tE:Gma$ s$>b쬩Lpnc2{O@ĞЧO-rr._﹐7Ef3] <C t>H|js bg1 z$o @)[ ! {kvU?7ԭ ֈזLUu1{UNkeo8@ "ߌN靑8e#|zUN!+Hΰ L8˓Oe[}q4cp5eM|:maǓ gcyL"m7@Q< :Xpr*]v,ho͆Hoz0Q:'{cCN&kdHD s3VYcHI,/_ vb|oHBlSS*sz B6TV0.hNpaXuhX1FdȆU^: j5QC~LakKUe0pvlmp03P!GŖb}h$hXgG9 T`(ᨓ|Yl{3 LGAj膢}c#څm CeXOPuFwt<(MMC }(oDޔޘ r>:cd(c 7O[E6 ak۳Uxyͣ%5" a$qZ;lFd ".6h-g&M'n׏s@G@wcւP<Ċ2s8Ñx#cG>0K4hKn[O;*tzmNMd3̜[P ^[Q>;Rʄ=ou/0U tq:!{Lg-Vi~yb9 U0Ͱ!t&юKyW;8^Uwl֠2(}a9QHn膠]+~JIP_NӶ64NA<+Gޕb༯3,>l)׬cHǸI,-@^Dy'ģYjpAT}ПMI;Oj؋sgb}y&dģyd:~~rqpNpdn5#.:(>`!n*6Y ^8@u%+Na&9C8.8}xǦɢ4V@v48bp@zArkhEj R޴p],9N}`;GjriT`D )=Oסa~S8TB-a$\`ZTD0ӕ0ʌVYaPc]lq)J()W͑>z:P5Gj uzͅgw*W-2_x׊!,%i#&[6I4|o*q.3P 1 '*-ta2Y/7UV UZ\33#vzդ:紡zОBANmf8뵦yb.kыχwR?_s1; {5# A8leؠkE['t5HΪ+[LKhǵU]2iVyMa<ݴnsd2[_aLVvn8$v,: Fx>"e/+Zx͓W/KPiˬ~i0өThl"'#FUL!N{Re[܅4|ud;6Ć㏌͸9ԘWdM21W?8T˂ydHCfśkFu*$d}( 3CF[4Ph~|lՅt\[cSlżš([~ki"\OW|ڞX 44Ph Gۆoc^9(o43f0{\gtbI" 5.OtgӾ<#gyvܕq2s8{ՈL% i`f*Nvr>Dc[D:>L֬aebD7Qg%9rZZV՟j wZй(?:{eı#=L\&c6PPݏ9T2 ^l ]E7XEO~vٸ@z\Ee&d\u?az)жô>ON: ̍soxc?-r}ŵ^|ڽp-45[+JoҜD J p緲_Kۖ!= "PwGcmy8{9׎?xO"3f}9:&%7RmtNOmm7 =(N G?eF;C`<0ۑI0}֦UTKfI午8:i^&u̩29EDn]CD9}NcK:.1R70sDs1ܵbB$QlɦWƏ7;D904P6́bXlXft(goh-6>^p))YEZkk -92[ R-jVh0:SX7skӼ7<'o 3x85S _~Ac/r1Pq2"[ϲoW5O@V{R&+JyY;`|n! IcZGv>ι716ŭ4, SvV|Ѣ-j ,:5?ɞ!"&8AҫA_fH}|$Iga}?"m{ҵ/Xf5zX (yrUV^i SJ c[.>jN*Jas~+Xok¶#&$.;=;+sdxзFڙǦWx=+ !d;| ps5^rM>]kI_Mm=pNJL1 T+$ĄG=Us}KrS #hwx]춾q?Ƶ[ ./k Z%ʆ#E q!9K=QS@" &spn+Z;R#¼3Oc|751wXH2\ 4!9t8QYyq㩡g"M3?0 >#(ײ8xL|rŮc.U.aFqH#9GGў)=pqݰIK(-_HujMxx_@3 EIi  zjc3azXڥwb@)uXC~IHs=]dsӘXc^g ~,4˫O]-=+2]Ě毽 mF"ng>[j])؆ rҡ>~^L,Z )Br8*؄޳%FT7|ID`?+&ָ7_Bv =U}?R/Z2bk #K! h/"?"/81ލTUT29/ócRAY7JY]R}F=[n|qKgTT>hb?i|.}/$@uT5Q48' O. `Ѿ~#rߴ?BaS yΊbq;B@sdO2?}뤢!9ADTq%n #$q~@u}wˀ2dEt:z+.E~ۅ 9S|mpg"iApp+k׏rnկfaEnE훿+K]60㔬wؐʴCdv ']I KRq"攗?z=*_mb%T((U8|P婬ro }t Q׼3L`]k]vuxkA{.2't=hgm}nvڶ76o^ab m\%M`[t%{hd6K` rwu\<n:|^@8BE=!bEiFfz ٯ\Kg˄TYe޲djq6`ڲe o#;MdS=^smW9bj,ZoQ Hx(! oLIj9x+Qih/E~56= $_3 )S*ʼg8Dp {l[uc$`'7/{)жA-;cZVu;{&6-G[9bX߯K{9FgHA+31qƎi:tʻC9 q['VXutr3׋מF! |]-(ǨYc47Kp|\uD?ʡ&Pu}/t;e]5;oVZg4Dg`T3Y'h<1ےaz`Ȝ#n>"!g[Z-to zTr1#ũ6m1Lр1/#2@n^GZ 1[}x̏l꙼ [ N|]+0=-<,q&󳊴2XjlsRߔo#Km3`V7>rҦFHN3LT-'.$A C<퇻iEC}}K]L 9A!C 6 M|4$*@S#>= v&ۛWZecf,u w\WKNr(j﴿He^ivভmA@B?=~sgS(+[T-xpc1 ~ֲjFAFS3(5 R2}Ŋ}huF͕Y Au%Ҩ?bƆ0-r96Gz}ymZ# 6kh8,>0\Q⌵LAa&k=qXdh( uP&,HtZE Ww!2x#|=>\v+an>eʒ؅Ei1&%u,[Q}λ<@Xdb Gv8sp7UIN8dK9@8D`+_D@2m8_1Pc/09M-P,qH#ᘆ+rd{*q~K·)1csW"CTi7 LGi>FLF Iݨ: qĭONĂƙnKKȼnwsvK G /1Hi ܌xy1z,&Qo֑3'$L2]E(ugZ!¿Q”}TOk:x:|"ft~՚(vQ` Zw]?I8%' ESv™ټv!Lþ/t&2Ĥ]?,]k mơ@tOәs.k&K@mV׬71^`L %%?Zԣ>9#/ok=.Mq~w3ۈvSJH"rήJ#0"a"l/z.orQ lWDT0csߠZZqxY`48QI~G=A}ijadʅF9͑6ecP ~ 窍Wpܷ"6FB}%1g&F{k`I jG-Af~SAcH3<15 So=Sfr,ړg=%QzYbן-)kRc_z9#s6|^"75ty^.:nĞp{z("$4k'W UMc'I>T?H藓zYv}*HirWMSg,Z3fNCV}5\?IIsLy։Ӭqf\tCݺZna^O lX\sM' pz7B(49›v\Xr.EpB>˳PiduwkD遟j,F H&eeDI%FS Osĭ]^#-u#Y]=ʝ e|4ŏҳc̱p&۾E)SgܮL S~1#\B +e-X`&jhE% 슂mi-JQá-J }f`wpvխ-%Dsf!(S`ԇǴ3LxF3dL(Oh\?ϥCc2"n໎g8m>{|O h0 endstream endobj 123 0 obj << /Length1 1630 /Length2 14895 /Length3 0 /Length 15739 /Filter /FlateDecode >> stream xڭeTm[pwwwwwwgp]{p wi{icz][}5*ꌢf@)G+#+ @EAɑWQ hDw8$L]|m@h`c"Pm]4jڴ `-#]l@@{G' /q:p,mqe]Y%i&@:Tm 6@ ` `5X.Sotvqq qX9\`2wzK rrvL7jmOnf_O GsZpz qq7/Ϳe؀3/?>SNN^F;?jqu[2!i7 ]Y:XYCom@D-dZ"0+9M ?c(BzO=Wh)7{{%S 7Ș @ϡ7uŘ:{6?߀ɺ(/5,L,qZظ[,M_&lo߱YYXM a,k~fQEqyŁQ"jx9uh?`=ތ\<F6ֿoAlhl 7 JFdh꨻,nPc6wsvKo]w@O99mFvk=N贄`?+hSYFqa@cFo[](S,Gx?=u_Зvm0٨ )L;jIQ l3#m{a&ŃyzcDV3Xm:4pFK\Z>% ^8̖C3 _lmQ[~Oo$gҢɏf]8Q] ryx8|?Tw%f*N(~lfA$RgbH=1oZF^4eSADڮ&+?DJf~S4>{rB~^ ~{[w*8|SSwi fvDiP3B=-ryv 9S@J~yi *5aơ .ZN*`*V;T [ыb2 (vp 5\=U| ?$egK1c7F&Ѐ-=йj)*@$H|B0B-AQ^EZޒR8bVv%#h+Ŧ6m-wzәZz,oq*q>de~.n!%wabyۨ 1iK0>WIin A`1Z\0@P׊5Z%`5Pap# /ȃ2CrT{,~[;mZϤ2f7sSvP/% $GgE㌴m=z"o${~L~6Ff=sձ 4d({&I]) 0H/~}FLAV]F7덞aF:,x1SYJ]ILkK%z"DQ$laqd2aĀfPWKH{G2$l}$ Dܜꃂ27RM6 H Y--pxXpy|Bw *CŐ&:z 6aV"Kb"\Fipp!Z`G7 }k_ȘI8[J3Drg%<şBv#w4U"D]JD`.[mP_&!Dw) aD=C}?asHw W ROT+149]u{:z McqU×f8z:{P |WFoMrvAT%I.b? rë2Υv?KsUy_8DR$9꿘L Iޯ=gBL̈́]^<\ vOt-ISzt n7 PI.|#7aSɱBJO[qسO< ^Y]S7 Bם ^=qPIO"MNI1TSg|i]4*'y4ݢq*D#|t1G4Uҽkl_I)Xo'H3ӜJ Q9hn1?-X`o\x_}l(Uln{s-l;Δ8|\ {UD t"@@[.uBoV<2%,/SCi\TGA%0ޟP}3׻ᅄncJ)3RԒ8oR@$:oF~f#3v;j'FQ>; 8wryFYnlN綍'S睺+}GB3 \/TYeIjpg+F8zz/Ri>.1 ~ %[/D'Wze.ķ {wM" G=3j F`֜PŽA, \>K-S|9EcFM`lI54M`&}pU3@dߴKR{u1e 7ιm819*5|]Q.EneqMڷTo0kM̝$ nb쨎8ma0Kq:<>CdW:Z#@GlU"L_j^9=L*E-j! 3{ ym ':fɩ5d Ž+Tx<`ۖpï2FgY;>bb/ޤ0?o0W[аa!4Q {[C~r"GUM7:>p̴-xf0\z _yP@(Ňif"hy* iG}2F ]7=EQ. I<1k)XlM88QUG!_Gupe>=ҿ(}f)OfֲnRm GePr1Y`Hv({W1iP 0I2Ù-0nh~o)-k@2Q[ "ĎG}l/w >h_2tlȞQ(P_},Ā+xALj*1dF>܉Y5RެfEos[:bxIXo !g}U 'JYp 63r(}~%qh{$F|&jNN&bcGyoJ:'YDvY4YrlN0Ũk94c)3Y?1[.=MǻJ緓m*D%nF:&Cx`l4qwcǞ_|_N=u$z`JD"1gMOM̡%`upIJlwR#EL]F{]3-E0M{`\[R <(_jrknҚ^"Ɗu[g%RnOz}N"㵴X>a!RNMn4㒱ϥxY+tor@G? `_z8K_=+ eV:i,0}0$LMDeء!E!aTRMS*5D},ݪ|AG$&Lg|7ӫM޻̔g^I ֤7&]+c?\aKiTJ'wPSm<\?Xf.\"%hŽL|w&H^ַv^O`)}aj}HwbukXjɹ̜싏1M#~\֔XK&׆J*sjx*؊򭙼OZ78~Q#ܦߴ[iex{_kh!kG7x.,+qk\x@PfZ,(n֣ƴ2)…/l&Zp3^d2mp,׉ ezd}+nD<>ˎ4ڗ,4./m3 李vw18KWOx£<ve)_s@h_BNvpx˷#1˲m% iZI'nW"3O]t. 0^ P%Sk'aJǷՠb0fl 2wR_Vf֟b  9Jg};UFB963y, ŕEt&\,ժD֧g?}WIA2YqkWȓL >2,23#*EUx,4"ebLj`. 58 \'G58I/cv٪$ Wh;MqV4O% [؞9ҼJt?r7+N ݚQ,Uc12k|OQ={6ðe}tgR/86 u!hсɔ vnPθ (H<8I莖$ 9i4 !>oR+2ۆ?GD`٣b! 'kN]ɿA۳TdƒΥ۳f9.\fg+8"Lkr‚V*D,G~jy_`jH m$Pc VhF脲>$(ˍɯ\AC +z"R Ly1h(YdW|&wR찷 XH48Q׬jk6 mA颦(!@ձ<|րEځA2SəEƪRDxY=h@"̣͎ϸ-HUNYhF:}At*1:rJ< JaER`^ +azSmT&a8خH?KLVU dkjLcrnv(v]Kքt0 %c?2*ER@Smz1Q(~߉A7a_ށq$<@<*d պaXO`>Y?4i6R/3.B*4DY4эr6 'sB)@ۈÑfp@Se nn}c- ,̉sgP澚荸~zQ=5:w.+n't5 E~,2('}ph,~`s?|of:5EDNY9<[Rw)(VNɷ#Aa}:(=sȲ/ha@/&P ]{>Qc>8N/*CUfA[-20Q}F&MX~b>(D3 Ʌl/eJxePF%\ e}ޠocSlnŀ?/[o"_ӅV;Mݍ\5MUR`Tvt#.E麃㍉qH_" -䳑cǠ]7%Cd.FŪ.CqJp%yIp}XSdeL!܉oӘ[_sZ#pag ׿Xϔ`o ȏn BG1/aJ%J9pRZNtvmķtNBk9ڭb5-}E6B*Aں&l.k"GbwRtZ8̉e1Cg;!tqh+aWXK+/4Z$Ad/YwʅYPL?F:hJYNN0an2(zG#_!æ\JT1ػNDp49X}4 C$8÷胠mtS]Zhit31{^;ŋ7FȒ2ݖ9&o>οӣ]*]yZfb>w7S˸?;>lۣ3 á*ˀĦ&>ґE3Xu6ht`m{!擽,])0VuE+,KFsp &e} -,OQ`ABͺU9^.,.ьVu H&s $65G:)n]F͙Lu@Jn:EĝU.LCe倒l"/i'~&*H湺lלt3 YKA`D0t{ xG#>ҥ35^,TEk9ZXxl/t+F0>)m#pO##3Kh7Z$){ā 1k3߉!6;-PhSu{kwKCgQWG 2OO]Uc6]:%jfȑ%,n{\cQ&g-!~e02]ZF*88n\$ֲ 5&{n; BٔN[xZF̶m7bՄKiUyj S]<+;Vg6+iڋSasq7M@V+j{ZUHsqQt!Xn6q~p|#Hs>[<Ljrn5hH-V|$*\>J~dfg8mz\wY|AǖN'- r*ꮤݤ)#29BAr(lZ+%/Y롟Ց{%lK̅K_k*{2֥ aGWʆsNAD2 CA&&kB!mܓV/Զ2qxVRBQ"r:C]rkcf|'A̭tChSwyO IܲjPĻ\`\$ޕR76:'.inlUvUu!e\';: DrÝ ,FIi={hx,Mҵ]uYvYj5iwh;2tLtЭxY7^ _P} ]FL]RUo<P8:a;d'dc_ѥ)5UY+o1p1pz8PmRj(τQ]uU9Bc'Yx] x1y}X`գjk8݂@qaٱE=˺eQ= hg ·V 6v`: ڕ5; WBPf=Q1<._7`HLYt#!K$rnO=S )%HzV CdI a:2Z٢ )A^׬_>g J,_,lh4HmhV9=n6>ېx\&-$jI^10H*>h{l+Ti|'8!tmyw0Wa ) j%g(1 Wz𑥡wZRg2V=u>z3+(e_cfzuǿU˙SǃdZ6QKéF=` sc*U8Dd)fS?1:L+^,I# ^ge4Jܽ_.4jL nj#&:vz4\0æٖ Dނw#2:a8pRΨ O*g+]D-# ZIn-`LþMcR ـ+= -ɳ쟒!@ǝ#B뽤ců䕒ϻQm)D7>-"G= dHmF/QH:N(G_xT~ a 8965pJv_mZ:E?5,.ÎyDåMT*6;0?CG;/AS \1u|IdQå5z } ,|"vJ;}"!L?.|N_OzˠhqIZg6 T,,v\H?Ix5*{+8.zg~vkFۋ\eÃpNO)cf<,W?>V+iO|{dᙻ{ꃭÚ20~Hp kuK|%p6dwQxH) }]dCy1`U#{'4 X `(TQ_@vA @Ƃn/">L?"T)">q+}%y%6ofDr 7:[r’*Z`ȅsBblUg[W6*?&oL1q"ߡ;gzeSĔ|~؋lc5Y$î \ll͏o7NMC{UB:|uq(e^p#P.洫R ۻܻD 8m-MxKhG`*NǪXms 2rpAN @śj"LZw<z S'cc9(;XoLr}$XHn"Л)n.hJ79LflQQ=\)~NMKo?؏iɡA(|l+k>m[5es1CEp?L-4R!q?Xd+- d~-٪ Ud1mF3؈ZpK2;dii@!\+nZ(`ۯb ^`ewKSѐ*"j(:^sC6Uybu͗ɳ)znF3 &'UHKYDW+L&'>5iY-˸89;ӡF?}5 Z5 jgD7rᓯ-kh{D"_'ܗeAkuI5~e†ycISA.BpKµw An"OFcrxQKKQ'vc'Yw -l.W퟽ |v3cw#s2TaĚ`T՚`9ю6$l5['˃ָp~hLKhIoz:32N4H~9(!(\cRZE^.\UJHBJ/@M,`|آ QXqI2JD.*H9 y~@zAm)2>BR;%۱xХ!c4TCM@JI ޝLrU7ڬ>횪TV(Ae*$BzMVO91528 \C-oIzn"%^΋g| IRu1"Q5^8Gjw]͆::)#B3XwdvE"VY<j}#=EFfÌEU0{ tD7 r:ْpܲGⓌ6؝gSQap*9",i8'ENN5Oȯ&A0!itz}Lݪ]a<"ֺ{E+ƓGjmɞs# @?6*c7g To*)ǚ/7O\|) |No4)V#ҎIc)~R*Iha5;aY3@gA3[Z> stream xڭWgTݖҥHJH.$@ $! QW"U:"ERTA ;뛙?3W޳]}Zcl& A:A0PDL`p˜"=¦P/.Eͭ0$B, eeeɸHYZ sAxpP8E`qgG3(uap(@6O E@ 8  ``(8#_~qb pnP_0h04`w83OB(4wȌ,\Tc ĺcc`8t݄ ^Khp(C`X/w,'(à ?\l pWB4 ;_Pp?? EȀ⸘`,. A&{VtHP/;  3ÏKA"~ԙLŅTo"E<{;n _;[2 gߋB7 y%t2],U NaYɻb0 1ag׷?v PZ  3w " 'ٟD54T %+l PZ/cX`PPƳ4DByMqd_gC ؊q~`7M =HfX~`/4'u? ɦ'`ptl%cNWmG1ƼeH58lś"r~[__1y[Sy8_4~ }PDm}`񚍴&^] 6KIpz uz~^G2k'icowWg>QVq Ƈ)[w~%љ l<&ǟ|6%:`˕*ʄSXD%}CzMnOI|VKsϜFMhqH-\S8iѹ/v:~␌d2UJeHoIJãfl;{rU]0BϳCO1kgŒ+ , j%ne+Ŷм]8c~B3Q{[.Z7 ACm4MPQeǡZW$~5]:w^*>LE5V6jn5I-5J<[&$ E^je3wJZ^.bM +j|MsI3M8` K}rQQ<ܨU@oܜrz_^mu)#vtܐ7qljk{2>RIko‘A'$Ԁ2Z^?P\YjS]hQ.A(c*}#o0MϗxƀzC+j;'tD$`S&+&*\޾9J'[~eW!q@$U~ͺ( *}3)Q]-i"ʉX{_l<;`}Ucɏ✩1F~uьzvwEJe לUݎy_[;jG۲@h.bz2`d*zyWĪOpH`ύh&A2ł @iRPFZ\/3:|~6=pvn+ 703Tp<)4H0$Z*ȗ&?ԃf#E YP#Ҽ 0դÓQrWR+v{ĚKthRnL<mOW$ٶR!N{}ʤR#F+_3-}Cg~d^b\.ҩËnl0N~@88z;\g3-C^af'<.S -[-g]F="=Dꎦ0<|G>bIV2voַ.MC 5y+zS|%,O<$__d7*ӣ9t%dzq;>{w?kNS쇔>鄟⡹{Nv{5d`Q񥗅-`ࣉ䓼$щ-`~&mf@n/Wb1h*i:oۤTtg F'dDZX{ { HՓ+ﻛ\ 3ڮK~x7H^A+TOM~#w (EѾ"Kb: q'l?][1 СW^,`[Q42mk@~ܳsnY/"m=UJBZFĬD<̅x$RfBϗ:k2,.}^#~pNf[8|pIC_\Y3K~~$8.3KvQUpoWSpcg-G~A91**WIǘTtY([`ឞUƝ3Wsj=|Aܨ؉m@(i"2>|!}mMǴ~ 渡$~x|A+u5a͉F+Cv^|d<`,}+urɹڥnFi=-yl(J\h5X!_Y @vJ16-+Wj) kהMyH*B >ߢl@l37.D+T3M(T'w8I0Cv$A֎ez>%7_7 es|ݕ)}uĵ"bȲQn|<ӾBRZ{o0 >uyȟ~;X7)c*u?c.:$z59by.lK|ɵ`lzۉxنWe l TUjAR*3|Rhjej $ػWЄ׼&p`lbqmMIMH>VoewZ'[ǂ6nDM4jr΋%Wڥd)9Znu^lg`.uĆZfMg Q;n.-o uB'A eM"ߥnq9>~s~5˻,(R#~T ihl|gkL4R0zks_ C ҏ^ŋK)ݖ=GV5$|,rg̔$9sw'5x{ohg-AF,s61 ^T[j,&]?kG1ڹ(N<rm x@#֚ɬTQdZ C2r7 /@ 9#.`;pN@f )(ݗU%E_>a+z둪GY7%)##zhZ+۰ߗ՘*47w^Qm; ᡡ/f=DN|Mls,Id(A6XDQЈgoA&m`c:[OUABw ʼnHR@Y!H7s&R3G͇񛧒 = &Kw ~+tUe.L8N| 1 Qj72e(%eД.Gx%3zIۼ<2<>er<vq?usY : KVeXZ)Nn6!kJKݐolEU4em(nIu= -`-~=caѳ8SApOZ߅-ޤj ڌ?xxdFطo`ܻ.xrSQ=OFt./IUˋ=ZuLLY|^WʍOKG錆c rR㴭;?lڧcf)^([:Xڳ yKMgBIV]MoQ&\pxA¶%Y%u%.hoRmf'yr;\r?WG[5``>حL~ޮPzffJ%|0OƌݦFJt%M^h>U­2u:>(*x W &|WQCzqZ=|V޵A_MyMۓMK0~#.aʿG.~.np- ~4Oq2c[@2zx &Ov$֧jqY]PX`KOn #Ǚj## )LNǚ &zYAS4xc"-TI٦1ԋ*7 $QF@^),wg"F E)^]LuT!lU!nR%9=OV/Ř%ߑ(qӤ/k*׏Rs|' 2.3ګSNɸޞ. SDW:i]:KB?+S'#|-4:# к܇R., oʞ^#e[<<(C] ;+wzQ1FĨW _ f'8ݎR'?0TIZk0}CC6W+Z{Y1lq~2HB t : ”ETq [,,v`͎&n޺д%No69D02)!0/Fh ;/JD["mŤ9xn ݡ79eBiqPi"`[Og~VeV|b@ l>1۝E#)M)XS՝S:9e͟ 9P;q@b ~ȓkv5ɨ%^:etQx| 0 gt0^ ) u\M{Ἱ8702!A]9(=Q5nlpK'{\Ӳwў -~\K J4.iUlD8ċ}=e=mJJ %O^%l}~'-D(N$WeôJƘ )>?ƛ`U[!4,?&,DG%崘^YYl_X=.|^Zi{@Kʉw82>KARvi&?wigJU6A%[Fxs&&DOiYymi܁xy+x󉗥lʑ N" `OoH~\I@ k#ӳ!+>9`1}H ham y~ zNj& c[,&jaW0hDÅYˊG@r{c4]w~pMS]n Pf 5F\x2<ql٭KVch)DmۗEgkvկդ@Fޱ/5v1d|,,PgUSB븡FӋDjk]3E|6}kit_>;k܌`M$6!8k^OּumW[n$ϫ4駱t-xRydsB7Rt*uV*ZZ$oA^pԣ2iVzIv5i#T{RnA8Y>4FHSf]PnDϯr>W+Lah"1lumub:ukZsuA/ 5 fa?:@9gƏxٿzkEv0Ts--_i~#^Ioq#UBʣᓙ!~]lk-`j-$ז$;XfKwMBm۪OnF\}p8D|R+ sw(-:W֯1{> stream xڭWeT-V(RHB!$CqZJ/n@aiv<3>9ae㑳YaP/@hׅ9jyt.*{* " 0 `@P .. 9y8Cl]CNnvXyyCl`#x?`q䵴U4J%0ЄPP8`s8u`Pk\rpw a`w7vv8E<@A.ֿ x {p|ȴap qBj+(U'y0OkwK@;` ;9=r?99C@mUc3lhοNNaY;>!rB8|Ejevq vsAg5 i)7y}"$o'5/N t| a]P^6@gP# !_)䠶 <}W!pyPk ~> ӷ^A/ {OEYXYٶg&C ?=xD<9 i D8C|u2s(f{@8;?(g|GٙG"ʽg^0hZ} Dy-h3?k?)˥/(.&[%{@_o zWXlVI o>[y=U ߋ$ s)&_9SП,hx]Q߹3 66];@9rzLK?m*AzE|2"PwS`!H"]3]?j҄wYsw uj7 yknE#XBDoX=s.;?ӭҳޯ]/*_:U%m'yG2cޣRw^*OcG~4{Qd:jz ^Kk1`WzTҸlV,?f.u%!+8ʾēk \S%ƨ?kU - XС% X K(/tP(QX x;w8aIXM|'=l)^ԹZpS\'ZߊFn۳O;wG/dK&*TLuqhy4PL]+b%WRH-3 zr/FJ,V`'nE|C/ a:0Le׸ݓ E{ٍKe̶r},gKk_Cª7aFɔ//ZUK"$f $}=Lџ|I@.LiZ =M^z\yTnrp[ U'3RGk>f@ի}C3k4帟,kaEa=Q>X 4kI*ڦ"ώJӀ)n}{yJVPBWavwKn,͌k%5 wƅuCvno6EGYzJMdܵ$`#Ve%1f͌q9SڦqUU5 Iy3W` G 8Dd6;˛j,=`|X ipvđF2Q#;K٪}ëCX&Dt1r᫧ocDt3$F'*OoH0Qn04bŲ.D#߂=fSs[Cqzк&\Nuyt 'S;ŤW$>q7ZH[fsgJ-~D+ǏdhnBxX.$/cg#.Dћf=<-ѐ}T=y !Tߡp{C}p};lXuSƁ^O"{;f꽼vzcs*3xxQpܒW&W^= Z{Z vP2C{@^MTH QJcɫ4هךy_*[/QM=8̳yJ(y!Kم7DNw$?P/qd^L=ʓ `px0^]S})vO'EaQU/M}$&i|zֆC,|O"44d\̙>bs"jlhCm}_o㶼N \H}HG); up j[y%8ʓoV,;X)qV{Pv?Cf^'RH$ג>ƇŶ) WO+BO+ Tf4NVtɆ_!4.nb0䬻Fֺb!v(Bo^h lu%̭1uޱVn*gljTa[errCިhx/.xyeM~!·{02T8YbfZeB2pᚷsFrf?ݚ@X1{xxhͪ2 &뻂{An'v~"/I!40k|;vRfξdkT*6r+kW~k(9#wō| n|$13[)uʁLI]~Fpe܅GAFjkZ\Gʟs;R[PXecn' C6Vy"s4ʥ)L) 7b~}3ѽ^*:fdd4 K=g$yt̻Xe-7XvWI4-pg0[*h+GO̴B_H n$ S2$W:.+u%x!rh`ڥ`J݄1AVjF 9qCH~btaƕ%eZ0}Zk>L-1WVJ9Ɣ|K[nӤWZ4仼Bt*z$8_W-QPZ)j(g/*"`m2e0j &}L\<*(@,L)E`=L3y0u0~gۦ4)Ǿ'Gp*pG:j?oKZi{l/^Dm(NgUyk7>?vI&10vATGJ>J7KiHD  ww D% OPV%Z, }e`iE|n@<)ydKߜ<d_߳)83 k7|R^-&7t3Nz)jwtnsEd]cY3B`4Š97[踸~Zř6׃52z,Xb*@O˥BP_ʒgjXAD{ &e/'o% ϑoyQF*;]h3驧x (8ӫ&裾 O ƼDz B|܉tM}XЄ()l/S.+zJ 1J{ELĨۊ@NT5-k"Ug }p& X{ޫbֻ(fA I~o?T'/asɲgx``P4'ZЄ1.`۹ l2)N.T4FWF%Wz1Us$L=ƽ%6[jWT) t>epN.C*ԇܸ|?:#w7L&̓?3:Z/Zf?IQ͊;A /P'!:SRkدmvwb`w>vZ꡷r xD+@Rdћ&>SW"r|hA,}Z"v!k3= YTsP)L2mxAaB81n0{湲|IMTCRFbAa 7cYg/3r-"3vӝO_Z?C"yڜK+o-]6vpǝSR4E2'Y*XlΎ ]A9`ǟйn˜J0G7=C޷qr7("YHu ՟DF$^qzI0zY{'C׸ }Bwǁ`p5J49GB>E 9?&SX&tp^; W؇%zA77Ni%#p~We~32T!%e&0c)ͺ/+Z_Z"eŁh״Gرq~̇:4 0r4 Ek>/ƳLnY,"ݑIq/7f_-]Б $bophٹ"X8,J0iܮ -Ҳ㸖 ;+j={AIM)UQN-fO k0¬ڸOzR{]H_0'3`mKeA:|>)fl0nS% [,7EHNDU]0?Q=Wdo 7+Ke3^Ӓ b-BłӌF/j-|V*:PN5}:-Uf:!=+T ε"/-\G?򪪏WZ']תl21_)y߈n7ӿXdkS38{O.npc QV@xysu‘u~UZPx8$e%E]x ACdx1<#Sf)ܽYkH ]m{Y_U~RnU-U*pUeW(DI =sRWq?&N){8iU̖O1y-yĚ yyeׯ)",+czȣև?vk_\C#|s$OUsX9c 1U*b+33R5W|Gjק_0aG43BJFR³,^ǥ#uk};^ٙɄҜGdHJv9.EBGCyl_*)k0Er:D UW>wn̒ޱ7Xʠ`gf(|V8%4%A*r+jU[ 35x.WVB00FWoOmN"qj8`ВP*f5@XCY ŨYR Wy*GnMbm2 hv_Rnx0v-ZƼf1Q$2ϔyL;i7)7S1/}p9eb+)6 V/\"iua7e 8uR9懞h|H4w491ƫ^UԪK'v_33 W7eR"벷Tl}SH3'[%f =XnrSkZW􀆷ESō N!Dn|UT&V}WΒp9u>BkEϮHlRi RΐFkEܗ8 ?'iXrdKsee_#q}? u ֕B X<8Y*<;L9nNvceA+ZxA65s:7/U!'60ڰQ}cYe7¢BM\6|.ޞ_t$h2$FҮɒ+} @lm׭Jcx9\> p߯_͠x)X A \$Ģ75.ZO8 e` jr\ܰi2΃usS 㧥  /y~3rYK*H旇O̍[Vbܿ ʂ'U7?T"oJJwe5Ֆs+F ` ZTp&:cbܽ8$AqJ+>FL!k yb}4!=]{XY=N;lQzSCPd89'_ʹ?MLnmg?yz5N;4 Q$W+vFTZ}ZsDwFVN_Z`.~C$y\~IV$wuve5)fٜf%}Bv&euȈz0.$f-j!;a!A~BV_vM\m|rxBsֵ~.^Danj~d@ߵq,&݃gAģ(#,k]JU+B3lJeU݁ 1OFgtIf \u;=|JUĞe߃X"5xR +V)'i ",ƛd_^ѥX82ñO9ObUtQ@.:| f&,'})mR*\m0ޞ٘gv[ԽT+Ê>,j c7Kڊu9M^WQP$N knw> stream x[kSH_I~RS &d$CRԖ06c<-ɖGlnMȒZ9-L 2X`^2)XLj&b 'd)ɔp-of[|g0̆q@q_4ҹ8rGr4QAAcno?gۑ~\G~kҿBB U}B$9 :I|dKjxeMt2>(|1"A:k)y9];\d zi}$aB=cBm`)NmWe&Y0btBYv#(9hȄ2b|>ʩMdr?0 ge[7GD"Ko(ыZrmši5^㯋h8@>ge6w.:wEBQy&^K~q.*)+y yhSبhwEAcct-%֥ftf5S+Q*w&+g_>H"K?qy)nY_$#G%>*q#2W1C)Ojny&+|c4ҫ;:)|V\"9KTc7]l!"3 m~! `E".R, * |.=9l]h#J0VO"bA^=W"Yt^ EyTSzj˄I~H:V@)erR>d؇j?hnXO҃C$KEBOO* Uljn^Ng9uqO+ ")B|֌kR"D¸7&/VlUlbtgVF&F#[FyL,5q(W1TF JWhU$C{8w>OO).pH (f= ?GP%xů~ȯ0k!.聏>A?w jpe݋Aoc> ; 5ZgË>3">ʫVaxo;K+w_!g4FZξթZ+7{hٛI3].CX 8PɒDʔx;eLI#Yf);IҏHJ_~9"=ή!o(S+He# z[@ʩ>~ ZXҕ>}8-z\V:}no{<}3[hSJ97-fQkz)Z:q6*6/A_~ʬȦl2brƞZ+Un{`oI`WJ|=[K2]!0uvP^>*PguȰyk & ~VIce'&ʿͯkjo/v1ICl je._m%,R^9ڳ&Դn+Klf'J63iu3;N7tNR_ Ы{U~1>+*Vs ~^8pm}snjlZCt3pwKtV$2U̧~ƂF$ ,YhP!q\Ɛa42432e4WRtMFWI*Jf}|&[rR5* qkkBΧ,u< -iZGc T?l7T?v/ǝclƛffn`nͷ:9ݔ7bL/t~_hZF3ݬ6q]Wb fvM{VS6PUL_|S&u覤G?[uFZjWoB{nJΙ݀n62MՖg_EwjR lm&TU5MxOMf.]B> endstream endobj 138 0 obj << /Author(Dummy Auth\366r)/Title(The ThreeKPlusOne Package)/Subject()/Creator(LaTeX with hyperref package / GAPDoc)/Producer(pdfTeX-1.40.18)/Keywords() /CreationDate (D:20200811140808+02'00') /ModDate (D:20200811140808+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) kpathsea version 6.2.3) >> endobj 129 0 obj << /Type /ObjStm /N 15 /First 114 /Length 689 /Filter /FlateDecode >> stream x}Tn0 }WX7$~زth7tP n";aQ9!yHQPN  B :4-A@$(R\@G*pπ ?$OPs\wwAB §ëkL Lz$~w-K?a J4$3[| J#yU[V&A:yӅ΋U΋ h_pZP OHO,Q5)m6/Ϸ1RO3ڊDa8h]_̆;hRS;oiRNixOCNhĀD_cՔ+vծknoQv#2Y`:!hk=Թq5E1 l 2#1ӝڮ\^^ ڎՆazvB=:ǐvMGKsbX2ӎ?t=ʻUw]OSi;N4sٶ=¦U~wtc?k~,,m7/( endstream endobj 139 0 obj << /Type /XRef /Index [0 140] /Size 140 /W [1 3 1] /Root 137 0 R /Info 138 0 R /ID [<1AE98C68F731BDC95B894796B4E385B5> <1AE98C68F731BDC95B894796B4E385B5>] /Length 341 /Filter /FlateDecode >> stream x%ҵNEAE.zqwwwww- !![PQj'zJBC/v{N1""?NĉJAgTDBgQa&lj@gv-  IE컉#؇c4HV+R!2! !!]}؍\ȃ؄B(b(:(PkP{ P -Pi6B3C7$ڴ:az֠aa!#0 cq=?Rk52d5r2j5rQy|UmOS}_y/EշU%uKeuSuV.(ϮyƳ*UgU< nV~3 endstream endobj startxref 170131 %%EOF GAPDoc-1.6.4/3k+1/manual.six0000644000175100017510000000230213714505050014347 0ustar luebeckldfm#SIXFORMAT GapDocGAP HELPBOOKINFOSIXTMP := rec( encoding := "UTF-8", bookname := "ThreeKPlusOne", entries := [ [ "Title page", ".", [ 0, 0, 0 ], 1, 1, "title page", "X7D2C85EC87DD46E5" ], [ "Copyright", ".-1", [ 0, 0, 1 ], 17, 2, "copyright", "X81488B807F2A1CF1" ] , [ "Table of Contents", ".-2", [ 0, 0, 2 ], 26, 3, "table of contents", "X8537FEB07AF2BEC8" ], [ "\033[1X\033[33X\033[0;-2YThe \033[22X3k+1\033[122X\033[101X\027\033[1X\\ 027 Problem\033[133X\033[101X", "1", [ 1, 0, 0 ], 1, 4, "the 3k+1 problem", "X8769FB038733F6F4" ], [ "\033[1X\033[33X\033[0;-2YTheory\033[133X\033[101X", "1.1", [ 1, 1, 0 ], 4, 4, "theory", "X8729B87B848E3F89" ], [ "\033[1X\033[33X\033[0;-2YProgram\033[133X\033[101X", "1.2", [ 1, 2, 0 ], 20, 4, "program", "X7A4605C07A94C9F6" ], [ "Bibliography", "bib", [ "Bib", 0, 0 ], 1, 5, "bibliography", "X7A6F98FD85F02BFE" ], [ "References", "bib", [ "Bib", 0, 0 ], 1, 5, "references", "X7A6F98FD85F02BFE" ], [ "Index", "ind", [ "Ind", 0, 0 ], 1, 6, "index", "X83A0356F839C696F" ], [ "\033[2XThreeKPlusOneSequence\033[102X", "1.2-1", [ 1, 2, 1 ], 25, 4, "threekplusonesequence", "X7B1A31B8870EA092" ] ] ); GAPDoc-1.6.4/3k+1/chap0.html0000644000175100017510000000606113714505050014234 0ustar luebeckldfm GAP (3k+1) - Contents

Goto Chapter: Top 1 Bib Ind

The ThreeKPlusOne Package

Version 42

Dummy Authör
Email: 3kplusone@dev.null

Copyright

© 2000 The Author.

You can do with this package what you want.

Really.

Goto Chapter: Top 1 Bib Ind

generated by GAPDoc2HTML

GAPDoc-1.6.4/3k+1/chap1.html0000644000175100017510000001176413714505050014243 0ustar luebeckldfm GAP (3k+1) - Chapter 1: The 3k+1 Problem
Goto Chapter: Top 1 Bib Ind

1 The 3k+1 Problem

1.1 Theory

Let k ∈ ℕ be a natural number. We consider the sequence n(i, k), i ∈ ℕ, with n(1, k) = k and else n(i+1, k) = n(i, k) / 2 if n(i, k) is even and n(i+1, k) = 3 n(i, k) + 1 if n(i, k) is odd.

It is not known whether for any natural number k ∈ ℕ there is an m ∈ ℕ with n(m, k) = 1.

ThreeKPlusOne provides the function ThreeKPlusOneSequence (1.2-1) to explore this for given n. If you really want to know something about this problem, see [Wir98] or http://www.ku.de/mgf/mathematik/lehrstuhlstatistik/team/dr-guenther-wirsching/ for more details (and forget this package).

1.2 Program

In this section we describe the main function of this package.

1.2-1 ThreeKPlusOneSequence
‣ ThreeKPlusOneSequence( k[, max] )( function )

This function computes for a natural number k the beginning of the sequence n(i, k) defined in section 1.1. The sequence stops at the first 1 or at n(max, k), if max is given.

gap> ThreeKPlusOneSequence(101);
"Sorry, not yet implemented. Wait for Version 84 of the package"
Goto Chapter: Top 1 Bib Ind

generated by GAPDoc2HTML

GAPDoc-1.6.4/3k+1/chapBib.html0000644000175100017510000000443413714505050014573 0ustar luebeckldfm GAP (3k+1) - References
Goto Chapter: Top 1 Bib Ind

References

[Wir98] Wirsching, G. J., The dynamical system generated by the 3n+1 function, Springer-Verlag, Lecture Notes in Mathematics, 1681, Berlin (1998), viii+158 pages.

Goto Chapter: Top 1 Bib Ind

generated by GAPDoc2HTML

GAPDoc-1.6.4/3k+1/chapInd.html0000644000175100017510000000346513714505050014614 0ustar luebeckldfm GAP (3k+1) - Index
Goto Chapter: Top 1 Bib Ind

Index

ThreeKPlusOneSequence 1.2-1

Goto Chapter: Top 1 Bib Ind

generated by GAPDoc2HTML

GAPDoc-1.6.4/3k+1/chap0_mj.html0000644000175100017510000000637613714505050014733 0ustar luebeckldfm GAP (3k+1) - Contents
Goto Chapter: Top 1 Bib Ind

The ThreeKPlusOne Package

Version 42

Dummy Authör
Email: 3kplusone@dev.null

Copyright

© 2000 The Author.

You can do with this package what you want.

Really.

Goto Chapter: Top 1 Bib Ind

generated by GAPDoc2HTML

GAPDoc-1.6.4/3k+1/chap1_mj.html0000644000175100017510000001237413714505050014727 0ustar luebeckldfm GAP (3k+1) - Chapter 1: The \(3k+1\) Problem
Goto Chapter: Top 1 Bib Ind

1 The \(3k+1\) Problem

1.1 Theory

Let \(k \in ℕ\) be a natural number. We consider the sequence \(n(i, k), i \in ℕ,\) with \(n(1, k) = k\) and else \(n(i+1, k) = n(i, k) / 2\) if \(n(i, k)\) is even and \(n(i+1, k) = 3 n(i, k) + 1\) if \(n(i, k)\) is odd.

It is not known whether for any natural number \(k \in ℕ\) there is an \(m \in ℕ\) with \(n(m, k) = 1\).

ThreeKPlusOne provides the function ThreeKPlusOneSequence (1.2-1) to explore this for given \(n\). If you really want to know something about this problem, see [Wir98] or http://www.ku.de/mgf/mathematik/lehrstuhlstatistik/team/dr-guenther-wirsching/ for more details (and forget this package).

1.2 Program

In this section we describe the main function of this package.

1.2-1 ThreeKPlusOneSequence
‣ ThreeKPlusOneSequence( k[, max] )( function )

This function computes for a natural number k the beginning of the sequence \(n(i, k)\) defined in section 1.1. The sequence stops at the first \(1\) or at \(n(\textit{max}, k)\), if max is given.

gap> ThreeKPlusOneSequence(101);
"Sorry, not yet implemented. Wait for Version 84 of the package"
Goto Chapter: Top 1 Bib Ind

generated by GAPDoc2HTML

GAPDoc-1.6.4/3k+1/chapBib_mj.html0000644000175100017510000000473513714505050015265 0ustar luebeckldfm GAP (3k+1) - References
Goto Chapter: Top 1 Bib Ind

References

[Wir98] Wirsching, G. J., The dynamical system generated by the \(3n+1\) function, Springer-Verlag, Lecture Notes in Mathematics, 1681, Berlin (1998), viii+158 pages.

Goto Chapter: Top 1 Bib Ind

generated by GAPDoc2HTML

GAPDoc-1.6.4/3k+1/chapInd_mj.html0000644000175100017510000000375713714505050015306 0ustar luebeckldfm GAP (3k+1) - Index
Goto Chapter: Top 1 Bib Ind

Index

ThreeKPlusOneSequence 1.2-1

Goto Chapter: Top 1 Bib Ind

generated by GAPDoc2HTML

GAPDoc-1.6.4/3k+1/toggless.js0000644000175100017510000000420513714505050014536 0ustar luebeckldfm/* toggless.js Frank Lübeck */ /* this file contains two functions: mergeSideTOCHooks: this changes div.ContSect elements to the class ContSectClosed and includes a hook to toggle between ContSectClosed and ContSectOpen. openclosetoc: this function does the toggling, the rest is done by CSS */ closedTOCMarker = "▶ "; openTOCMarker = "▼ "; noTOCMarker = " "; /* merge hooks into side toc for opening/closing subsections with openclosetoc */ function mergeSideTOCHooks() { var hlist = document.getElementsByTagName("div"); for (var i = 0; i < hlist.length; i++) { if (hlist[i].className == "ContSect") { var chlds = hlist[i].childNodes; var el = document.createElement("span"); var oncl = document.createAttribute("class"); oncl.nodeValue = "toctoggle"; el.setAttributeNode(oncl); var cont; if (chlds.length > 2) { var oncl = document.createAttribute("onclick"); oncl.nodeValue = "openclosetoc(event)"; el.setAttributeNode(oncl); cont = document.createTextNode(closedTOCMarker); } else { cont = document.createTextNode(noTOCMarker); } el.appendChild(cont); hlist[i].firstChild.insertBefore(el, hlist[i].firstChild.firstChild); hlist[i].className = "ContSectClosed"; } } } function openclosetoc (event) { /* first two steps to make it work in most browsers */ var evt=window.event || event; if (!evt.target) evt.target=evt.srcElement; var markClosed = document.createTextNode(closedTOCMarker); var markOpen = document.createTextNode(openTOCMarker); var par = evt.target.parentNode.parentNode; if (par.className == "ContSectOpen") { par.className = "ContSectClosed"; evt.target.replaceChild(markClosed, evt.target.firstChild); } else if (par.className == "ContSectClosed") { par.className = "ContSectOpen"; evt.target.replaceChild(markOpen, evt.target.firstChild); } } /* adjust jscontent which is called onload */ jscontentfuncs.push(mergeSideTOCHooks); GAPDoc-1.6.4/3k+1/toggless.css0000644000175100017510000000167213714505050014717 0ustar luebeckldfm/* toggless.css Frank Lübeck */ /* Using javascript we change all div.ContSect to div.ContSectOpen or div.ContSectClosed. This way the config for div.ContSect in manual.css is no longer relevant. Here we add the CSS for the new elements. */ /* This layout is based on an idea by Burkhard Höfling. */ div.ContSectClosed { text-align: left; margin-left: 1em; } div.ContSectOpen { text-align: left; margin-left: 1em; } div.ContSectOpen div.ContSSBlock { display: block; text-align: left; margin-left: 1em; } div.ContSectOpen div.ContSSBlock a { display: block; width: 100%; margin-left: 1em; } span.tocline a:hover { display: inline; background: #eeeeee; } span.ContSS a:hover { display: inline; background: #eeeeee; } span.toctoggle { font-size: 80%; display: inline-block; width: 1.2em; } span.toctoggle:hover { background-color: #aaaaaa; } GAPDoc-1.6.4/3k+1/times.css0000644000175100017510000000026113714505050014202 0ustar luebeckldfm/* times.css Frank Lübeck */ /* Change default CSS to use Times font. */ body { font-family: Times,Times New Roman,serif; } GAPDoc-1.6.4/3k+1/rainbow.js0000644000175100017510000000533613714505050014356 0ustar luebeckldfm function randchar(str) { var i = Math.floor(Math.random() * str.length); while (i == str.length) i = Math.floor(Math.random() * str.length); return str[i]; } hexdigits = "0123456789abcdef"; function randlight() { return randchar("cdef")+randchar(hexdigits)+ randchar("cdef")+randchar(hexdigits)+ randchar("cdef")+randchar(hexdigits) } function randdark() { return randchar("012345789")+randchar(hexdigits)+ randchar("012345789")+randchar(hexdigits)+ randchar("102345789")+randchar(hexdigits) } document.write('\n'); GAPDoc-1.6.4/3k+1/ragged.css0000644000175100017510000000023113714505050014307 0ustar luebeckldfm/* times.css Frank Lübeck */ /* Change default CSS to use Times font. */ body { text-align: left; } GAPDoc-1.6.4/3k+1/nocolorprompt.css0000644000175100017510000000031313714505050015774 0ustar luebeckldfm /* colors for ColorPrompt like examples */ span.GAPprompt { color: #000000; font-weight: normal; } span.GAPbrkprompt { color: #000000; font-weight: normal; } span.GAPinput { color: #000000; } GAPDoc-1.6.4/3k+1/manual.js0000644000175100017510000001003413714505050014161 0ustar luebeckldfm/* manual.js Frank Lübeck */ /* This file contains a few javascript functions which allow to switch between display styles for GAPDoc HTML manuals. If javascript is switched off in a browser or this file in not available in a manual directory, this is no problem. Users just cannot switch between several styles and don't see the corresponding button. A style with name mystyle can be added by providing two files (or only one of them). mystyle.js: Additional javascript code for the style, it is read in the HTML pages after this current file. The additional code may adjust the preprocessing function jscontent() with is called onload of a file. This is done by appending functions to jscontentfuncs (jscontentfuncs.push(newfunc);). Make sure, that your style is still usable without javascript. mystyle.css: CSS configuration, read after manual.css (so it can just reconfigure a few details, or overwrite everything). Then adjust chooser.html such that users can switch on and off mystyle. A user can change the preferred style permanently by using the [Style] link and choosing one. Or one can append '?GAPDocStyle=mystyle' to the URL when loading any file of the manual (so the style can be configured in the GAP user preferences). */ /* generic helper function */ function deleteCookie(nam) { document.cookie = nam+"=;Path=/;expires=Thu, 01 Jan 1970 00:00:00 GMT"; } /* read a value from a "nam1=val1;nam2=val2;..." string (e.g., the search part of an URL or a cookie */ function valueString(str,nam) { var cs = str.split(";"); for (var i=0; i < cs.length; i++) { var pos = cs[i].search(nam+"="); if (pos > -1) { pos = cs[i].indexOf("="); return cs[i].slice(pos+1); } } return 0; } /* when a non-default style is chosen via URL or a cookie, then the cookie is reset and the styles .js and .css files are read */ function overwriteStyle() { /* style in URL? */ var style = valueString(window.location.search, "GAPDocStyle"); /* otherwise check cookie */ if (style == 0) style = valueString(document.cookie, "GAPDocStyle"); if (style == 0) return; if (style == "default") deleteCookie("GAPDocStyle"); else { /* ok, we set the cookie for path "/" */ var path = "/"; /* or better like this ??? var here = window.location.pathname.split("/"); for (var i=0; i+3 < here.length; i++) path = path+"/"+here[i]; */ document.cookie = "GAPDocStyle="+style+";Path="+path; /* split into names of style files */ var stlist = style.split(","); /* read style's css and js files */ for (var i=0; i < stlist.length; i++) { document.writeln(''); document.writeln(''); } } } /* this adds a "[Style]" link next to the MathJax switcher */ function addStyleLink() { var line = document.getElementById("mathjaxlink"); var el = document.createElement("a"); var oncl = document.createAttribute("href"); var back = window.location.protocol+"//" if (window.location.protocol == "http:") { back = back+window.location.host; if (window.location.port != "") { back = back+":"+window.location.port; } } back = back+window.location.pathname; oncl.nodeValue = "chooser.html?BACK="+back; el.setAttributeNode(oncl); var cont = document.createTextNode(" [Style]"); el.appendChild(cont); line.appendChild(el); } var jscontentfuncs = new Array(); jscontentfuncs.push(addStyleLink); /* the default jscontent() only adds the [Style] link to the page */ function jscontent () { for (var i=0; i < jscontentfuncs.length; i++) jscontentfuncs[i](); } GAPDoc-1.6.4/3k+1/manual.css0000644000175100017510000001575413714505050014353 0ustar luebeckldfm/* manual.css Frank Lübeck */ /* This is the default CSS style sheet for GAPDoc HTML manuals. */ /* basic settings, fonts, sizes, colors, ... */ body { position: relative; background: #ffffff; color: #000000; width: 70%; margin: 0pt; padding: 15pt; font-family: Helvetica,Verdana,Arial,sans-serif; text-align: justify; } /* no side toc on title page, bib and index */ body.chap0 { width: 95%; } body.chapBib { width: 95%; } body.chapInd { width: 95%; } h1 { font-size: 200%; } h2 { font-size: 160%; } h3 { font-size: 160%; } h4 { font-size: 130%; } h5 { font-size: 100%; } p.foot { font-size: 60%; font-style: normal; } a:link { color: #00008e; text-decoration: none; } a:visited { color: #00008e; text-decoration: none; } a:active { color: #000000; text-decoration: none; } a:hover { background: #eeeeee; } pre { font-family: "Courier New",Courier,monospace; font-size: 100%; color:#111111; } tt,code { font-family: "Courier New",Courier,monospace; font-size: 110%; color: #000000; } var { } /* general alignment classes */ .pcenter { text-align: center; } .pleft { text-align: left; } .pright { text-align: right; } /* layout for the definitions of functions, variables, ... */ div.func { background: #e0e0e0; margin: 0pt 0pt; } /* general and special table settings */ table { border-collapse: collapse; margin-left: auto; margin-right: auto; } td, th { border-style: none; } table.func { padding: 0pt 1ex; margin-left: 1ex; margin-right: 1ex; background: transparent; /* line-height: 1.1; */ width: 100%; } table.func td.tdright { padding-right: 2ex; } /* Example elements (for old converted manuals, now in div+pre */ table.example { background: #efefef; border-style: none; border-width: 0pt; padding: 0px; width: 100% } table.example td { border-style: none; border-width: 0pt; padding: 0ex 1ex; } /* becomes ... */ div.example { background: #efefef; padding: 0ex 1ex; /* overflow-x: auto; */ overflow: auto; } /* Links to chapters in all files at top and bottom. */ /* If there are too many chapters then use 'display: none' here. */ div.chlinktop { background: #dddddd; border-style: solid; border-width: thin; margin: 2px; text-align: center; } div.chlinktop a { margin: 3px; } div.chlinktop a:hover { background: #ffffff; } div.chlinkbot { background: #dddddd; border-style: solid; border-width: thin; margin: 2px; text-align: center; /* width: 100%; */ } div.chlinkbot a { margin: 3px; } span.chlink1 { } /* and this is for the "Top", "Prev", "Next" links */ div.chlinkprevnexttop { background: #dddddd; border-style: solid; border-width: thin; text-align: center; margin: 2px; } div.chlinkprevnexttop a:hover { background: #ffffff; } div.chlinkprevnextbot { background: #dddddd; border-style: solid; border-width: thin; text-align: center; margin: 2px; } div.chlinkprevnextbot a:hover { background: #ffffff; } /* table of contents, initially don't display subsections */ div.ContSSBlock { display: none; } div.ContSSBlock br { display: none; } /* format in separate lines */ span.tocline { display: block; width: 100%; } div.ContSSBlock a { display: block; } /* this is for the main table of contents */ div.ContChap { } div.ContChap div.ContSect:hover div.ContSSBlock { display: block; position: absolute; background: #eeeeee; border-style: solid; border-width: 1px 4px 4px 1px; border-color: #666666; padding-left: 0.5ex; color: #000000; left: 20%; width: 40%; z-index: 10000; } div.ContSSBlock a:hover { background: #ffffff; } /* and here for the side menu of contents in the chapter files */ div.ChapSects { } div.ChapSects a:hover { background: #eeeeee; } div.ChapSects a:hover { display: block; width: 100%; background: #eeeeee; color: #000000; } div.ChapSects div.ContSect:hover div.ContSSBlock { display: block; position: fixed; background: #eeeeee; border-style: solid; border-width: 1px 2px 2px 1px; border-color: #666666; padding-left: 0ex; padding-right: 0.5ex; color: #000000; left: 54%; width: 25%; z-index: 10000; } div.ChapSects div.ContSect:hover div.ContSSBlock a { display: block; margin-left: 3px; } div.ChapSects div.ContSect:hover div.ContSSBlock a:hover { display: block; background: #ffffff; } div.ContSect { text-align: left; margin-left: 1em; } div.ChapSects { position: fixed; left: 75%; font-size: 90%; overflow: auto; top: 10px; bottom: 0px; } /* Table elements */ table.GAPDocTable { border-collapse: collapse; border-style: none; border-color: black; } table.GAPDocTable td, table.GAPDocTable th { padding: 3pt; border-width: thin; border-style: solid; border-color: #555555; } caption.GAPDocTable { caption-side: bottom; width: 70%; margin-top: 1em; margin-left: auto; margin-right: auto; } td.tdleft { text-align: left; } table.GAPDocTablenoborder { border-collapse: collapse; border-style: none; border-color: black; } table.GAPDocTablenoborder td, table.GAPDocTable th { padding: 3pt; border-width: 0pt; border-style: solid; border-color: #555555; } caption.GAPDocTablenoborder { caption-side: bottom; width: 70%; margin-top: 1em; margin-left: auto; margin-right: auto; } td.tdleft { text-align: left; } td.tdright { text-align: right; } td.tdcenter { text-align: center; } /* Colors and fonts can be overwritten for some types of elements. */ /* Verb elements */ pre.normal { color: #000000; } /* Func-like elements and Ref to Func-like */ code.func { color: #000000; } /* K elements */ code.keyw { color: #770000; } /* F elements */ code.file { color: #8e4510; } /* C elements */ code.code { } /* Item elements */ code.i { } /* Button elements */ strong.button { } /* Headings */ span.Heading { } /* Arg elements */ var.Arg { color: #006600; } /* Example elements, is in tables, see above */ div.Example { } /* Package elements */ strong.pkg { } /* URL-like elements */ span.URL { } /* Mark elements */ strong.Mark { } /* Ref elements */ b.Ref { } span.Ref { } /* this contains the contents page */ div.contents { } /* this contains the index page */ div.index { } /* ignore some text for non-css layout */ span.nocss { display: none; } /* colors for ColorPrompt like examples */ span.GAPprompt { color: #000097; font-weight: normal; } span.GAPbrkprompt { color: #970000; font-weight: normal; } span.GAPinput { color: #970000; } /* Bib entries */ p.BibEntry { } span.BibKey { color: #005522; } span.BibKeyLink { } b.BibAuthor { } i.BibTitle { } i.BibBookTitle { } span.BibEditor { } span.BibJournal { } span.BibType { } span.BibPublisher { } span.BibSchool { } span.BibEdition { } span.BibVolume { } span.BibSeries { } span.BibNumber { } span.BibPages { } span.BibOrganization { } span.BibAddress { } span.BibYear { } span.BibPublisher { } span.BibNote { } span.BibHowpublished { } GAPDoc-1.6.4/3k+1/lefttoc.css0000644000175100017510000000047413714505050014527 0ustar luebeckldfm/* leftmenu.css Frank Lübeck */ /* Change default CSS to show section menu on left side */ body { padding-left: 28%; } body.chap0 { padding-left: 2%; } div.ChapSects div.ContSect:hover div.ContSSBlock { left: 15%; } div.ChapSects { left: 1%; width: 25%; } GAPDoc-1.6.4/3k+1/chooser.html0000644000175100017510000000745613714505050014714 0ustar luebeckldfm GAPDoc Style Chooser

Setting preferences for GAPDoc manuals

Unfold subsections in menus only by mouse clicks: no (default)     yes

Show GAP examples as in sessions with ColorPrompt(true): yes (default)     no

Display side of table of contents within chapters: right (default)     left

Main document font: Helvetica/sans serif (default)     Times/serif

Paragraph formatting: left-right justified (default)     ragged right

Apply settings to last page.

GAPDoc-1.6.4/CHANGES0000644000175100017510000004417113714505036012705 0ustar luebeckldfm CHANGES of the GAPDoc package 1.6.3 -> 1.6.4 - Now computing better labels for bibliography entries containing names with certain non-ASCII initials. - Fixed sorting of index entries containing special characters `<`, `>`, `&`, `\` or `_` . - Made labels independent of white space. - Added various new translations from LaTeX markup to UTF-8. 1.6.2 -> 1.6.3 - In Text and HTML versions: Made 'Label' strings independent of whitespace (as is usual in LaTeX). - New optional "nopdf" argument of 'MakeGAPDocDoc'. - 'MakeGAPDocDoc' now produces useful text and HTML versions even if 'bibtex' and 'pdflatex' do not work. - 'HelpData" handler for "pdf" format now returns 'fail' if there are no page numbers in manual.six file. 1.6.1 -> 1.6.2 - Improved 'InitialSubstringUTF8String' by an optional argument to return a string with a suffix. - Change access of javascript code for MathJax to https protocol (such that MathJax works for help pages accessed via https). - Added option ".uri := true" to 'SearchMR' to return URI instead of sending a request to MathSciNet. - Added many cases handled by 'HeuristicTranslationsLaTeX2XML', this is needed because MathSciNet has changed the markup for accented characters in many cases. - Made 'SearchMR' work again using 'wget' or 'curl' (MathSciNet is now only accessible via HTTPS). - Better ordering of help matches if the first word is the query string (patch provided by Max Horn). - Escape the special characters @!|" for 'makeindex' in index entries for LaTeX. - Removed dependency on 'a4wide.sty' file in LaTeX installation. 1.6 -> 1.6.1 - Slightly nicer display of header lines of ManSection's with long names and/or long argument lists. - Added an element to be used in ManSection's on constructors. - Minimal changes to make GAPDoc (translation of manual, and handler functions for the help system) work in any single thread in HPCGAP. 1.5.1 -> 1.6 - Changed and documented the handling of elements; its content is not reformatted. - Can now handle help books with empty bibliography. - Some technical adjustments which make it easier to use GAPDoc with HPC-GAP. - Some cosmetic improvements, mainly for text output and markup of nested elements. - Introduce finer distinction of -elements for HTML with/without MathJax. - 'StringBibXMLEntry' supports now a 'rec(MathJax := true)' option. - Added a new utility function 'InitialSubstringUTF8String'. - 'NormalizedNameAndKey' can now find initials from UTF-8 encoded name strings. - The HTML manuals in Browsers with Javascript now always have the [Style] link, even if no MathJax version is generated. - 'RunExamples' now returns 'true' or 'false'. - Removed support for the "MathML" variant of 'GAPDoc2HTML' which was probably not used anyway. - MakeGAPDocDoc (more precisely AddPageNumbersToSix) will no longer enter a break loop in case of an empty index (noticed by Thomas Breuer). - New function 'LabelsFromBibTeX'. If BibTeX is available this is used to unify the labels used for citations and the ordering of the reference list in the LaTeX, text and HTML version of a GAPDoc document. - 'ComposedDocument' now accepts also file names with absolute paths and relative to GAP roots. (Uses a new function 'FilenameGAP'.) - Documented 'DOCCOMPOSEERROR' for 'ComposedDocument' to ignore missing chunks. - Mention that .bib files for must be in latin1-encoding, and corrected 3k+1.bib accordingly (error noticed by Bill Allombert). - Corrected HorLine in tables without trailing | column (report and fix by Max Horn). - Recognize document encoding in 1.5.1 - Adjustments to GAP's new DeclareUserPreference setup. 1.4 -> 1.5 - Substituted the TestManual functions by new ones based on the new 'Test' functionality in the GAP library: ExtractExamples, RunExamples. (Used this to adjust all manual examples.) - Added a copy of GPL text. - Corrected/improved handling of certain external references, and some other small errors (reported by James Mitchell). - Improved detection of UTF-8 input. - Improved/adjusted manual examples. 1.3 -> 1.4 - Made license statement more direct. - Slight change of the dtd: The elements now permit elements in their content. The converters were adjusted accordingly. - Several layout changes in text version: More unicode characters are used, e.g., for fill strings and table borders (see BOXCHARS). Also mathematical symbols from unicode are used more often. Less colors are used in default text theme. - Several text themes are available in the distribution (more by others are welcome). The preferred theme can be configured by the user via SetGAPDocTextTheme and at startup via a user preference SetUserPreference("GAPDoc", "TextTheme", ...). - Improved markup of elements in function definitions in Text and HTML conversion. - The text version of the manuals now contains more hooks (by pseudo escape sequences) for preprocessing before display. Paragraphs are now reformatted to current screen width. Unicode to latinX translation is now done with multi-character substitution. And markup with visible characters becomes possible, e.g. the "old" text theme (tables are not reformatted which can lead to some problems). - Slightly changed layout of the title page in LaTeX/PDF manuals. - The LaTeX/PDF manuals use less colors by default. - The tables of content contain now references and index (not convinced that this is ok, but was often requested). - Preferred style for viewing the HTML manuals can be configured by the user via user preferences: SetUserPreference("GAPDoc", "HTMLStyle", ...) and SetUserPreference("GAPDoc", "UseMathJax", true/false) - The HTML manuals support style switching (via URL and cookie) with javascript and cookie enabled browsers. Several styles (and combinations) are offered in the distribution (more by others are welcome). - The HTML manuals contain now a hook to use javascript and a few more hooks for CSS style sheets. - All output versions contain now markup for coloring GAP examples as with ColorPrompt(true). (Easy to switch off for text and HTML in user config.) - Link from MathJax HTML manuals to central server http://cdn.mathjax.org to get scripts and fonts. - Added a link to the "Contents" on top and bottom of each HTML manual page. - For LaTeX/PDF conversion of manuals we use now the "psnfss" for postscript fonts. - Added more hooks and simplified customization of LaTeX/PDF manuals (see "SetGapDocLaTeXOptions"). - PDF-verison is now by default generated with bookmarks (for acroread and other viewers), but such that they are not opened by default. - Fixed a bug when displaying multiple hits while ANSI_COLORS=false. 1.2 -> 1.3 - Improved the example ./gapdoc.css file (also used for the GAPDoc manuals): when hovering over a link to a section its subsections are now shown in a separate block. - The Arg attribute in and other elements now allows for GAP options. - Added support for HTML output using MathJax (http://www.mathjax.org/). MakeGAPDocDoc and GAPDoc2HTML now allow an optional argument "MathJax". - Better bound for long index entries to be hyphenated (can now also be changed by setting GAPDoc2LaTeXProcs.MaxIndexEntryWidth). - Improved the \description environment in LaTeX output using the enumitem LaTeX packages. Now works with very long labels. - Now a warning is given if ComposedDocument finds several pieces of documentation with the same label. - Fixed a problem which caused ParseError in rare cases to display the wrong line (reported by Laurent Bartholdi). - Tables without | or HorLine are now distinguished in HTML version, such that they can be configured to be displayed without borders. - There is a new attribute Mode="M" for elements, if this is given the formula is processed as in elements. 1.1 -> 1.2 - New utility to access the MathSciNet data base from within GAP (only if your computer has access, of course), see documentation of 'SearchMR'. - Now letters counting appendices are also printed without trailing dot in references. - Slightly changed HorLine's in text-version of output. - Various changes in tools for bibliography data (many suggested by Thomas Breuer): - Avoid some syntax errors caused by 'NormalizedNameAndKey' in case of first names starting with non-ASCII character (but still cannot correctly handle these cases, use BibXMLext instead). - Improved sorting of bib-entries in HTML/Text output. - Better heuristic functions for translating characters in LaTeX code in BibTeX entries to unicode, see 'HeuristicTranslationsLaTeX2XML'. - Handle (rare) short MathReview numbers. - Better formatted output for HTML version of bib-entries. - Fixed the case of an empty 'strings' list in 'RecBibXMLEntry'. - Apply recoding to strings from BibXMLext data. - Use default markup in StringBibAsText (undocumented, internally used by StringBibXMLEntry) when called with one argument. - Added more simplifications and LaTeX translations of unicode characters. - Improved "RepeatedString". - XML parser: - Could show wrong line number for original position of code with error. - Now the ":" is allowed in element and attribute names, this allows to implement utilities for dealing with XML name spaces (http://www.w3.org/TR/2006/REC-xml-names-20060816/). - Corrected bug in normalization of argument lists (if "," was used as separator). Also the layout was changed in case of leading optional arguments (reported by Laurent Bartholdi). 1.0 -> 1.1 - We allow unicode characters which have useful translations to LaTeX and as simplified string (with one character, for the moment) in mathematical formulae. Introduced entities &CC;, &ZZ;, &NN;, &PP;, &QQ;, &HH;, &RR; for \mathbb characters. - Now chapter numbers in references to chapters are without trailing dot in text and HTML converters. - Fixed bug with vertical spacing for in text converter. - GAPDoc can now be used with other languages than English, see 'SetGapDocLanguage' for details. - Various documentation improvements. - New options "utf8" and "nopslatex" for LaTeX converter, see 'SetGapDocLaTeXOptions'. - Introduced "LaTeXUTF8" encoding (uses known translations but leaves other characters as they are). - Removed support of '\N, \Z, ...' for '{\mathbb N}, {\mathbb Z}, ... (was not documented before). But see &NN; above. - Introduced 'WrapTextAttribute' which takes care of existing escape sequences in the text to wrap. Use it for the text converter to handle elements with markup which are contained in each other correctly. 0.99999 -> 1.0 - Changed the status of the package from "deposited" to "accepted". - GAPDoc language (only few changes, all are fully backward compatible): - Made entities for LaTeX special characters ($tamp;, &percent; and so on) unnecessary (but kept them--with simplified definitions--for backward compatibility). Now just write characters in content and attribute values directly, except for math elements which contain LaTeX code. - A does now allow an optional (I would not like if this would be used extensively, but can be sensible for ManSections which explain several commands.) - does now allow an optional element to specify subkeys with further markup (not possible in 'Subkey' attribute). - , , now allow optional elements and to specify text with further markup (not possible in 'Text' attribute). - New element . Can be used everywhere (e.g., for additional data like source code, or to comment non finished parts of the document). - MakeGAPDocDoc: - Now the text converter is called first to produce labels for (sub-)sections which are independent of their number (see 'Text converter:' below). - Now only the PDF manual is compiled from the LaTeX version. - The .log file written by pdflatex is checked for errors, warnings and overfull boxes; these are displayed. - Bibliography data (see '?GAPDoc: Utilities for Bibliographies'): - Defined a 'BibXMLext' format for bibliographies with DTD bibxmlext.dtd (better data format if not used for LaTeX). - Utilities for parsing BibXMLext data and translating them to various formats (BibTeX, Text, HTML). Includes a utility to approximate BibXMLext data from given BibTeX data. - BibXMLext databases can be specified in (and I suggest to use this possibility). - Labels for references in Text and HTML converter are now similar to those produced by BibTeX. - New functions for extracting and checking the code in all elements, see 'ManualExamples', 'TestManualExamples'. - Unicode strings: - Introduced unicode strings and characters as GAP objects, see '?Unicode'. - Translations between unicode strings and GAP strings in various character encodings, see '?Encode'. (Mainly UTF-8, ISO-8859-X, "XML" and "URL" encodings.) - Some non-injective (partial) maps from unicode: a "LaTeX" encoding, simplifications to ASCII or latin1, conversions to lowercase and uppercase characters. - The internal encoding for the XML parsed data is now UTF-8, this is also recommended for input (all GAPDoc files are now in UTF-8 encoding), but all latin? encodings work as well. - LaTeX converter: - Convert long URLs such that LaTeX can hyphenate them after slashes (but without a maybe confusing hyphenation dash). - Documented SetGapDocLaTeXOptions, see ?GAPDoc2LaTeX. (E.g., settings for hyperref, using colors or not.) - The default LaTeX markup for , is now by slanted typewriter font. - Very long identifier names are now hyphenated in the (two-column) index. - The pdf-manuals now know their paper size. - The pdf-manuals contain the robust labels generated by the text converter (see below). E.g., with xpdf one can display a labeled text directly: xpdf manual.pdf +L.
Producing Documentation from Source Files Here we explain how to use the functions which are described in more detail in the following sections. We assume that we have the main file MyBook.xml of a book "MyBook" in the directory /my/book/path. This contains <#Include ...>-statements as explained in Chapter . These refer to some other files as well as pieces of text which are found in the comments of some &GAP; source files ../lib/a.gd and ../lib/b.gi (relative to the path above). A &BibTeX; database MyBook.bib for the citations is also in the directory given above. We want to produce a text-, pdf- and HTML-version of the document. (A &LaTeX; version of the manual is produced, so it is also easy to compile dvi-, and postscript-versions.)

All the commands shown in this Section are collected in the single function .

First we construct the complete XML-document as a string with . This interprets recursively the <#Include ...>-statements. gap> path := Directory("/my/book/path");; gap> main := "MyBook.xml";; gap> files := ["../lib/a.gd", "../lib/b.gi"];; gap> bookname := "MyBook";; gap> doc := ComposedDocument("GAPDoc", path, main, files, true);; Now doc is a list with two entries, the first is a string containing the XML-document, the second gives information from which files and locations which part of the document was collected. This is useful in the next step, if there are any errors in the document.

Next we parse the document and store its structure in a tree-like data structure. The commands for this are and . gap> r := ParseTreeXMLString(doc[1], doc[2]);; gap> CheckAndCleanGapDocTree(r); true We start to produce a text version of the manual, which can be read in a terminal (window). The command is . This produces a record with the actual text and some additional information. The text can be written chapter-wise into files with . The names of these files are chap0.txt, chap1.txt and so on. The text contains some markup using ANSI escape sequences. This markup is substituted by the &GAP; help system (user configurable) to show the text with colors and other attributes. For the bibliography we have to tell the location of the &BibTeX; database by specifying a path as second argument. gap> t := GAPDoc2Text(r, path);; gap> GAPDoc2TextPrintTextFiles(t, path); This command constructs all parts of the document including table of contents, bibliography and index. The functions for formatting text paragraphs and for reading &BibTeX; files with &GAP; may be of independent interest.

With the text version we have also produced the information which is used for searching with &GAP;'s online help. Also, labels are produced which can be used by links in the HTML- and pdf-versions of the manual.

Next we produce a &LaTeX; version of the document. returns a string containing the &LaTeX; source. The utility function writes the content of a string to a file, we choose MyBook.tex. gap> l := GAPDoc2LaTeX(r);; gap> FileString(Filename(path, Concatenation(bookname, ".tex")), l); Assuming that you have a sufficiently good installation of &TeX; available (see for details) this can be processed with a series of commands like in the following example. cd /my/book/path pdflatex MyBook bibtex MyBook pdflatex MyBook makeindex MyBook pdflatex MyBook mv MyBook.pdf manual.pdf After this we have a pdf-version of the document in the file manual.pdf. It contains hyperlink information which can be used with appropriate browsers for convenient reading of the document on screen (e.g., xpdf is nice because it allows remote calls to display named locations of the document). Of course, we could also use other commands like latex or dvips to process the &LaTeX; source file. Furthermore we have produced a file MyBook.pnr which is &GAP;-readable and contains the page number information for each (sub-)section of the document.

We can add this page number information to the indexing information collected by the text converter and then print a manual.six file which is read by &GAP; when the manual is loaded. This is done with and . gap> AddPageNumbersToSix(r, Filename(path, "MyBook.pnr")); gap> PrintSixFile(Filename(path, "manual.six"), r, bookname); Finally we produce an HTML-version of the document and write it (chapter-wise) into files chap0.html, chap1.html and so on. They can be read with any Web-browser. The commands are and . We also add a link from manual.html to chap0.html. You probably want to copy stylesheet files into the same directory, see for more details. The argument path of specifies the directory containing the &BibTeX; database files. gap> h := GAPDoc2HTML(r, path);; gap> GAPDoc2HTMLPrintHTMLFiles(h, path); This function collects all the commands for producing a text-, pdf- and HTML-version of a &GAPDoc; document as described in Section . It checks the .log file from the call of pdflatex and reports if there are errors, warnings or overfull boxes.

Note: If this function works for you depends on your operating system and installed software. It will probably work on most UNIX systems with a standard &LaTeX; installation. If the function doesn't work for you look at the source code and adjust it to your system.

Here path must be the directory (as string or directory object) containing the main file main of the document (given with or without the .xml extension. The argument files is a list of (probably source code) files relative to path which contain pieces of documentation which must be included in the document, see Chapter . And bookname is the name of the book used by &GAP;'s online help. The optional argument gaproot must be a string which gives the relative path from path to the main &GAP; root directory. If this is given, the HTML files are produced with relative paths to external books.

If the string "nopdf" is given as optional argument then will not produce a pdf-version of the help book (the source .tex-file is generated). Consequently, the index for the help system will not contain page numbers for the pdf-version. This variant of should work independently of the operating system because no external programs are called. It is recommended that distributed manuals contain the pdf-version.

MathJax in MakeGAPDocDoc can be called with additional arguments "MathJax", "Tth" and/or "MathML". If these are given additional variants of the HTML conversion are called, see for details.

It is possible to use &GAPDoc; with other languages than English, see for more details.

Parsing XML Documents Arbitrary well-formed XML documents can be parsed and browsed by the following functions. <#Include Label="ParseTreeXMLString"> <#Include Label="StringXMLElement"> <#Include Label="EntitySubstitution"> <#Include Label="DisplayXMLStructure"> <#Include Label="ApplyToNodesParseTree"> Here are two more utilities which use . <#Include Label="GetTextXMLTree"> <#Include Label="XMLElements"> And here are utilities for processing &GAPDoc; XML documents. <#Include Label="CheckAndCleanGapDocTree"> <#Include Label="AddParagraphNumbersGapDocTree"> <#Include Label="InfoXMLParser">
The Converters Here are more details about the conversion programs for &GAPDoc; XML documents. <#Include Label="GAPDoc2LaTeX"> <#Include Label="GAPDoc2Text"> <#Include Label="GAPDoc2TextPrintTextFiles"> <#Include Label="AddPageNumbersToSix"> <#Include Label="PrintSixFile"> <#Include Label="SetGAPDocTextTheme"> <#Include Label="GAPDoc2HTML"> <#Include Label="GAPDoc2HTMLPrintHTMLFiles"> <#Include Label="HTMLStyleSheets"> <#Include Label="SetGAPDocHTMLStyle"> <#Include Label="InfoGAPDoc"> <#Include Label="SetGapDocLanguage">
ManualExamples TestManualExamples Testing Manual Examples We also provide some tools to check and adjust the examples given in <Example>-elements.

Former versions of &GAPDoc; provided functions ManualExamples and TestManualExamples. These functions are still available, but no longer documented. Their use is deprecated. <#Include Label="ExtractExamples"> <#Include Label="RunExamples">

GAPDoc-1.6.4/doc/distr.xml0000644000175100017510000000750613714505036014327 0ustar luebeckldfm Distributing a Document into Several Files In &GAPDoc; there are facilities to distribute a single document over several files. This is for example interesting, if one wants to store the documentation of some code in the same file as the code itself. Or, if one just wants to store chapters of a document in separate files. There is a set of conventions how this is done and some tools to collect the text for further processing.

The technique can also be used to distribute and collect other types of documents into respectively from several files (e.g., source code, examples).

<#Include> <#GAPDoc> The Conventions In this description we use the string GAPDoc for marking pieces of a document to collect.

Pieces of documentation that shall be incorporated into another document are marked as follows:

## This is the piece. ## The hash characters are removed. ## <#/GAPDoc>]]> This piece is then included into another file by a statement like: <#Include Label="MyPiece"> Here are the exact rules, how pieces are gathered: All lines up to a line containing the character sequence <#GAPDoc Label=" (exactly one space character) are ignored. The characters on the same line before this sequence are stored as prefix. The characters after the sequence up to the next double quotes character (which should not contain whitespace) are stored as label. All other characters in the line are ignored. The following lines up to a line containing the character sequence <#/GAPDoc> are stored under the label. These lines are processed as follows: The longest possible substring from the beginning of the line that equals the corresponding substring of the prefix is removed. Having stored a list of labels and pieces of text gathered as above this can be used as follows. In &GAPDoc; documentation files all statements of the form <#Include Label="Key"> are replaced by the sequence of lines stored under the label Key. Additionally, every occurrence of a statement of the form <#Include SYSTEM "Filename"> is replaced by the whole file stored under the name Filename in the file system. These substitutions are done recursively (although one should probably avoid to use this extensively). Here is another example: some characters # # This text is not indented. # This text is indented by one blank. #Not indented. #<#/GAPDoc>]]> replaces <#Include Label="AnotherPiece"> by Since these rules are very simple it is quite easy to write a program in almost any programming language which does this gathering of text pieces and the substitutions. In &GAPDoc; there is the &GAP; function which does this.

Note that the XML-tag-like markup we have used here is not a legal XML markup, since the hash character is not allowed in element names. The mechanism described here is a preprocessing step which composes a document.

A Tool for Collecting a Document <#Include Label="ComposedDocument"> <#Include Label="OriginalPositionDocument"> <#Include Label="FilenameGAP">
GAPDoc-1.6.4/doc/enter.xml0000644000175100017510000003673413714505036014324 0ustar luebeckldfm How To Type a &GAPDoc; Document In this chapter we give a more formal description of what you need to start to type documentation in &GAPDoc; XML format. Many details were already explained by example in Section  of the introduction.

We do not answer the question How to write a &GAPDoc; document? in this chapter. You can (hopefully) find an answer to this question by studying the example in the introduction, see , and learning about more details in the reference Chapter .

The definite source for all details of the official XML standard with useful annotations is:

http://www.xml.com/axml/axml.html

Although this document must be quite technical, it is surprisingly well readable.

General XML Syntax We will now discuss the pieces of text which can occur in a general XML document. We start with those pieces which do not contribute to the actual content of the document. Head of XML Document Each XML document should have a head which states that it is an XML document in some encoding and which XML-defined language is used. In case of a &GAPDoc; document this should always look as in the following example. ]]> See  for a remark on the encoding statement.

(There may be local entity definitions inside the DOCTYPE statement, see Subsection  below.) Comments A comment in XML starts with the character sequence <!-- and ends with the sequence -->. Between these sequences there must not be two adjacent dashes --. Processing Instructions A processing instruction in XML starts with the character sequence <? followed by a name (xml is only allowed at the very beginning of the document to declare it being an XML document, see ). After that any characters may follow, except that the ending sequence ?> must not occur within the processing instruction.  

And now we turn to those parts of the document which contribute to its actual content. Names in XML and Whitespace A name in XML (used for element and attribute identifiers, see below) must start with a letter (in the encoding of the document) or with a colon : or underscore _ character. The following characters may also be digits, dots . or dashes -.

This is a simplified description of the rules in the standard, which are concerned with lots of unicode ranges to specify what a letter is.

Sequences only consisting of the following characters are considered as whitespace: blanks, tabs, carriage return characters and new line characters. Elements The actual content of an XML document consists of elements. An element has some content with a leading start tag () and a trailing end tag (). The content can contain further elements but they must be properly nested. One can define elements whose content is always empty, those elements can also be entered with a single combined tag (). Start Tags A start-tag consists of a less-than-character < directly followed (without whitespace) by an element name (see ), optional attributes, optional whitespace, and a greater-than-character >.

An attribute consists of some whitespace and then its name followed by an equal sign = which is optionally enclosed by whitespace, and the attribute value, which is enclosed either in single or double quotes. The attribute value may not contain the type of quote used as a delimiter or the character <, the character & may only appear to start an entity, see . We describe in  how to enter special characters in attribute values.

Note especially that no whitespace is allowed between the starting < character and the element name. The quotes around an attribute value cannot be omitted. The names of elements and attributes are case sensitive. End Tags An end tag consists of the two characters </ directly followed by the element name, optional whitespace and a greater-than-character >. Combined Tags for Empty Elements Elements which always have empty content can be written with a single tag. This looks like a start tag (see ) except that the trailing greater-than-character > is substituted by the two character sequence />. Entities An entity in XML is a macro for some substitution text. There are two types of entities.

A character entity can be used to specify characters in the encoding of the document (can be useful for entering non-ASCII characters which you cannot manage to type in directly). They are entered with a sequence &#, directly followed by either some decimal digits or an x and some hexadecimal digits, directly followed by a semicolon ;. Using such a character entity is just equivalent to typing the corresponding character directly.

Then there are references to named entities. They are entered with an ampersand character & directly followed by a name which is directly followed by a semicolon ;. Such entities must be declared somewhere by giving a substitution text. This text is included in the document and the document is parsed again afterwards. The exact rules are a bit subtle but you probably want to use this only in simple cases. Predefined entities for &GAPDoc; are described in and .

Special Characters in XML We have seen that the less-than-character < and the ampersand character & start a tag or entity reference in XML. To get these characters into the document text one has to use entity references, namely &lt; to get < and &amp; to get &. Furthermore &gt; must be used to get > when the string ]]> appears in element content (and not as delimiter of a CDATA section explained below).

Another possibility is to use a CDATA statement explained in . Rules for Attribute Values Attribute values can contain entities which are substituted recursively. But except for the entities &lt; or a character entity it is not allowed that a < character is introduced by the substitution (there is no XML parsing for evaluating the attribute value, just entity substitutions). CDATA Pieces of text which contain many characters which can be misinterpreted as markup can be enclosed by the character sequences and ]]>. Everything between these sequences is considered as content of the document and is not further interpreted as XML text. All the rules explained so far in this section do not apply to such a part of the document. The only document content which cannot be entered directly inside a CDATA statement is the sequence ]]>. This can be entered as ]]&gt; outside the CDATA statement.

A nesting of tags like ]]> is not allowed.
Encoding of an XML Document We suggest to use the UTF-8 encoding for writing &GAPDoc; XML documents. But the tools described in Chapter also work with ASCII or the various ISO-8859-X encodings (ISO-8859-1 is also called latin1 and covers most special characters for western European languages). Well Formed and Valid XML Documents We want to mention two further important words which are often used in the context of XML documents. A piece of text becomes a well formed XML document if all the formal rules described in this section are fulfilled.

But this says nothing about the content of the document. To give this content a meaning one needs a declaration of the element and corresponding attribute names as well as of named entities which are allowed. Furthermore there may be restrictions how such elements can be nested. This definition of an XML based markup language is done in a document type definition. An XML document which contains only elements and entities declared in such a document type definition and obeys the rules given there is called valid (with respect to this document type definition).

The main file of the &GAPDoc; package is gapdoc.dtd. This contains such a definition of a markup language. We are not going to explain the formal syntax rules for document type definitions in this section. But in Chapter  we will explain enough about it to understand the file gapdoc.dtd and so the markup language defined there.

Entering &GAPDoc; Documents Here are some additional rules for writing &GAPDoc; XML documents. Other special characters As &GAPDoc; documents are used to produce &LaTeX; and HTML documents, the question arises how to deal with characters with a special meaning for other applications (for example &, #, $, %, ~, \, {, }, _, ^,   (this is a non-breakable space, ~ in &LaTeX;) have a special meaning for &LaTeX; and &, <, > have a special meaning for HTML (and XML). In &GAPDoc; you can usually just type these characters directly, it is the task of the converter programs which translate to some output format to take care of such special characters. The exceptions to this simple rule are: & and < must be entered as &amp; and &lt; as explained in . The content of the &GAPDoc; elements <M>, <Math> and <Display> is &LaTeX; code, see . The content of an <Alt> element with Only attribute contains code for the specified output type, see . Remark: In former versions of &GAPDoc; one had to use particular entities for all the special characters mentioned above (&tamp;, &hash;, &dollar;, &percent;, &tilde;, &bslash;, &obrace;, &cbrace;, &uscore;, &circum;, &tlt;, &tgt;). These are no longer needed, but they are still defined for backwards compatibility with older &GAPDoc; documents. Mathematical Formulae Mathematical formulae in &GAPDoc; are typed as in &LaTeX;. They must be the content of one of three types of &GAPDoc; elements concerned with mathematical formulae: Math, Display, and M (see Sections  and  for more details). The first two correspond to &LaTeX;'s math mode and display math mode. The last one is a special form of the Math element type, that imposes certain restrictions on the content. On the other hand the content of an M element is processed in a well defined way for text terminal or HTML output. The Display element also has an attribute such that its content is processed as in M elements.

Note that the content of these element is &LaTeX; code, but the special characters < and & for XML must be entered via the entities described in  or by using a CDATA statement, see .

More Entities In &GAPDoc; there are some more predefined entities: &GAP; &GAP; &GAPDoc; &GAPDoc; &TeX; &TeX; &LaTeX; &LaTeX; &BibTeX; &BibTeX; &MeatAxe; &MeatAxe; &XGAP; &XGAP; &copyright; ©right; &nbsp;   &ndash;
Predefined Entities in the &GAPDoc; system
Here &nbsp; is a non-breakable space character.

Additional entities are defined for some mathematical symbols, see for more details.

One can define further local entities right inside the head (see ) of a &GAPDoc; XML document as in the following example.

text possibly with markup"> ]>]]> These additional definitions go into the <!DOCTYPE tag in square brackets. Such new entities are used like this: &MyEntity;

GAPDoc-1.6.4/doc/gapdoc.bib0000644000175100017510000000076513714505036014373 0ustar luebeckldfm @book{ La85, author = {Lamport, Leslie}, title = {\LaTeX: A Document Preparation System}, publisher = {Addison-Wesley}, year = {1985}, isbn = {0-201-15790-X} } @manual{GAP4, key = "GAP", organization = "The GAP Group", title = {{GAP} -- {G}roups, {A}lgorithms, and {P}rogramming, Version 4.3}, year = 2002, address = "Aachen, St~Andrews", note = "http://www.gap-system.org", keywords = "groups; *; gap; manual" } GAPDoc-1.6.4/doc/gapdoc.xml0000644000175100017510000000515613714505036014436 0ustar luebeckldfm &GAPDoc; ( Version <#Include SYSTEM "../version"> ) Frank Lübeck Frank.Luebeck@Math.RWTH-Aachen.De http://www.math.rwth-aachen.de/~Frank.Luebeck Max Neunhöffer neunhoef at mcs.st-and.ac.uk http://www-groups.mcs.st-and.ac.uk/~neunhoef/ August 2020 License ©right; 2000-2020 by Frank Lübeck and Max Neunhöffer

&GAPDoc; is free software; you can redistribute it and/or modify it under the terms of the http://www.fsf.org/licenses/gpl.html as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. gap> SizeScreen([72,40]);; <#Include SYSTEM "intro.xml"> <#Include SYSTEM "enter.xml"> <#Include SYSTEM "refdtd.xml"> <#Include SYSTEM "distr.xml"> <#Include SYSTEM "conv.xml"> <#Include SYSTEM "textutil.xml"> <#Include SYSTEM "bibutil.xml"> The File 3k+1.xml Here is the complete source of the example &GAPDoc; document 3k+1.xml discussed in Section .

]]> The File gapdoc.dtd For easier reference we repeat here the complete content of the file gapdoc.dtd. ]]> The File bibxmlext.dtd For easier reference we repeat here the complete content of the file bibxmlext.dtd which is explained in . ]]>
GAPDoc-1.6.4/doc/gapdocbib.xml0000644000175100017510000000227513714505036015112 0ustar luebeckldfm LeslieLamport <Alt Only="LaTeX,BibTeX,BibTeXhref">\</Alt>LaTeX: A Document Preparation System Addison-Wesley 1985 0-201-15790-X <C>GAP</C> -- <C>G</C>roups, <C>A</C>lgorithms, and <C>P</C>rogramming, Version 4.4.9 The GAP Group
Aachen, St Andrews
2006 http://www.gap-system.org GAP groups; *; gap; manual
MaxNeunhöffer <Wrap Name="Package">IO</Wrap>, Bindings for low level <C>C</C> library <C>IO</C>, <C>V</C>ersion 2.2 http://gap-packages.github.io/io/ 2007 GAP package
GAPDoc-1.6.4/doc/intro.xml0000644000175100017510000003745313714505036014341 0ustar luebeckldfmIntroduction and Example The main purpose of the &GAPDoc; package is to define a file format for documentation of &GAP;-programs and -packages (see ). The problem is that such documentation should be readable in several output formats. For example it should be possible to read the documentation inside the terminal in which &GAP; is running (a text mode) and there should be a printable version in high typesetting quality (produced by some version of &TeX;). It is also popular to view &GAP;'s online help with a Web-browser via an HTML-version of the documentation. Nowadays one can use &LaTeX; and standard viewer programs to produce and view on the screen dvi- or pdf-files with full support of internal and external hyperlinks. Certainly there will be other interesting document formats and tools in this direction in the future.

Our aim is to find a format for writing the documentation which allows a relatively easy translation into the output formats just mentioned and which hopefully makes it easy to translate to future output formats as well.

To make documentation written in the &GAPDoc; format directly usable, we also provide a set of programs, called converters, which produce text-, hyperlinked &LaTeX;- and HTML-output versions of a &GAPDoc; document. These programs are developed by the first named author. They run completely inside &GAP;, i.e., no external programs are needed. You only need latex and pdflatex to process the &LaTeX; output. These programs are described in Chapter .

XML XML The definition of the &GAPDoc; format uses XML, the eXtendible Markup Language. This is a standard (defined by the W3C consortium, see http://www.w3c.org) which lays down a syntax for adding markup to a document or to some data. It allows to define document structures via introducing markup elements and certain relations between them. This is done in a document type definition. The file gapdoc.dtd contains such a document type definition and is the central part of the &GAPDoc; package.

The easiest way for getting a good idea about this is probably to look at an example. The Appendix  contains a short but complete &GAPDoc; document for a fictitious share package. In the next section we will go through this document, explain basic facts about XML and the &GAPDoc; document type, and give pointers to more details in later parts of this documentation.

In the last Section  of this introductory chapter we try to answer some general questions about the decisions which lead to the &GAPDoc; package.

A complete example In this section we recall the lines from the example document in Appendix  and give some explanations. ]]> This line just tells a human reader and computer programs that the file is a document with XML markup and that the text is encoded in the UTF-8 character set (other common encodings are ASCII or ISO-8895-X encodings). ]]> Everything in a XML file between <!-- and --> is a comment and not part of the document content. ]]> This line says that the document contains markup which is defined in the system file gapdoc.dtd and that the markup obeys certain rules defined in that file (the ending dtd means document type definition). It further says that the actual content of the document consists of an element with name Book. And we can really see that the remaining part of the file is enclosed as follows: [...] (content omitted) ]]> This demonstrates the basics of the markup in XML. This part of the document is an element. It consists of the start tag ]]>, the element content and the end tag ]]> (end tags always start with </). This element also has an attribute Name whose value is 3k+1.

If you know HTML, this will look familiar to you. But there are some important differences: The element name Book and attribute name Name are case sensitive. The value of an attribute must always be enclosed in quotes. In XML every element has a start and end tag (which can be combined for elements defined as empty, see for example <TableOfContents/> below).

If you know &LaTeX;, you are familiar with quite different types of markup, for example: The equivalent of the Book element in &LaTeX; is \begin{document} ... \end{document}. The sectioning in &LaTeX; is not done by explicit start and end markup, but implicitly via heading commands like \section. Other markup is done by using braces {} and putting some commands inside. And for mathematical formulae one can use the $ for the start and the end of the markup. In XML all markup looks similar to that of the Book element.

The content of the book starts with a title page.

The <Package>ThreeKPlusOne</Package> Package Version 42 Dummy Authör 3kplusone@dev.null ©right; 2000 The Author.

You can do with this package what you want.

Really. ]]>

The content of the TitlePage element consists again of elements. In Chapter  we describe which elements are allowed within a TitlePage and that their ordering is prescribed in this case. In the (stupid) name of the author you see that a German umlaut is used directly (in ISO-latin1 encoding).

Contrary to &LaTeX;- or HTML-files this markup does not say anything about the actual layout of the title page in any output version of the document. It just adds information about the meaning of pieces of text.

Within the Copyright element there are two more things to learn about XML markup. The <P/> is a complete element. It is a combined start and end tag. This shortcut is allowed for elements which are defined to be always empty, i.e., to have no content. You may have already guessed that <P/> is used as a paragraph separator. Note that empty lines do not separate paragraphs (contrary to &LaTeX;).

The other construct we see here is &copyright;. This is an example of an entity in XML and is a macro for some substitution text. Here we use an entity as a shortcut for a complicated expression which makes it possible that the term copyright is printed as some text like (C) in text terminal output and as a copyright character in other output formats. In &GAPDoc; we predefine some entities. Certain special characters must be typed via entities, for example <, > and & to avoid a misinterpretation as XML markup. It is possible to define additional entities for your document inside the <!DOCTYPE ...> declaration, see .

Note that elements in XML must always be properly nested, as in this example. A construct like ...]]> is not allowed.

]]> This is another example of an empty element. It just means that a table of contents for the whole document should be included into any output version of the document.

After this the main text of the document follows inside certain sectioning elements:

The 3k+1 Problem
Theory [...] (content omitted)
Program [...] (content omitted)
]]>
These elements are used similarly to \chapter and \section in &LaTeX;. But note that the explicit end tags are necessary here.

The sectioning commands allow to assign an optional attribute Label. This can be used for referring to a section inside the document.

The text of the first section starts as follows. The whitespace in the text is unimportant and the indenting is not necessary.

k \in &NN; be a natural number. We consider the sequence n(i, k), i \in &NN;, with n(1, k) = k and else ]]> Here we come to the interesting question how to type mathematical formulae in a &GAPDoc; document. We did not find any alternative for writing formulae in &TeX; syntax. (There is MATHML, but even simple formulae contain a lot of markup, become quite unreadable and they are cumbersome to type. Furthermore there seem to be no tools available which translate such formulae in a nice way into &TeX; and text.) So, formulae are essentially typed as in &LaTeX;. (Actually, it is also possible to type unicode characters of some mathematical symbols directly, or via an entity like the &NN; above.) There are three types of elements containing formulae: M, Math and Display. The first two are for in-text formulae and the third is for displayed formulae. Here M and Math are equivalent, when translating a &GAPDoc; document into &LaTeX;. But they are handled differently for terminal text (and HTML) output. For the content of an M-element there are defined rules for a translation into well readable terminal text. More complicated formulae are in Math or Display elements and they are just printed as they are typed in text output. So, to make a section well readable inside a terminal window you should try to put as many formulae as possible into M-elements. In our example text we used the notation n(i, k) instead of n_i(k) because it is easier to read in text mode. See Sections  and  for more details.

A few lines further on we find two non-internal references.

or http://mathsrv.ku-eichstaett.de/MGF/homes/wirsching/ ]]> The first within the Cite-element is the citation of a book. In &GAPDoc; we use the widely used &BibTeX; database format for reference lists. This does not use XML but has a well documented structure which is easy to parse. And many people have collections of references readily available in this format. The reference list in an output version of the document is produced with the empty element ]]> close to the end of our example file. The attribute Databases give the name(s) of the database (.bib) files which contain the references.

Putting a Web-address into an URL-element allows one to create a hyperlink in output formats which allow this.

The second section of our example contains a special kind of subsection defined in &GAPDoc;.

This function computes for a natural number k the beginning of the sequence n(i, k) defined in section . The sequence stops at the first 1 or at n(max, k), if max is given. gap> ThreeKPlusOneSequence(101); "Sorry, not yet implemented. Wait for Version 84 of the package" ]]> A ManSection contains the description of some function, operation, method, filter and so on. The Func-element describes the name of a function (there are also similar elements Oper, Meth, Filt and so on) and names for its arguments, optional arguments enclosed in square brackets. See Section  for more details.

In the Description we write the argument names as A-elements. A good description of a function should usually contain an example of its use. For this there are some verbatim-like elements in &GAPDoc;, like Example above (here, clearly, whitespace matters which causes a slightly strange indenting).

The text contains an internal reference to the first section via the explicitly defined label sec:theory.

The first section also contains a Ref-element which refers to the function described here. Note that there is no explicit label for such a reference. The pair ]]> and ]]> does the cross referencing (and hyperlinking if possible) implicitly via the name of the function.

Here is one further element from our example document which we want to explain.

]]> This is again an empty element which just says that an output version of the document should contain an index. Many entries for the index are generated automatically because the Func and similar elements implicitly produce such entries. It is also possible to include explicit additional entries in the index.
Some questions Are those XML files too ugly to read and edit? Just have a look and decide yourself. The markup needs more characters than most &TeX; or &LaTeX; markup. But the structure of the document is easier to see. If you configure your favorite editor well, you do not need more key strokes for typing the markup than in &LaTeX;. Why do we not use &LaTeX; alone? &LaTeX; is good for writing books. But &LaTeX; files are generally difficult to parse and to process to other output formats like text for browsing in a terminal window or HTML (or new formats which may become popular in the future). &GAPDoc; markup is one step more abstract than &LaTeX; insofar as it describes meaning instead of appearance of text. The inner workings of &LaTeX; are too complicated to learn without pain, which makes it difficult to overcome problems that occur occasionally. Why XML and not a newly defined markup language? XML is a well defined standard that is more and more widely used. Lots of people have thought about it. Years of experience with SGML went into the design. It is easy to explain, easy to parse and lots of tools are available, there will be more in the future.
GAPDoc-1.6.4/doc/refdtd.xml0000644000175100017510000020665113714505036014454 0ustar luebeckldfm The Document Type Definition In this chapter we first explain what a document type definition is and then describe gapdoc.dtd in detail. That file together with the current chapter define how a &GAPDoc; document has to look like. It can be found in the main directory of the &GAPDoc; package and it is reproduced in Appendix .

We do not give many examples in this chapter which is more intended as a formal reference for all &GAPDoc; elements. Instead, we provide a separate help book, see . This uses all the constructs introduced in this chapter and you can easily compare the source code and how it looks like in the different output formats. Furthermore recall that many basic things about XML markup were already explained by example in the introductory chapter .

What is a DTD? A document type definition (DTD) is a formal declaration of how an XML document has to be structured. It is itself structured such that programs that handle documents can read it and treat the documents accordingly. There are for example parsers and validity checkers that use the DTD to validate an XML document, see .

The main thing a DTD does is to specify which elements may occur in documents of a certain document type, how they can be nested, and what attributes they can or must have. So, for each element there is a rule.

Note that a DTD can not ensure that a document which is valid also makes sense to the converters! It only says something about the formal structure of the document.

For the remaining part of this chapter we have divided the elements of &GAPDoc; documents into several subsets, each of which will be discussed in one of the next sections.

See the following three subsections to learn by example, how a DTD works. We do not want to be too formal here, but just enable the reader to understand the declarations in gapdoc.dtd. For precise descriptions of the syntax of DTD's see again the official standard in:

  http://www.xml.com/axml/axml.html

Overall Document Structure A &GAPDoc; document contains on its top level exactly one element with name Book. This element is declared in the DTD as follows: <Book> Book ]]> After the keyword ELEMENT and the name Book there is a list in parentheses. This is a comma separated list of names of elements which can occur (in the given order) in the content of a Book element. Each name in such a list can be followed by one of the characters ?, * or +, meaning that the corresponding element can occur zero or one time, an arbitrary number of times, or at least once, respectively. Without such an extra character the corresponding element must occur exactly once. Instead of one name in this list there can also be a list of elements names separated by | characters, this denotes any element with one of the names (i.e., | means or).

So, the Book element must contain first a TitlePage element, then an optional TableOfContents element, then a Body element, then zero or more elements of type Appendix, then an optional Bibliography element, and finally an optional element of type TheIndex.

Note that only these elements are allowed in the content of the Book element. No other elements or text is allowed in between. An exception of this is that there may be whitespace between the end tag of one and the start tag of the next element - this should be ignored when the document is processed to some output format. An element like this is called an element with element content.

The second declaration starts with the keyword ATTLIST and the element name Book. After that there is a triple of whitespace separated parameters (in general an arbitrary number of such triples, one for each allowed attribute name). The first (Name) is the name of an attribute for a Book element. The second (CDATA) is always the same for all of our declarations, it means that the value of the attribute consists of character data. The third parameter #REQUIRED means that this attribute must be specified with any Book element. Later we will also see optional attributes which are declared as #IMPLIED. <TitlePage> TitlePage

]]> Within this element information for the title page is collected. Note that more than one author can be specified. The elements must appear in this order because there is no sensible way to specify in a DTD something like the following elements may occur in any order but each exactly once.

Before going on with the other elements inside the Book element we explain the elements for the title page. <Title> Title

]]> Here is the last construct you need to understand for reading gapdoc.dtd. The expression %Text; is a so-called parameter entity. It is something like a macro within the DTD. It is defined as follows:
<Version> Version ]]> Note that the version can only contain character data and no further markup elements (except for Alt, which is necessary to resolve the entities described in ). The converters will not put the word Version in front of the text in this element. <TitleComment> TitleComment ]]> Sometimes a title and subtitle are not sufficient to give a rough idea about the content of a package. In this case use this optional element to specify an additional text for the front page of the book. This text should be short, use the Abstract element (see ) for longer explanations. <Author> Author ]]> As noted in the comment there may be more than one element of this type. This element should contain the name of an author and probably an Email-address and/or WWW-Homepage element for this author, see  and . You can also specify an individual postal address here, instead of using the Address element described below, see . <Date> Date ]]> Only character data is allowed in this element which gives a date for the document. No automatic formatting is done. <Address> Address ]]> This optional element can be used to specify a postal address of the author or the authors. If there are several authors with different addresses then put the Address elements inside the Author elements.

Use the Br element (see ) to mark the line breaks in the usual formatting of the address on a letter.

Note that often it is not necessary to use this element because a postal address is easy to find via a link to a personal web page. <Abstract> Abstract

]]> This element contains an abstract of the whole book.
<Copyright> Copyright ]]> This element is used for the copyright notice. Note the &copyright; entity as described in section . <Acknowledgements> Acknowledgements ]]> This element contains the acknowledgements. <Colophon> Colophon ]]> The colophon page is used to say something about the history of a document. <TableOfContents> TableOfContents ]]> This element may occur in the Book element after the TitlePage element. If it is present, a table of contents is generated and inserted into the document. Note that because this element is declared to be EMPTY one can use the abbreviation ]]> to denote this empty element. <Bibliography> Bibliography ]]> This element may occur in the Book element after the last Appendix element. If it is present, a bibliography section is generated and inserted into the document. The attribute Databases must be specified, the names of several data files can be specified, separated by commas.

Two kinds of files can be specified in Databases: The first are &BibTeX; files as defined in . Such files must have a name with extension .bib, and in Databases the name must be given without this extension. Note that such .bib-files should be in latin1-encoding (or ASCII-encoding). The second are files in BibXMLext format as defined in Section . These files must have an extension .xml and in Databases the full name must be specified.

We suggest to use the BibXMLext format because it allows to produce potentially nicer bibliography entries in text and HTML documents.

A bibliography style may be specified with the Style attribute. The optional Style attribute (for &LaTeX; output of the document) must also be specified without the .bst extension (the default is alpha). See also section for a description of the Cite element which is used to include bibliography references into the text.

<TheIndex> TheIndex

]]> This element may occur in the Book element after the Bibliography element. If it is present, an index is generated and inserted into the document. There are elements in &GAPDoc; which implicitly generate index entries (e.g., Func ()) and there is an element Index () for explicitly adding index entries.
Sectioning Elements A &GAPDoc; book is divided into chapters, sections, and subsections. The idea is of course, that a chapter consists of sections, which in turn consist of subsections. However for the sake of flexibility, the rules are not too restrictive. Firstly, text is allowed everywhere in the body of the document (and not only within sections). Secondly, the chapter level may be omitted. The exact rules are described below.

Appendices are a flavor of chapters, occurring after all regular chapters. There is a special type of subsection called ManSection. This is a subsection devoted to the description of a function, operation or variable. It is analogous to a manpage in the UNIX environment. Usually each function, operation, method, and so on should have its own ManSection.

Cross referencing is done on the level of Subsections, respectively ManSections. The topics in &GAP;'s online help are also pointing to subsections. So, they should not be too long.

We start our description of the sectioning elements top-down: <Body> Body The Body element marks the main part of the document. It must occur after the TableOfContents element. There is a big difference between inside and outside of this element: Whereas regular text is allowed nearly everywhere in the Body element and its subelements, this is not true for the outside. This has also implications on the handling of whitespace. Outside superfluous whitespace is usually ignored when it occurs between elements. Inside of the Body element whitespace matters because character data is allowed nearly everywhere. Here is the definition in the DTD:

]]> The fact that Chapter and Section elements are allowed here leads to the possibility to omit the chapter level entirely in the document. For a description of %Text; see .

(Remark: The purpose of this element is to make sure that a valid &GAPDoc; document has a correct overall structure, which is only possible when the top element Book has element content.) <Chapter> Chapter

]]> A Chapter element can have a Label attribute, such that this chapter can be referenced later on with a Ref element (see section ). Note that you have to specify a label to reference the chapter as there is no automatic labelling!

Chapter elements can contain text (for a description of %Text; see ), Section elements, and Heading elements.

The following additional rule cannot be stated in the DTD because we want a Chapter element to have mixed content. There must be exactly one Heading element in the Chapter element, containing the heading of the chapter. Here is its definition: <Heading> Heading

]]> This element is used for headings in Chapter, Section, Subsection, and Appendix elements. It may only contain %InnerText; (for a description see ).

Each of the mentioned sectioning elements must contain exactly one direct Heading element (i.e., one which is not contained in another sectioning element). <Appendix> Appendix

]]> The Appendix element behaves exactly like a Chapter element (see ) except for the position within the document and the numbering. While chapters are counted with numbers (1., 2., 3., ...) the appendices are counted with capital letters (A., B., ...).

Again there is an optional Label attribute used for references. <Section> Section

]]> A Section element can have a Label attribute, such that this section can be referenced later on with a Ref element (see section ). Note that you have to specify a label to reference the section as there is no automatic labelling!

Section elements can contain text (for a description of %Text; see ), Heading elements, and subsections.

There must be exactly one direct Heading element in a Section element, containing the heading of the section.

Note that a subsection is either a Subsection element or a ManSection element. <Subsection> Subsection

]]> The Subsection element can have a Label attribute, such that this subsection can be referenced later on with a Ref element (see section ). Note that you have to specify a label to reference the subsection as there is no automatic labelling!

Subsection elements can contain text (for a description of %Text; see ), and Heading elements.

There must be exactly one Heading element in a Subsection element, containing the heading of the subsection.

Another type of subsection is a ManSection, explained now:

ManSection–a special kind of subsection ManSections are intended to describe a function, operation, method, variable, or some other technical instance. It is analogous to a manpage in the UNIX environment. <ManSection> ManSection Description Returns ]]> The ManSection element can have a Label attribute, such that this subsection can be referenced later on with a Ref element (see section ). But this is probably rarely necessary because the elements Func and so on (explained below) generate automatically labels for cross referencing.

The content of a ManSection element is one or more elements describing certain items in &GAP;, each of them optionally followed by a Returns element, followed by a Description element, which contains %Text; (see ) describing it. (Remember to include examples in the description as often as possible, see ). The classes of items &GAPDoc; knows of are: functions (Func), operations (Oper), constructors (Constr), methods (Meth), filters (Filt), properties (Prop), attributes (Attr), variables (Var), families (Fam), and info classes (InfoClass). One ManSection should only describe several of such items when these are very closely related.

Each element for an item corresponding to a &GAP; function can be followed by a Returns element. In output versions of the document the string Returns: will be put in front of the content text. The text in the Returns element should usually be a short hint about the type of object returned by the function. This is intended to give a good mnemonic for the use of a function (together with a good choice of names for the formal arguments).

ManSections are also sectioning elements which count as subsections. Usually there should be no Heading-element in a ManSection, in that case a heading is generated automatically from the first Func-like element. Sometimes this default behaviour does not look appropriate, for example when there are several Func-like elements. For such cases an optional Heading is allowed. <Func> Func

]]> This element is used within a ManSection element to specify the usage of a function. The Name attribute is required and its value is the name of the function. The value of the Arg attribute (also required) contains the full list of arguments including optional parts, which are denoted by square brackets. The argument names can be separated by whitespace, commas or the square brackets for the optional arguments, like or . If &GAP; options are used, this can be followed by a colon : and one or more assignments, like .

The name of the function is also used as label for cross referencing. When the name of the function appears in the text of the document it should always be written with the Ref element, see . This allows to use a unique typesetting style for function names and automatic cross referencing.

If the optional Label attribute is given, it is appended (with a colon : in between) to the name of the function for cross referencing purposes. The text of the label can also appear in the document text. So, it should be a kind of short explanation.

]]> The optional Comm attribute should be a short description of the function, usually at most one line long (this is currently nowhere used).

This element automatically produces an index entry with the name of the function and, if present, the text of the Label attribute as subentry (see also  and ). <Oper> Oper

]]> This element is used within a ManSection element to specify the usage of an operation. The attributes are used exactly in the same way as in the Func element (see ).

Note that multiple descriptions of the same operation may occur in a document because there may be several declarations in &GAP;. Furthermore there may be several ManSections for methods of this operation (see ) which also use the same name. For reference purposes these must be distinguished by different Label attributes. <Constr> Constr

]]> This element is used within a ManSection element to specify the usage of a constructor. The attributes are used exactly in the same way as in the Func element (see ).

Note that multiple descriptions of the same constructor may occur in a document because there may be several declarations in &GAP;. Furthermore there may be several ManSections for methods of this constructor (see ) which also use the same name. For reference purposes these must be distinguished by different Label attributes. <Meth> Meth

]]> This element is used within a ManSection element to specify the usage of a method. The attributes are used exactly in the same way as in the Func element (see ).

Frequently, an operation is implemented by several different methods. Therefore it seems to be interesting to document them independently. This is possible by using the same method name in different ManSections. It is however required that these subsections and those describing the corresponding operation are distinguished by different Label attributes. <Filt> Filt

]]> This element is used within a ManSection element to specify the usage of a filter. The first four attributes are used in the same way as in the Func element (see ), except that the Arg attribute is optional.

The Type attribute can be any string, but it is thought to be something like Category or Representation. <Prop> Prop

]]> This element is used within a ManSection element to specify the usage of a property. The attributes are used exactly in the same way as in the Func element (see ).

<Attr> Attr

]]> This element is used within a ManSection element to specify the usage of an attribute (in &GAP;). The attributes are used exactly in the same way as in the Func element (see ).

<Var> Var

]]> This element is used within a ManSection element to document a global variable. The attributes are used exactly in the same way as in the Func element (see ) except that there is no Arg attribute.

<Fam> Fam

]]> This element is used within a ManSection element to document a family. The attributes are used exactly in the same way as in the Func element (see ) except that there is no Arg attribute.

<InfoClass> InfoClass

]]> This element is used within a ManSection element to document an info class. The attributes are used exactly in the same way as in the Func element (see ) except that there is no Arg attribute.

Cross Referencing and Citations Cross referencing in the &GAPDoc; system is somewhat different to the usual &LaTeX; cross referencing in so far, that a reference knows which type of object it is referencing. For example a reference to a function is distinguished from a reference to a chapter. The idea of this is, that the markup must contain this information such that the converters can produce better output. The HTML converter can for example typeset a function reference just as the name of the function with a link to the description of the function, or a chapter reference as a number with a link in the other case.

Referencing is done with the Ref element: <Ref> Ref

]]> The Ref element is defined to be EMPTY. If one of the attributes Func, Oper, Constr, Meth, Prop, Attr, Var, Fam, InfoClass, Chap, Sect, Subsect, Appendix is given then there must be exactly one of these, making the reference one to the corresponding object. The Label attribute can be specified in addition to make the reference unique, for example if more than one method with a given name is present. (Note that there is no way to specify in the DTD that exactly one of the first listed attributes must be given, this is an additional rule.)

A reference to a Label element defined below (see ) is done by giving the Label attribute and optionally the Text attribute. If the Text attribute is present its value is typeset in place of the Ref element, if linking is possible (for example in HTML). If this is not possible, the section number is typeset. This type of reference is also used for references to tables (see ).

An external reference into another book can be specified by using the BookName attribute. In this case the Label attribute or, if this is not given, the function or section like attribute, is used to resolve the reference. The generated reference points to the first hit when asking ?book name: label inside &GAP;.

The optional attribute Style can take only the values Text and Number. It can be used with references to sectioning units and it gives a hint to the converter programs, whether an explicit section number is generated or text. Normally all references to sections generate numbers and references to a &GAP; object generate the name of the corresponding object with some additional link or sectioning information, which is the behavior of Style="Text". In case Style="Number" in all cases an explicit section number is generated. So

described in section ]]> produces: described in section . <Label> Label ]]> This element is used to define a label for referencing a certain position in the document, if this is possible. If an exact reference is not possible (like in a printed version of the document) a reference to the corresponding subsection is generated. The value of the Name attribute must be unique under all Label elements. <Cite> Cite ]]> This element is for bibliography citations. It is EMPTY by definition. The attribute Key is the key for a lookup in a &BibTeX; database that has to be specified in the Bibliography element (see ). The value of the Where attribute specifies the position in the document as in the corresponding &LaTeX; syntax \cite[Where value]{Key value}. <Index> Index ]]> This element generates an index entry. The content of the element is typeset in the index. It can optionally contain a Subkey element. If one or both of the attributes Key and Subkey are given, then the attribute values are used for sorting the index entries. Otherwise the content itself is used for sorting. The attributes should be used when the content contains markup. Note that all Func and similar elements automatically generate index entries. If the TheIndex element () is not present in the document all Index elements are ignored. <URL> URL ]]> This element is for references into the internet. It specifies an URL and optionally a text which can be used for a link (like in HTML or PDF versions of the document). This can be specified in two ways: Either the URL is given as element content and the text is given in the optional Text attribute (in this case the text cannot contain further markup), or the element contains the two elements Link and LinkText which in turn contain the URL and the text, respectively. The default value for the text is the URL itself. <Email> Email ]]> This element type is the special case of an URL specifying an email address. The content of the element should be the email address without any prefix like mailto:. This address is typeset by all converters, also without any prefix. In the case of an output document format like HTML the converter can produce a link with a mailto: prefix. <Homepage> Homepage ]]> This element type is the special case of an URL specifying a WWW-homepage.
Structural Elements like Lists The &GAPDoc; system offers some limited access to structural elements like lists, enumerations, and tables. Although it is possible to use all &LaTeX; constructs one always has to think about other output formats. The elements in this section are guaranteed to produce something reasonable in all output formats. <List> List ]]> This element produces a list. Each item in the list corresponds to an Item element. Every Item element is optionally preceded by a Mark element. The content of this is used as a marker for the item. Note that this marker can be a whole word or even a sentence. It will be typeset in some emphasized fashion and most converters will provide some indentation for the rest of the item.

The Only and Not attributes can be used to specify, that the list is included into the output by only one type of converter (Only) or all but one type of converter (Not). Of course at most one of the two attributes may occur in one element. The following values are allowed as of now: LaTeX, HTML, and Text. See also the Alt element in for more about text alternatives for certain converters. <Mark> Mark

]]> This element is used in the List element to mark items. See for an explanation.
<Item> Item ]]> This element is used in the List, Enum, and Table elements to specify the items. See sections , , and for further information. <Enum> Enum ]]> This element is used like the List element (see ) except that the items must not have marks attached to them. Instead, the items are numbered automatically. The same comments about the Only and Not attributes as above apply. <Table> Table <Caption> <Row> <Align> <HorLine> <Item> in <Table> ]]> A table in &GAPDoc; consists of an optional Caption element followed by a sequence of Row and HorLine elements. A HorLine element produces a horizontal line in the table. A Row element consists of a sequence of Item elements as they also occur in List and Enum elements. The Only and Not attributes have the same functionality as described in the List element in .

The Align attribute is written like a &LaTeX; tabular alignment specifier but only the letters l, r, c, and | are allowed meaning left alignment, right alignment, centered alignment, and a vertical line as delimiter between columns respectively.

If the Label attribute is there, one can reference the table with the Ref element (see ) using its Label attribute.

Usually only simple tables should be used. If you want a complicated table in the &LaTeX; output you should provide alternatives for text and HTML output. Note that in HTML-4.0 there is no possibility to interpret the | column separators and HorLine elements as intended. There are lines between all columns and rows or no lines at all.

Types of Text This section covers the markup of text. Various types of text exist. The following elements are used in the &GAPDoc; system to mark them. They mostly come in pairs, one long name which is easier to remember and a shortcut to make the markup lighter.

Most of the following elements are thought to contain only character data and no further markup elements. It is however necessary to allow Alt elements to resolve the entities described in section . <Emph> and <E> Emph E

]]> This element is used to emphasize some piece of text. It may contain %InnerText; (see ). <Quoted> and <Q> Quoted Q ]]> This element is used to put some piece of text into  -quotes. It may contain %InnerText; (see ). <Keyword> and <K> Keyword K ]]> This element is used to mark something as a keyword. Usually this will be a &GAP; keyword such as if or for. No further markup elements are allowed within this element except for the Alt element, which is necessary. <Arg> and <A> Arg A ]]> This element is used inside Descriptions in ManSections to mark something as an argument (of a function, operation, or such). It is guaranteed that the converters typeset those exactly as in the definition of functions. No further markup elements are allowed within this element. <Code> and <C> Code C ]]> This element is used to mark something as a piece of code like for example a &GAP; expression. It is guaranteed that the converters typeset this exactly as in the Listing element (compare section ). The only further markup elements allowed within this element are <Arg> elements (see ). <File> and <F> File F ]]> This element is used to mark something as a filename or a pathname in the file system. No further markup elements are allowed within this element. <Button> and <B> Button B ]]> This element is used to mark something as a button. It can also be used for other items in a graphical user interface like menus, menu entries, or keys. No further markup elements are allowed within this element. <Package> Package ]]> This element is used to mark something as a name of a package. This is for example used to define the entities &GAP;, &XGAP; or &GAPDoc; (see section ). No further markup elements are allowed within this element. <Listing> Listing ]]> This element is used to embed listings of programs into the document. Only character data and no other elements are allowed in the content. You should not use the character entities described in section but instead type the characters directly. Only the general XML rules from section apply. Note especially the usage of <![CDATA[ sections described there. It is guaranteed that all converters use a fixed width font for typesetting Listing elements. Compare also the usage of the Code and C elements in .

The Type attribute contains a comment about the type of listed code. It may appear in the output. <Log> and <Example> Log Example

]]> These two elements behave exactly like the Listing element (see ). They are thought for protocols of &GAP; sessions. The only difference between the two is that Example sections are intended to be subject to an automatic manual checking mechanism used to ensure the correctness of the &GAP; manual whereas Log is not touched by this (see section for checking tools).

To get a good layout of the examples for display in a standard terminal we suggest to use SizeScreen([72]); (see ) in your &GAP; session before producing the content of Example elements. <Verb> There is one further type of verbatim-like element.

]]> The content of such an element is guaranteed to be put into an output version exactly as it is using some fixed width font. Before the content a new line is started. If the line after the end of the start tag consists of whitespace only then this part of the content is skipped.

This element is intended to be used together with the Alt element to specify pre-formatted ASCII alternatives for complicated Display formulae or Tables.

Elements for Mathematical Formulae <Math> and <Display> Math Display ]]> These elements are used for mathematical formulae. As described in section they correspond to &LaTeX;'s math and display math mode respectively.

The formulae are typed in as in &LaTeX;, except that the standard XML entities, see  (in particular the characters < and &), must be escaped - either by using the corresponding entities or by enclosing the formula between <![CDATA[ and ]]>. (The main reference for &LaTeX; is .)

It is also possible to use some unicode characters for mathematical symbols directly, provided that it can be translated by into "LaTeX" encoding and that with arguments "latin1" and "single" returns something sensible. Currently, we support entities &CC;, &ZZ;, &NN;, &PP;, &QQ;, &HH;, &RR; for the corresponding black board bold letters &CC;, &ZZ;, &NN;, &PP;, &QQ;, &HH; and &RR;, respectively.

The only element type that is allowed within the formula elements is the Arg or A element (see ), which is used to typeset identifiers that are arguments to &GAP; functions or operations.

If a Display element has an attribute Mode with value "M", then the formula is formatted as in M elements (see ). Otherwise in text and HTML output the formula is shown as &LaTeX; source code.

For simple formulae (and you should try to make all your formulae simple!) attempt to use the M element or the Mode="M" attribute in Display for which there is a well defined translation into text, which can be used for text and HTML output versions of the document. So, if possible try to avoid the Math elements and Display elements without attribute or provide useful text substitutes for complicated formulae via Alt elements (see  and ). <M> M

]]> The M element type is intended for formulae in the running text for which there is a sensible text version. For the &LaTeX; version of a &GAPDoc; document the M and Math elements are equivalent. The remarks in about special characters and the Arg element apply here as well. A document which has all formulae enclosed in M elements can be well readable in text terminal output and printed output versions.

Compared to former versions of &GAPDoc; many more formulae can be put into M elements. Most modern terminal emulations support unicode characters and many mathematical symbols can now be represented by such characters. But even if a terminal can only display ASCII characters, the user will see some not too bad representation of a formula.

As examples, here are some &LaTeX; macros which have a sensible ASCII translation and are guaranteed to be translated accordingly by text (and HTML) converters (for a full list of handled Macros see RecNames(TEXTMTRANSLATIONS)): \ast * \bf \bmod mod \cdot * \colon : \equiv = \geq >= \germ \hookrightarrow -> \iff <=> \langle < \ldots ... \left   \leq <= \leftarrow <- \Leftarrow <= \limits   \longrightarrow --> \Longrightarrow ==> \mapsto -> \mathbb   \mathop   \mid | \pmod mod \prime ' \rangle > \right   \rightarrow -> \Rightarrow => \rm, \sf, \textrm, \text \setminus \ \thinspace \times x \to -> \vert | \! \, \;   \{ { \} }
&LaTeX; macros with special text translation
In all other macros only the backslash is removed (except for some macros describing more exotic symbols). Whitespace is normalized (to one blank) but not removed. Note that whitespace is not added, so you may want to add a few more spaces than you usually do in your &LaTeX; documents.

Braces {} are removed in general, however pairs of double braces are converted to one pair of braces. This can be used to write <M>x^{12}</M> for x^12 and <M>x_{{i+1}}</M> for x_{i+1}.

Everything else <Alt> Alt This element is used to specify alternatives for different output formats within normal text. See also sections , , and for alternatives in lists and tables. ]]> Of course exactly one of the two attributes must occur in one element. The attribute values must be one word or a list of words, separated by spaces or commas. The words which are currently recognized by the converter programs contained in &GAPDoc; are: LaTeX, HTML, and Text. If the Only attribute is specified then only the corresponding converter will include the content of the element into the output document. If the Not attribute is specified the corresponding converter will ignore the content of the element. You can use other words to specify special alternatives for other converters of &GAPDoc; documents.

In the case of HTML there is a second word which is recognized and this can either be MathJax or noMathJax. For example a pair of Alt elements with <Alt Only="HTML noMathJax">... and <Alt Not="HTML noMathJax">... could provide special content for the case of HTML output without use of MathJax and every other output.

We fix a rule for handling the content of an Alt element with Only attribute. In their content code for the corresponding output format is included directly. So, in case of HTML the content is HTML code, in case of &LaTeX; the content is &LaTeX; code. The converters don't apply any handling of special characters to this content. In the case of &LaTeX; the formatting of the code is not changed.

Within the element only %InnerText; (see ) is allowed. This is to ensure that the same set of chapters, sections, and subsections show up in all output formats. <Par> and <P> Par P

]]> This EMPTY element marks the boundary of paragraphs. Note that an empty line in the input does not mark a new paragraph as opposed to the &LaTeX; convention.

(Remark: it would be much easier to parse a document and to understand its sectioning and paragraph structure when there was an element whose content is the text of a paragraph. But in practice many paragraph boundaries are implicitly clear which would make it somewhat painful to enclose each paragraph in extra tags. The introduction of the P or Par elements as above delegates this pain to the writer of a conversion program for &GAPDoc; documents.) <Br> Br

]]> This element can be used to force a line break in the output versions of a &GAPDoc; element, it does not start a new paragraph. Please, do not use this instead of a Par element, this would often lead to ugly output versions of your document.
<Ignore> Ignore ]]> This element can appear anywhere. Its content is ignored by the standard converters. It can be used, for example, to include data which are not part of the actual &GAPDoc; document, like source code, or to make not finished parts of the document invisible.

Of course, one can use special converter programs which extract the contents of Ignore elements. Information on the type of the content can be stored in the optional attribute Remark.

GAPDoc-1.6.4/doc/test.bib0000644000175100017510000000021413714505036014102 0ustar luebeckldfm@string{ j = "Important Journal" } @article{ AB2000, Author= "Fritz A. First and Sec, X. Y.", TITLE="Short", journal = j, year = 2000 } GAPDoc-1.6.4/doc/testbib.xml0000644000175100017510000000136213714505036014630 0ustar luebeckldfm
Fritz A.First X. Y.Secőnd The <Wrap Name="Package"> <C>F</C>ritz</Wrap> package for the formula <M>x^y - l_{{i+1}} \rightarrow \mathbb{R}</M> 2000 13 13–25 Online data at http://www.publish.com/~ImpJ/123#data very useful
GAPDoc-1.6.4/doc/textutil.xml0000644000175100017510000000335413714505036015061 0ustar luebeckldfm String and Text Utilities
Text Utilities This section describes some utility functions for handling texts within &GAP;. They are used by the functions in the &GAPDoc; package but may be useful for other purposes as well. We start with some variables containing useful strings and go on with functions for parsing and reformatting text.

<#Include Label="CharsColls"> <#Include Label="TextAttr"> <#Include Label="WrapTextAttribute"> <#Include Label="FormatParagraph"> <#Include Label="SubstitutionSublist"> <#Include Label="StripBeginEnd"> <#Include Label="StripEscapeSequences"> <#Include Label="RepeatedString"> <#Include Label="NumberDigits"> <#Include Label="LabelInt"> <#Include Label="PositionMatchingDelimiter"> <#Include Label="WordsString"> <#Include Label="Base64String">

Unicode Strings The &GAPDoc; package provides some tools to deal with unicode characters and strings. These can be used for recoding text strings between various encodings. <#Include Label="Unicode"> <#Include Label="Encode"> <#Include Label="WidthUTF8String"> <#Include Label="InitialSubstringUTF8String">
Print Utilities The following printing utilities turned out to be useful for interactive work with texts in &GAP;. But they are more general and so we document them here. <#Include Label="PrintTo1"> <#Include Label="StringPrint"> <#Include Label="PrintFormattedString"> <#Include Label="Page"> <#Include Label="StringFile">
GAPDoc-1.6.4/doc/chapA.txt0000644000175100017510000000657013714505040014230 0ustar luebeckldfm A The File 3k+1.xml Here is the complete source of the example GAPDoc document 3k+1.xml discussed in Section 1.2.  3k+1.xml            The <Package>ThreeKPlusOne</Package> Package  Version 42  Dummy Authör  3kplusone@dev.null     ©right; 2000 The Author.

  You can do with this package what you want.

Really.         The 3k+1 Problem 

Theory  Let k \in &NN; be a natural number. We consider the  sequence n(i, k), i \in &NN;, with n(1, k) = k and  else n(i+1, k) = n(i, k) / 2 if n(i, k) is even  and n(i+1, k) = 3 n(i, k) + 1 if n(i, k) is odd. 

It is not known whether for any natural number k \in  &NN; there is an m \in &NN; with n(m, k) = 1. 

  ThreeKPlusOne provides the function to explore this for given  n. If you really want to know something about this  problem, see or  http://www.ku.de/mgf/mathematik/lehrstuhlstatistik/team/dr-guenther-wirsching/  for more details (and forget this package). 

  
Program  In this section we describe the main function of this package.        This function computes for a natural number k the  beginning of the sequence n(i, k) defined in section  . The sequence stops at the first  1 or at n(max, k), if max is  given.  gap> ThreeKPlusOneSequence(101); "Sorry, not yet implemented. Wait for Version 84 of the package"      
        
   GAPDoc-1.6.4/doc/chapB.txt0000644000175100017510000005543213714505040014232 0ustar luebeckldfm B The File gapdoc.dtd For easier reference we repeat here the complete content of the file gapdoc.dtd.  gapdoc.dtd                                            GAP"> GAPDoc"> {\TeX}
TeX"> {\LaTeX}
LaTeX"> {Bib\TeX}BibTeX"> MeatAxe"> XGAP">                                                                                                                                                                                                                                                                                               GAPDoc-1.6.4/doc/chap7.txt0000644000175100017510000014261013714505040014212 0ustar luebeckldfm 7 Utilities for Bibliographies A standard for collecting references (in particular to mathematical texts) is BibTeX (http://www.ctan.org/tex-archive/biblio/bibtex/distribs/doc/). A disadvantage of BibTeX is that the format of the data is specified with the use by LaTeX in mind. The data format is less suited for conversion to other document types like plain text or HTML. In the first section we describe utilities for using data from BibTeX files in GAP. In the second section we introduce a new XML based data format BibXMLext for bibliographies which seems better suited for other tasks than using it with LaTeX. Another section will describe utilities to deal with BibXMLext data in GAP. 7.1 Parsing BibTeX Files Here are functions for parsing, normalizing and printing reference lists in BibTeX format. The reference describing this format is [Lam85, Appendix B]. 7.1-1 ParseBibFiles ParseBibFiles( bibfile1[, bibfile2[, ...]] )  function ParseBibStrings( str1[, str2[, ...]] )  function Returns: list [list of bib-records, list of abbrevs, list of expansions] The first function parses the files bibfile1 and so on (if a file does not exist the extension .bib is appended) in BibTeX format and returns a list as follows: [entries, strings, texts]. Here entries is a list of records, one record for each reference contained in bibfile. Then strings is a list of abbreviations defined by @string-entries in bibfile and texts is a list which contains in the corresponding position the full text for such an abbreviation. The second function does the same, but the input is given as GAP strings str1 and so on. The records in entries store key-value pairs of a BibTeX reference in the form rec(key1 = value1, ...). The names of the keys are converted to lower case. The type of the reference (i.e., book, article, ...) and the citation key are stored as components .Type and .Label. The records also have a .From field that says that the data are read from a BibTeX source. As an example consider the following BibTeX file.  doc/test.bib  @string{ j = "Important Journal" } @article{ AB2000, Author= "Fritz A. First and Sec, X. Y.",  TITLE="Short", journal = j, year = 2000 }   Example  gap> bib := ParseBibFiles("doc/test.bib"); [ [ rec( From := rec( BibTeX := true ), Label := "AB2000",   Type := "article", author := "Fritz A. First and Sec, X. Y."  , journal := "Important Journal", title := "Short",   year := "2000" ) ], [ "j" ], [ "Important Journal" ] ]  7.1-2 NormalizedNameAndKey NormalizedNameAndKey( namestr )  function Returns: list of strings and names as lists NormalizeNameAndKey( r )  function Returns: nothing The argument namestr must be a string describing an author or a list of authors as described in the BibTeX documentation in [Lam85, Appendix B 1.2]. The function NormalizedNameAndKey returns a list of the form [ normalized name string, short key, long key, names as lists]. The first entry is a normalized form of the input where names are written as lastname, first name initials. The second and third entry are the name parts of a short and long key for the bibliography entry, formed from the (initials of) last names. The fourth entry is a list of lists, one for each name, where a name is described by three strings for the last name, the first name initials and the first name(s) as given in the input. The function NormalizeNameAndKey gets as argument r a record for a bibliography entry as returned by ParseBibFiles (7.1-1). It substitutes .author and .editor fields of r by their normalized form, the original versions are stored in fields .authororig and .editororig. Furthermore a short and a long citation key is generated and stored in components .printedkey (only if no .key is already bound) and .keylong. We continue the example from ParseBibFiles (7.1-1).  Example  gap> bib := ParseBibFiles("doc/test.bib");; gap> NormalizedNameAndKey(bib[1][1].author); [ "First, F. A. and Sec, X. Y.", "FS", "firstsec",   [ [ "First", "F. A.", "Fritz A." ], [ "Sec", "X. Y.", "X. Y." ] ] ] gap> NormalizeNameAndKey(bib[1][1]); gap> bib[1][1]; rec( From := rec( BibTeX := true ), Label := "AB2000",   Type := "article", author := "First, F. A. and Sec, X. Y.",   authororig := "Fritz A. First and Sec, X. Y.",   journal := "Important Journal", keylong := "firstsec2000",   printedkey := "FS00", title := "Short", year := "2000" )  7.1-3 WriteBibFile WriteBibFile( bibfile, bib )  function Returns: nothing This is the converse of ParseBibFiles (7.1-1). Here bib either must have a format as list of three lists as it is returned by ParseBibFiles (7.1-1). Or bib can be a record as returned by ParseBibXMLextFiles (7.3-4). A BibTeX file bibfile is written and the entries are formatted in a uniform way. All given abbreviations are used while writing this file. We continue the example from NormalizeNameAndKey (7.1-2). The command  Example  gap> WriteBibFile("nicer.bib", bib);  produces a file nicer.bib as follows:  nicer.bib  @string{j = "Important Journal" }  @article{ AB2000,  author = {First, F. A. and Sec, X. Y.},  title = {Short},  journal = j,  year = {2000},  authororig = {Fritz A. First and Sec, X. Y.},  keylong = {firstsec2000},  printedkey = {FS00} }  7.1-4 LabelsFromBibTeX LabelsFromBibTeX( path, keys, bibfiles, style )  function Returns: a list of pairs of strings [key, label] This function uses bibtex to determine the ordering of a list of references and a label for each entry which is typeset in a document citing these references. The argument path is a directory specified as string or directory object. The argument bibfiles must be a list of files in BibTeX format, each specified by a path relative to the first argument, or an absolute path (starting with '/') or relative to the GAP roots (starting with "gap://"). The list keys must contain strings which occur as keys in the given BibTeX files. Finally the string style must be the name of a bibliography style (like "alpha"). The list returned by this function contains pairs [key, label] where key is one of the entries of keys and label is a string used for citations of the bibliography entry in a document. These pairs are ordered as the reference list produced by BibTeX.  Example  gap> f := Filename(DirectoriesPackageLibrary("gapdoc","doc"), "test.bib");; gap> LabelsFromBibTeX(".", ["AB2000"], [f], "alpha"); [ [ "AB2000", "FS00" ] ]  7.1-5 InfoBibTools InfoBibTools  info class The default level of this info class is 1. Functions like ParseBibFiles (7.1-1), StringBibAs... are then printing some information. You can suppress it by setting the level of InfoBibTools to 0. With level 2 there may be some more information for debugging purposes. 7.2 The BibXMLext Format Bibliographical data in BibTeX files have the disadvantage that the actual data are given in LaTeX syntax. This makes it difficult to use the data for anything but for LaTeX, say for representations of the data as plain text or HTML. For example: mathematical formulae are in LaTeX $ environments, non-ASCII characters can be specified in many strange ways, and how to specify URLs for links if the output format allows them? Here we propose an XML data format for bibliographical data which addresses these problems, it is called BibXMLext. In the next section we describe some tools for generating (an approximation to) this data format from BibTeX data, and for using data given in BibXMLext format for various purposes. The first motivation for this development was the handling of bibliographical data in GAPDoc, but the format and the tools are certainly useful for other purposes as well. We started from a DTD bibxml.dtd which is publicly available, say from http://bibtexml.sf.net/. This is essentially a reformulation of the definition of the BibTeX format, including several of some widely used further fields. This has already the advantage that a generic XML parser can check the validity of the data entries, for example for missing compulsary fields in entries. We applied the following changes and extensions to define the DTD for BibXMLext, stored in the file bibxmlext.dtd which can be found in the root directory of this GAPDoc package (and in Appendix C): names Lists of names in the author and editor fields in BibTeX are difficult to parse. Here they must be given by a sequence of -elements which each contain an optional - and a -element for the first and last names, respectively.  and  These elements enclose mathematical formulae, the content is LaTeX code (without the $). These should be handled in the same way as the elements with the same names in GAPDoc, see 3.8-2 and 3.8-1. In particular, simple formulae which have a well defined plain text representation can be given in -elements. Encoding Note that in XML files we can use the full range of unicode characters, see http://www.unicode.org/. All non-ASCII characters should be specified as unicode characters. This makes dealing with special characters easy for plain text or HTML, only for use with LaTeX some sort of translation is necessary.  These elements are allowed everywhere in the text and should be represented by links in converted formats which allow this. It is used in the same way as the element with the same name in GAPDoc, see 3.5-5.  and  Sometimes information should be given in different ways, depending on the output format of the data. This is possible with the -elements with the same definition as in GAPDoc, see 3.9-1.  This element should be used to protect text from case changes by converters (the extra {} characters in BibTeX title fields).  and  The -element defines key-value pairs which can be used in any field via the -element (not only for whole fields but also parts of the text).  This is a generic element for fields which are otherwise not supported. An arbitrary number of them is allowed for each entry, so any kind of additional data can be added to entries.  This generic element is allowed inside all fields. This markup will be just ignored (but not the element content) by our standard tools. But it can be a useful hook for introducing arbitrary further markup (and our tools can easily be extended to handle it). Extra entities The DTD defines the standard XML entities (2.1-10 and the entities   (non-breakable space), – and ©right;. Use – in page ranges. For further details of the DTD we refer to the file bibxmlext.dtd itself which is shown in appendix C. That file also recalls some information from the BibTeX documentation on how the standard fields of entries should be used. Which entry types and which fields are supported (and the ordering of the fields which is fixed by a DTD) can be either read off the DTD, or within GAP one can use the function TemplateBibXML (7.3-10) to get templates for the various entry types. Here is an example of a BibXMLext document:  doc/testbib.xml      
    Fritz A.First  X. Y.Secőnd    The Fritz package for the   formula x^y - l_{{i+1}} \rightarrow \mathbb{R}    2000  13  13–25  Online data at   http://www.publish.com/~ImpJ/123#data  very useful 
 
   There is a standard XML header and a DOCTYPE declaration referring to the bibxmlext.dtd DTD mentioned above. Local entities could be defined in the DOCTYPE tag as shown in the example in 2.2-3. The actual content of the document is inside a -element, it consists of - and -elements. Several of the BibXMLext markup features are shown. We will use this input document for some examples below. 7.3 Utilities for BibXMLext data 7.3-1 Translating BibTeX to BibXMLext First we describe a tool which can translate bibliography entries from BibTeX data to BibXMLext -elements. It also does some validation of the data. In some cases it is desirable to improve the result by hand afterwards (editing formulae, adding -elements, translating non-ASCII characters to unicode, ...). See WriteBibXMLextFile (7.3-5) below for how to write the results to a BibXMLext file. 7.3-2 HeuristicTranslationsLaTeX2XML.Apply HeuristicTranslationsLaTeX2XML.Apply( str )  function Returns: a string HeuristicTranslationsLaTeX2XML.ApplyToFile( fnam[, outnam] )  function Returns: nothing These utilities translate some LaTeX code into text in UTF-8 encoding. The input is given as a string str, or a file name fnam, respectively. The first function returns the translated string. The second function with one argument overwrites the given file with the translated text. Optionally, the translated file content can be written to another file, if its name is given as second argument outnam. The record HeuristicTranslationsLaTeX2XML mainly contains translations of LaTeX macros for special characters which were found in hundreds of BibTeX entries from MathSciNet (http://www.ams.org/mathscinet/). Just look at this record if you want to know how it works. It is easy to extend, and if you have improvements which may be of general interest, please send them to the GAPDoc author.  Example  gap> s := "\\\"u\\'{e}\\`e{\\ss}";; gap> Print(s, "\n");  \"u\'{e}\`e{\ss} gap> Print(HeuristicTranslationsLaTeX2XML.Apply(s),"\n"); üéèß  7.3-3 StringBibAsXMLext StringBibAsXMLext( bibentry[, abbrvs, vals][, encoding] )  function Returns: a string with XML code, or fail The argument bibentry is a record representing an entry from a BibTeX file, as returned in the first list of the result of ParseBibFiles (7.1-1). The optional two arguments abbrvs and vals can be lists of abbreviations and substitution strings, as returned as second and third list element in the result of ParseBibFiles (7.1-1). The optional argument encoding specifies the character encoding of the string components of bibentry. If this is not given it is checked if all strings are valid UTF-8 encoded strings, in that case it is assumed that the encoding is UTF-8, otherwise the latin1 encoding is assumed. The function StringBibAsXMLext creates XML code of an -element in BibXMLext format. The result is in UTF-8 encoding and contains some heuristic translations, like splitting name lists, finding places for -elements, putting formulae in -elements, substituting some characters. The result should always be checked and maybe improved by hand. Some validity checks are applied to the given data, for example if all non-optional fields are given. If this check fails the function returns fail. If your BibTeX input contains LaTeX markup for special characters, it can be convenient to translate this input with HeuristicTranslationsLaTeX2XML.Apply (7.3-2) or HeuristicTranslationsLaTeX2XML.ApplyToFile (7.3-2) before parsing it as BibTeX. As an example we consider again the short BibTeX file doc/test.bib shown in the example for ParseBibFiles (7.1-1).  Example  gap> bib := ParseBibFiles("doc/test.bib");; gap> str := StringBibAsXMLext(bib[1][1], bib[2], bib[3]);; gap> Print(str, "\n"); 
    Fritz A.First  X. Y.Sec    Short    2000 
  The following functions allow parsing of data which are already in BibXMLext format. 7.3-4 ParseBibXMLextString ParseBibXMLextString( str[, res] )  function ParseBibXMLextFiles( fname1[, fname2[, ...]] )  function Returns: a record with fields .entries, .strings and .entities The first function gets a string str containing a BibXMLext document or a part of it. It returns a record with the three mentioned fields. Here .entries is a list of partial XML parse trees for the -elements in str. The field .strings is a list of key-value pairs from the -elements in str. And .strings is a list of name-value pairs of the named entities which were used during the parsing. The optional argument res can be the result of a former call of this function, in that case the newly parsed entries are added to this data structure. The second function ParseBibXMLextFiles uses the first on the content of all files given by filenames fname1 and so on. It collects the results in a single record. As an example we parse the file testbib.xml shown in 7.2.  Example  gap> bib := ParseBibXMLextFiles("doc/testbib.xml");; gap> RecNames(bib); [ "entries", "strings", "entities" ] gap> bib.entries; [ ] gap> bib.strings; [ [ "j", "Important Journal" ] ] gap> bib.entities[1];  [ "amp", "&#38;" ]  7.3-5 WriteBibXMLextFile WriteBibXMLextFile( fname, bib )  function Returns: nothing This function writes a BibXMLext file with name fname. There are three possibilities to specify the bibliography entries in the argument bib. It can be a list of three lists as returned by ParseBibFiles (7.1-1). Or it can be just the first of such three lists in which case the other two lists are assumed to be empty. To all entries of the (first) list the function StringBibAsXMLext (7.3-3) is applied and the resulting strings are written to the result file. The third possibility is that bib is a record in the format as returned by ParseBibXMLextString (7.3-4) and ParseBibXMLextFiles (7.3-4). In this case the entries for the BibXMLext file are produced with StringXMLElement (5.2-2), and if bib.entities is bound then it is tried to resubstitute parts of the string by the given entities with EntitySubstitution (5.2-3). As an example we write back the result of the example shown for ParseBibXMLextFiles (7.3-4) to an equivalent XML file.  Example  gap> bib := ParseBibXMLextFiles("doc/testbib.xml");; gap> WriteBibXMLextFile("test.xml", bib);  7.3-6 Bibliography Entries as Records For working with BibXMLext entries we find it convenient to first translate the parse tree of an entry, as returned by ParseBibXMLextFiles (7.3-4), to a record with the field names of the entry as components whose value is the content of the field as string. These strings are generated with respect to a result type. The records are generated by the following function which can be customized by the user. 7.3-7 RecBibXMLEntry RecBibXMLEntry( entry[, restype][, strings][, options] )  function Returns: a record with fields as strings This function generates a content string for each field of a bibliography entry and assigns them to record components. This content may depend on the requested result type and possibly some given options. The arguments are as follows: entry is the parse tree of an  element as returned by ParseBibXMLextString (7.3-4) or ParseBibXMLextFiles (7.3-4). The optional argument restype describes the type of the result. This package supports currently the types "BibTeX", "Text" and "HTML". The default is "BibTeX". The optional argument strings must be a list of key-value pairs as returned in the component .strings in the result of ParseBibXMLextString (7.3-4). The argument options must be a record. If the entry contains an author field then the result will also contain a component .authorAsList which is a list containing for each author a list with three entries of the form [last name, first name initials, first name] (the third entry means the first name as given in the data). Similarly, an editor field is accompanied by a component .editorAsList. The following options are currently supported. If options.fullname is bound and set to true then the full given first names for authors and editors will be used, the default is to use the initials of the first names. Also, if options.namefirstlast is bound and set to true then the names are written in the form first-name(s) last-name, the default is the form last-name, first-name(s). If options.href is bound and set to false then the "BibTeX" type result will not use \href commands. The default is to produce \href commands from -elements such that LaTeX with the hyperref package can produce links for them. The content of an -element with Only-attribute is included if restype is given in the attribute and ignored otherwise, and vice versa in case of a Not-attribute. If options.useAlt is bound, it must be a list of strings to which restype is added. Then an -element with Only-attribute is evaluated if the intersection of options.useAlt and the types given in the attribute is not empty. In case of a Not-attribute the element is evaluated if this intersection is empty. If restype is "BibTeX" then the string fields in the result will be recoded with Encode (6.2-2) and target "LaTeX". If options.hasLaTeXmarkup is bound and set to true (for example, because the data are originally read from BibTeX files), then the target "LaTeXleavemarkup" will be used. We use again the file shown in the example for ParseBibXMLextFiles (7.3-4).  Example  gap> bib := ParseBibXMLextFiles("doc/testbib.xml");; gap> e := bib.entries[1];; strs := bib.strings;; gap> Print(RecBibXMLEntry(e, "BibTeX", strs), "\n"); rec(  From := rec(  BibXML := true,  options := rec(  ),  type := "BibTeX" ),  Label := "AB2000",  Type := "article",  author := "First, F. A. and Sec{\\H o}nd, X. Y.",  authorAsList :=   [ [ "First", "F. A.", "Fritz A." ],   [ "Sec\305\221nd", "X. Y.", "X. Y." ] ],  journal := "Important Journal",  mycomment := "very useful",  note :=   "Online data at \\href {http://www.publish.com/~ImpJ/123#data} {Bla\  Bla Publisher}",  number := "13",  pages := "13{\\textendash}25",  printedkey := "FS00",  title :=   "The {F}ritz package for the \n formula $x^y - l_{{i+1}} \ \\rightarrow \\mathbb{R}$",  year := "2000" ) gap> Print(RecBibXMLEntry(e, "HTML", strs).note, "\n"); Online data at Bla Bla\  Publisher  7.3-8 AddHandlerBuildRecBibXMLEntry AddHandlerBuildRecBibXMLEntry( elementname, restype, handler )  function Returns: nothing The argument elementname must be the name of an entry field supported by the BibXMLext format, the name of one of the special elements "C", "M", "Math", "URL" or of the form "Wrap:myname" or any string "mytype" (which then corresponds to entry fields ). The string "Finish" has an exceptional meaning, see below. restype is a string describing the result type for which the handler is installed, see RecBibXMLEntry (7.3-7). For both arguments, elementname and restype, it is also possible to give lists of the described ones for installing several handler at once. The argument handler must be a function with five arguments of the form handler(entry, r, restype, strings, options). Here entry is a parse tree of a BibXMLext -element, r is a node in this tree for an element elementname, and restype, strings and options are as explained in RecBibXMLEntry (7.3-7). The function should return a string representing the content of the node r. If elementname is of the form "Wrap:myname" the handler is used for elements of form .... If elementname is "Finish" the handler should look like above except that now r is the record generated by RecBibXMLEntry (7.3-7) just before it is returned. Here the handler should return nothing. It can be used to manipulate the record r, for example for changing the encoding of the strings or for adding some more components. The installed handler is called by BuildRecBibXMLEntry(entry, r, restype, strings, options). The string for the whole content of an element can be generated by ContentBuildRecBibXMLEntry(entry, r, restype, strings, options). We continue the example from RecBibXMLEntry (7.3-7) and install a handler for the -element such that LaTeX puts its content in a sans serif font.  Example  gap> AddHandlerBuildRecBibXMLEntry("Wrap:Package", "BibTeX", > function(entry, r, restype, strings, options) >  return Concatenation("\\textsf{", ContentBuildRecBibXMLEntry( >  entry, r, restype, strings, options), "}"); > end); gap>  gap> Print(RecBibXMLEntry(e, "BibTeX", strs).title, "\n"); The \textsf{ {F}ritz} package for the   formula $x^y - l_{{i+1}} \rightarrow \mathbb{R}$ gap> Print(RecBibXMLEntry(e, "Text", strs).title, "\n");  The Fritz package for the   formula x^y - l_{i+1} → R gap> AddHandlerBuildRecBibXMLEntry("Wrap:Package", "BibTeX", "Ignore");  7.3-9 StringBibXMLEntry StringBibXMLEntry( entry[, restype][, strings][, options] )  function Returns: a string The arguments of this function have the same meaning as in RecBibXMLEntry (7.3-7) but the return value is a string representing the bibliography entry in a format specified by restype (default is "BibTeX"). Currently, the following cases for restype are supported: "BibTeX" A string with BibTeX source code is generated. "Text" A text representation of the text is returned. If options.ansi is bound it must be a record. The components must have names Bib_Label, Bib_author, and so on for all fieldnames. The value of each component is a pair of strings which will enclose the content of the field in the result or the first of these strings in which case the default for the second is TextAttr.reset (see TextAttr (6.1-2)). If you give an empty record here, some default ANSI color markup will be used. "HTML" An HTML representation of the bibliography entry is returned. The text from each field is enclosed in markup (mostly 
-elements) with the class attribute set to the field name. This allows a detailed layout of the code via a style sheet file. If options.MathJax is bound and has the value true then formulae are encoded for display on pages with MathJax support. We use again the file shown in the example for ParseBibXMLextFiles (7.3-4).  Example  gap> bib := ParseBibXMLextFiles("doc/testbib.xml");; gap> e := bib.entries[1];; strs := bib.strings;; gap> ebib := StringBibXMLEntry(e, "BibTeX", strs);; gap> PrintFormattedString(ebib); @article{ AB2000,  author = {First, F. A. and Sec{\H o}nd, X. Y.},  title = {The {F}ritz package for the formula $x^y -  l_{{i+1}} \rightarrow \mathbb{R}$},  journal = {Important Journal},  number = {13},  year = {2000},  pages = {13{\textendash}25},  note = {Online data at \href  {http://www.publish.com/~ImpJ/123#data} {Bla  Bla Publisher}},  mycomment = {very useful},  printedkey = {FS00} } gap> etxt := StringBibXMLEntry(e, "Text", strs);;  gap> etxt := SimplifiedUnicodeString(Unicode(etxt), "latin1", "single");; gap> etxt := Encode(etxt, GAPInfo.TermEncoding);;  gap> PrintFormattedString(etxt); [FS00] First, F. A. and Second, X. Y., The Fritz package for the formula x^y - l_{i+1} ? R, Important Journal, 13 (2000), 13-25, (Online data at Bla Bla Publisher (http://www.publish.com/~ImpJ/123#data)). gap> ehtml := StringBibXMLEntry(e, "HTML", strs, rec(MathJax := true));; gap> ehtml := Encode(Unicode(ehtml), GAPInfo.TermEncoding);; gap> PrintFormattedString(ehtml); 

 [FS00]   First, F. A. and Secőnd, X. Y.,  The Fritz package for the   formula \(x^y - l_{{i+1}} \rightarrow \mathbb{R}\),  Important Journal  (13)  (2000),  13–25
 (Online data at  Bla Bla  Publisher). 

   The following command may be useful to generate completly new bibliography entries in BibXMLext format. It also informs about the supported entry types and field names. 7.3-10 TemplateBibXML TemplateBibXML( [type] )  function Returns: list of types or string Without an argument this function returns a list of the supported entry types in BibXMLext documents. With an argument type of one of the supported types the function returns a string which is a template for a corresponding BibXMLext entry. Optional field elements have a * appended. If an element has the word OR appended, then either this element or the next must/can be given, not both. If AND/OR is appended then this and/or the next can/must be given. Elements which can appear several times have a + appended. Places to fill are marked by an X.  Example  gap> TemplateBibXML(); [ "article", "book", "booklet", "conference", "inbook",   "incollection", "inproceedings", "manual", "mastersthesis", "misc",   "phdthesis", "proceedings", "techreport", "unpublished" ] gap> Print(TemplateBibXML("inbook"));     XX+  OR    XX+    X  XAND/OR  X  X  X  X*OR  X*  X*  X* 
X
*  X*  X*  X*  X*  X*  X*  X*  X*  X*  X*  X*OR  X*  X*  X*  X*  X*  X*  X*  X*  X*  X*  X*  X*  X*+ 
  7.4 Getting BibTeX entries from MathSciNet We provide utilities to access the  MathSciNet (http://www.ams.org/mathscinet/) data base from within GAP. The first condition for this to work is that one of the programs wget or curl is installed on your system. The second is, of course, that you use these functions from a computer which has access to MathSciNet. Please note, that the usual license for MathSciNet access does not allow for automated searches in the database. Therefore, only use the SearchMR (7.4-1) function for single queries, as you would do using your webbrowser. 7.4-1 SearchMR SearchMR( qurec )  function SearchMRBib( bib )  function Returns: a list of strings, a string or fail The first function SearchMR provides the same functionality as the Web interface  MathSciNet (http://www.ams.org/mathscinet/). The query strings must be given as a record, and the following components of this record are recognized: Author, AuthorRelated, Title, ReviewText, Journal, InstitutionCode, Series, MSCPrimSec, MSCPrimary, MRNumber, Anywhere, References and Year. Furthermore, the component type can be specified. It can be one of "bibtex" (the default if not given), "pdf", "html" and probably others. In the last cases the function returns a string with the content of the web page returned by MathSciNet. In the first case the MathSciNet interface returns a web page with BibTeX entries, for convenience this function returns a list of strings, each containing the BibTeX text for a single result entry. If a component uri is bound and set to true the function does not actually send a request to MathSciNet but returns a string with the URI that can be called for the request. The format of a .Year component can be either a four digit number, optionally preceded by one of the characters '<', '>' or '=', or it can be two four digit numbers separated by a - to specify a year range. The function SearchMRBib gets a record of a parsed BibTeX entry as input as returned by ParseBibFiles (7.1-1) or ParseBibStrings (7.1-1). It tries to generate some sensible input from this information for SearchMR and calls that function.  Example  gap> ll := SearchMR(rec(Author:="Gauss", Title:="Disquisitiones"));; gap> ll2 := List(ll, HeuristicTranslationsLaTeX2XML.Apply);; gap> bib := ParseBibStrings(Concatenation(ll2));; gap> bibxml := List(bib[1], StringBibAsXMLext);; gap> bib2 := ParseBibXMLextString(Concatenation(bibxml));; gap> for b in bib2.entries do  >  PrintFormattedString(StringBibXMLEntry(b, "Text")); od;  [Gau95] Gauss, C. F., Disquisitiones arithmeticae, Academia Colombiana de Ciencias Exactas, Físicas y Naturales, Bogotá, Colección Enrique Pérez Arbeláez [Enrique Pérez Arbeláez Collection], 10 (1995), xliv+495 pages, (Translated from the Latin by Hugo Barrantes Campos, Michael Josephy and Ángel Ruiz Zúñiga, With a preface by Ruiz Zúñiga).  [Gau86] Gauss, C. F., Disquisitiones arithmeticae, Springer-Verlag, New York (1986), xx+472 pages, (Translated and with a preface by Arthur A. Clarke, Revised by William C. Waterhouse, Cornelius Greither and A. W. Grootendorst and with a preface by Waterhouse).  [Gau66] Gauss, C. F., Disquisitiones arithmeticae, Yale University Press, New Haven, Conn.-London, Translated into English by Arthur A. Clarke, S. J (1966), xx+472 pages.   GAPDoc-1.6.4/doc/chap0.txt0000644000175100017510000002204513714505040014202 0ustar luebeckldfm GAPDoc ( Version 1.6.4 ) August 2020 Frank Lübeck Max Neunhöffer Frank Lübeck Email: mailto:Frank.Luebeck@Math.RWTH-Aachen.De Homepage: http://www.math.rwth-aachen.de/~Frank.Luebeck Max Neunhöffer Email: mailto:neunhoef at mcs.st-and.ac.uk Homepage: http://www-groups.mcs.st-and.ac.uk/~neunhoef/ ------------------------------------------------------- Copyright © 2000-2020 by Frank Lübeck and Max Neunhöffer GAPDoc is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (http://www.fsf.org/licenses/gpl.html) as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ------------------------------------------------------- Contents (GAPDoc) 1 Introduction and Example 1.1 XML 1.2 A complete example 1.3 Some questions 2 How To Type a GAPDoc Document 2.1 General XML Syntax 2.1-1 Head of XML Document 2.1-2 Comments 2.1-3 Processing Instructions 2.1-4 Names in XML and Whitespace 2.1-5 Elements 2.1-6 Start Tags 2.1-7 End Tags 2.1-8 Combined Tags for Empty Elements 2.1-9 Entities 2.1-10 Special Characters in XML 2.1-11 Rules for Attribute Values 2.1-12 CDATA 2.1-13 Encoding of an XML Document 2.1-14 Well Formed and Valid XML Documents 2.2 Entering GAPDoc Documents 2.2-1 Other special characters 2.2-2 Mathematical Formulae 2.2-3 More Entities 3 The Document Type Definition 3.1 What is a DTD? 3.2 Overall Document Structure 3.2-1  3.2-2  3.2-3  3.2-4 <Subtitle> 3.2-5 <Version> 3.2-6 <TitleComment> 3.2-7 <Author> 3.2-8 <Date> 3.2-9 <Address> 3.2-10 <Abstract> 3.2-11 <Copyright> 3.2-12 <Acknowledgements> 3.2-13 <Colophon> 3.2-14 <TableOfContents> 3.2-15 <Bibliography> 3.2-16 <TheIndex> 3.3 Sectioning Elements 3.3-1 <Body> 3.3-2 <Chapter> 3.3-3 <Heading> 3.3-4 <Appendix> 3.3-5 <Section> 3.3-6 <Subsection> 3.4 ManSection–a special kind of subsection 3.4-1 <ManSection> 3.4-2 <Func> 3.4-3 <Oper> 3.4-4 <Constr> 3.4-5 <Meth> 3.4-6 <Filt> 3.4-7 <Prop> 3.4-8 <Attr> 3.4-9 <Var> 3.4-10 <Fam> 3.4-11 <InfoClass> 3.5 Cross Referencing and Citations 3.5-1 <Ref> 3.5-2 <Label> 3.5-3 <Cite> 3.5-4 <Index> 3.5-5 <URL> 3.5-6 <Email> 3.5-7 <Homepage> 3.6 Structural Elements like Lists 3.6-1 <List> 3.6-2 <Mark> 3.6-3 <Item> 3.6-4 <Enum> 3.6-5 <Table> 3.7 Types of Text 3.7-1 <Emph> and <E> 3.7-2 <Quoted> and <Q> 3.7-3 <Keyword> and <K> 3.7-4 <Arg> and <A> 3.7-5 <Code> and <C> 3.7-6 <File> and <F> 3.7-7 <Button> and <B> 3.7-8 <Package> 3.7-9 <Listing> 3.7-10 <Log> and <Example> 3.7-11 <Verb> 3.8 Elements for Mathematical Formulae 3.8-1 <Math> and <Display> 3.8-2 <M> 3.9 Everything else 3.9-1 <Alt> 3.9-2 <Par> and <P> 3.9-3 <Br> 3.9-4 <Ignore> 4 Distributing a Document into Several Files 4.1 The Conventions 4.2 A Tool for Collecting a Document 4.2-1 ComposedDocument 4.2-2 OriginalPositionDocument 4.2-3 FilenameGAP 5 The Converters and an XML Parser 5.1 Producing Documentation from Source Files 5.1-1 MakeGAPDocDoc 5.2 Parsing XML Documents 5.2-1 ParseTreeXMLString 5.2-2 StringXMLElement 5.2-3 EntitySubstitution 5.2-4 DisplayXMLStructure 5.2-5 ApplyToNodesParseTree 5.2-6 GetTextXMLTree 5.2-7 XMLElements 5.2-8 CheckAndCleanGapDocTree 5.2-9 AddParagraphNumbersGapDocTree 5.2-10 InfoXMLParser 5.3 The Converters 5.3-1 GAPDoc2LaTeX 5.3-2 GAPDoc2Text 5.3-3 GAPDoc2TextPrintTextFiles 5.3-4 AddPageNumbersToSix 5.3-5 PrintSixFile 5.3-6 SetGAPDocTextTheme 5.3-7 GAPDoc2HTML 5.3-8 GAPDoc2HTMLPrintHTMLFiles 5.3-9 Stylesheet files 5.3-10 CopyHTMLStyleFiles 5.3-11 SetGAPDocHTMLStyle 5.3-12 InfoGAPDoc 5.3-13 SetGapDocLanguage 5.4 Testing Manual Examples 5.4-1 ExtractExamples 5.4-2 RunExamples 6 String and Text Utilities 6.1 Text Utilities 6.1-1 WHITESPACE 6.1-2 TextAttr 6.1-3 WrapTextAttribute 6.1-4 FormatParagraph 6.1-5 SubstitutionSublist 6.1-6 StripBeginEnd 6.1-7 StripEscapeSequences 6.1-8 RepeatedString 6.1-9 NumberDigits 6.1-10 LabelInt 6.1-11 PositionMatchingDelimiter 6.1-12 WordsString 6.1-13 Base64String 6.2 Unicode Strings 6.2-1 Unicode Strings and Characters 6.2-2 Encode 6.2-3 Lengths of UTF-8 strings 6.2-4 InitialSubstringUTF8String 6.3 Print Utilities 6.3-1 PrintTo1 6.3-2 StringPrint 6.3-3 PrintFormattedString 6.3-4 Page 6.3-5 StringFile 7 Utilities for Bibliographies 7.1 Parsing BibTeX Files 7.1-1 ParseBibFiles 7.1-2 NormalizedNameAndKey 7.1-3 WriteBibFile 7.1-4 LabelsFromBibTeX 7.1-5 InfoBibTools 7.2 The BibXMLext Format 7.3 Utilities for BibXMLext data 7.3-1 Translating BibTeX to BibXMLext 7.3-2 HeuristicTranslationsLaTeX2XML.Apply 7.3-3 StringBibAsXMLext 7.3-4 ParseBibXMLextString 7.3-5 WriteBibXMLextFile 7.3-6 Bibliography Entries as Records 7.3-7 RecBibXMLEntry 7.3-8 AddHandlerBuildRecBibXMLEntry 7.3-9 StringBibXMLEntry 7.3-10 TemplateBibXML 7.4 Getting BibTeX entries from MathSciNet 7.4-1 SearchMR A The File 3k+1.xml B The File gapdoc.dtd C The File bibxmlext.dtd  �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GAPDoc-1.6.4/doc/chap1.txt��������������������������������������������������������������������������0000644�0001751�0001751�00000043007�13714505040�014204� 0����������������������������������������������������������������������������������������������������ustar �luebeck�������������������������ldfm������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� 1 Introduction and Example The main purpose of the GAPDoc package is to define a file format for documentation of GAP-programs and -packages (see [GAP06]). The problem is that such documentation should be readable in several output formats. For example it should be possible to read the documentation inside the terminal in which GAP is running (a text mode) and there should be a printable version in high typesetting quality (produced by some version of TeX). It is also popular to view GAP's online help with a Web-browser via an HTML-version of the documentation. Nowadays one can use LaTeX and standard viewer programs to produce and view on the screen dvi- or pdf-files with full support of internal and external hyperlinks. Certainly there will be other interesting document formats and tools in this direction in the future. Our aim is to find a format for writing the documentation which allows a relatively easy translation into the output formats just mentioned and which hopefully makes it easy to translate to future output formats as well. To make documentation written in the GAPDoc format directly usable, we also provide a set of programs, called converters, which produce text-, hyperlinked LaTeX- and HTML-output versions of a GAPDoc document. These programs are developed by the first named author. They run completely inside GAP, i.e., no external programs are needed. You only need latex and pdflatex to process the LaTeX output. These programs are described in Chapter 5. 1.1 XML The definition of the GAPDoc format uses XML, the eXtendible Markup Language. This is a standard (defined by the W3C consortium, see http://www.w3c.org) which lays down a syntax for adding markup to a document or to some data. It allows to define document structures via introducing markup elements and certain relations between them. This is done in a document type definition. The file gapdoc.dtd contains such a document type definition and is the central part of the GAPDoc package. The easiest way for getting a good idea about this is probably to look at an example. The Appendix A contains a short but complete GAPDoc document for a fictitious share package. In the next section we will go through this document, explain basic facts about XML and the GAPDoc document type, and give pointers to more details in later parts of this documentation. In the last Section 1.3 of this introductory chapter we try to answer some general questions about the decisions which lead to the GAPDoc package. 1.2 A complete example In this section we recall the lines from the example document in Appendix A and give some explanations.  from 3k+1.xml  <?xml version="1.0" encoding="UTF-8"?>   This line just tells a human reader and computer programs that the file is a document with XML markup and that the text is encoded in the UTF-8 character set (other common encodings are ASCII or ISO-8895-X encodings).  from 3k+1.xml  <!-- A complete "fake package" documentation  -->  Everything in a XML file between <!-- and --> is a comment and not part of the document content.  from 3k+1.xml  <!DOCTYPE Book SYSTEM "gapdoc.dtd">  This line says that the document contains markup which is defined in the system file gapdoc.dtd and that the markup obeys certain rules defined in that file (the ending dtd means document type definition). It further says that the actual content of the document consists of an element with name Book. And we can really see that the remaining part of the file is enclosed as follows:  from 3k+1.xml  <Book Name="3k+1">  [...] (content omitted) </Book>  This demonstrates the basics of the markup in XML. This part of the document is an element. It consists of the start tag <Book Name="3k+1">, the element content and the end tag </Book> (end tags always start with </). This element also has an attribute Name whose value is 3k+1. If you know HTML, this will look familiar to you. But there are some important differences: The element name Book and attribute name Name are case sensitive. The value of an attribute must always be enclosed in quotes. In XML every element has a start and end tag (which can be combined for elements defined as empty, see for example <TableOfContents/> below). If you know LaTeX, you are familiar with quite different types of markup, for example: The equivalent of the Book element in LaTeX is \begin{document} ... \end{document}. The sectioning in LaTeX is not done by explicit start and end markup, but implicitly via heading commands like \section. Other markup is done by using braces {} and putting some commands inside. And for mathematical formulae one can use the $ for the start and the end of the markup. In XML all markup looks similar to that of the Book element. The content of the book starts with a title page.  from 3k+1.xml  <TitlePage>  <Title>The <Package>ThreeKPlusOne</Package> Package  Version 42  Dummy Authör  3kplusone@dev.null     ©right; 2000 The Author.

  You can do with this package what you want.

Really.     The content of the TitlePage element consists again of elements. In Chapter 3 we describe which elements are allowed within a TitlePage and that their ordering is prescribed in this case. In the (stupid) name of the author you see that a German umlaut is used directly (in ISO-latin1 encoding). Contrary to LaTeX- or HTML-files this markup does not say anything about the actual layout of the title page in any output version of the document. It just adds information about the meaning of pieces of text. Within the Copyright element there are two more things to learn about XML markup. The 

 is a complete element. It is a combined start and end tag. This shortcut is allowed for elements which are defined to be always empty, i.e., to have no content. You may have already guessed that 

 is used as a paragraph separator. Note that empty lines do not separate paragraphs (contrary to LaTeX). The other construct we see here is ©right;. This is an example of an entity in XML and is a macro for some substitution text. Here we use an entity as a shortcut for a complicated expression which makes it possible that the term copyright is printed as some text like (C) in text terminal output and as a copyright character in other output formats. In GAPDoc we predefine some entities. Certain special characters must be typed via entities, for example <, > and & to avoid a misinterpretation as XML markup. It is possible to define additional entities for your document inside the  declaration, see 2.2-3. Note that elements in XML must always be properly nested, as in this example. A construct like ... is not allowed.  from 3k+1.xml    This is another example of an empty element. It just means that a table of contents for the whole document should be included into any output version of the document. After this the main text of the document follows inside certain sectioning elements:  from 3k+1.xml    The 3k+1 Problem 

Theory  [...] (content omitted) 
 
Program  [...] (content omitted)  
     These elements are used similarly to \chapter and \section in LaTeX. But note that the explicit end tags are necessary here. The sectioning commands allow to assign an optional attribute Label. This can be used for referring to a section inside the document. The text of the first section starts as follows. The whitespace in the text is unimportant and the indenting is not necessary.  from 3k+1.xml    Let k \in &NN; be a natural number. We consider the  sequence n(i, k), i \in &NN;, with n(1, k) = k and  else   Here we come to the interesting question how to type mathematical formulae in a GAPDoc document. We did not find any alternative for writing formulae in TeX syntax. (There is MATHML, but even simple formulae contain a lot of markup, become quite unreadable and they are cumbersome to type. Furthermore there seem to be no tools available which translate such formulae in a nice way into TeX and text.) So, formulae are essentially typed as in LaTeX. (Actually, it is also possible to type unicode characters of some mathematical symbols directly, or via an entity like the &NN; above.) There are three types of elements containing formulae: M, Math and Display. The first two are for in-text formulae and the third is for displayed formulae. Here M and Math are equivalent, when translating a GAPDoc document into LaTeX. But they are handled differently for terminal text (and HTML) output. For the content of an M-element there are defined rules for a translation into well readable terminal text. More complicated formulae are in Math or Display elements and they are just printed as they are typed in text output. So, to make a section well readable inside a terminal window you should try to put as many formulae as possible into M-elements. In our example text we used the notation n(i, k) instead of n_i(k) because it is easier to read in text mode. See Sections 2.2-2 and 3.9 for more details. A few lines further on we find two non-internal references.  from 3k+1.xml   problem, see or  http://mathsrv.ku-eichstaett.de/MGF/homes/wirsching/  The first within the Cite-element is the citation of a book. In GAPDoc we use the widely used BibTeX database format for reference lists. This does not use XML but has a well documented structure which is easy to parse. And many people have collections of references readily available in this format. The reference list in an output version of the document is produced with the empty element  from 3k+1.xml    close to the end of our example file. The attribute Databases give the name(s) of the database (.bib) files which contain the references. Putting a Web-address into an URL-element allows one to create a hyperlink in output formats which allow this. The second section of our example contains a special kind of subsection defined in GAPDoc.  from 3k+1.xml         This function computes for a natural number k the  beginning of the sequence n(i, k) defined in section  . The sequence stops at the first  1 or at n(max, k), if max is  given.  gap> ThreeKPlusOneSequence(101); "Sorry, not yet implemented. Wait for Version 84 of the package"       A ManSection contains the description of some function, operation, method, filter and so on. The Func-element describes the name of a function (there are also similar elements Oper, Meth, Filt and so on) and names for its arguments, optional arguments enclosed in square brackets. See Section 3.4 for more details. In the Description we write the argument names as A-elements. A good description of a function should usually contain an example of its use. For this there are some verbatim-like elements in GAPDoc, like Example above (here, clearly, whitespace matters which causes a slightly strange indenting). The text contains an internal reference to the first section via the explicitly defined label sec:theory. The first section also contains a Ref-element which refers to the function described here. Note that there is no explicit label for such a reference. The pair  and  does the cross referencing (and hyperlinking if possible) implicitly via the name of the function. Here is one further element from our example document which we want to explain.  from 3k+1.xml    This is again an empty element which just says that an output version of the document should contain an index. Many entries for the index are generated automatically because the Func and similar elements implicitly produce such entries. It is also possible to include explicit additional entries in the index. 1.3 Some questions Are those XML files too ugly to read and edit? Just have a look and decide yourself. The markup needs more characters than most TeX or LaTeX markup. But the structure of the document is easier to see. If you configure your favorite editor well, you do not need more key strokes for typing the markup than in LaTeX. Why do we not use LaTeX alone? LaTeX is good for writing books. But LaTeX files are generally difficult to parse and to process to other output formats like text for browsing in a terminal window or HTML (or new formats which may become popular in the future). GAPDoc markup is one step more abstract than LaTeX insofar as it describes meaning instead of appearance of text. The inner workings of LaTeX are too complicated to learn without pain, which makes it difficult to overcome problems that occur occasionally. Why XML and not a newly defined markup language? XML is a well defined standard that is more and more widely used. Lots of people have thought about it. Years of experience with SGML went into the design. It is easy to explain, easy to parse and lots of tools are available, there will be more in the future. GAPDoc-1.6.4/doc/chap4.txt0000644000175100017510000002170213714505040014205 0ustar luebeckldfm 4 Distributing a Document into Several Files In GAPDoc there are facilities to distribute a single document over several files. This is for example interesting, if one wants to store the documentation of some code in the same file as the code itself. Or, if one just wants to store chapters of a document in separate files. There is a set of conventions how this is done and some tools to collect the text for further processing. The technique can also be used to distribute and collect other types of documents into respectively from several files (e.g., source code, examples). 4.1 The Conventions In this description we use the string GAPDoc for marking pieces of a document to collect. Pieces of documentation that shall be incorporated into another document are marked as follows:  Example  ## <#GAPDoc Label="MyPiece"> ## This is the piece. ## The hash characters are removed. ## <#/GAPDoc>  This piece is then included into another file by a statement like: <#Include Label="MyPiece"> Here are the exact rules, how pieces are gathered:  All lines up to a line containing the character sequence <#GAPDoc Label=" (exactly one space character) are ignored. The characters on the same line before this sequence are stored as prefix. The characters after the sequence up to the next double quotes character (which should not contain whitespace) are stored as label. All other characters in the line are ignored.  The following lines up to a line containing the character sequence <#/GAPDoc> are stored under the label. These lines are processed as follows: The longest possible substring from the beginning of the line that equals the corresponding substring of the prefix is removed. Having stored a list of labels and pieces of text gathered as above this can be used as follows.  In GAPDoc documentation files all statements of the form <#Include Label="Key"> are replaced by the sequence of lines stored under the label Key.  Additionally, every occurrence of a statement of the form <#Include SYSTEM "Filename"> is replaced by the whole file stored under the name Filename in the file system.  These substitutions are done recursively (although one should probably avoid to use this extensively). Here is another example:  Example  # # <#GAPDoc Label="AnotherPiece"> some characters # # This text is not indented. # This text is indented by one blank. #Not indented. #<#/GAPDoc>  replaces <#Include Label="AnotherPiece"> by  Example  This text is not indented.  This text is indented by one blank.  Not indented.  Since these rules are very simple it is quite easy to write a program in almost any programming language which does this gathering of text pieces and the substitutions. In GAPDoc there is the GAP function ComposedDocument (4.2-1) which does this. Note that the XML-tag-like markup we have used here is not a legal XML markup, since the hash character is not allowed in element names. The mechanism described here is a preprocessing step which composes a document. 4.2 A Tool for Collecting a Document 4.2-1 ComposedDocument ComposedDocument( tagname, path, main, source[, info] )  function ComposedXMLString( path, main, source[, info] )  function Returns: a document as string, or a list with this string and information about the source positions The argument tagname is the string used for the pseudo elements which mark the pieces of a document to collect. (In 4.1 we used GAPDoc as tagname. The second function ComposedXMLString( ... ) is an abbreviation for ComposedDocument("GAPDoc", ... ). The argument path must be a path to some directory (as string or directory object), main the name of a file and source a list of file names. These file names are relative to path, except they start with "/" to specify an absolute path or they start with "gap://" to specify a file relative to the GAP roots (see FilenameGAP (4.2-3)). The document is constructed via the mechanism described in Section 4.1. First the files given in source are scanned for chunks of the document marked by <#tagname Label="..."> and  pairs. Then the file main is read and all <#Include ... >-tags are substituted recursively by other files or chunks of documentation found in the first step, respectively. If the optional argument info is given and set to true this function returns a list [str, origin], where str is a string containing the composed document and origin is a sorted list of entries of the form [pos, filename, line]. Here pos runs through all character positions of starting lines or text pieces from different files in str. The filename and line describe the origin of this part of the collected document. Without the fourth argument only the string str is returned. By default ComposedDocument runs into an error if an <#Include ...>-tag cannot be substituted (because a file or chunk is missing). This behaviour can be changed by setting DOCCOMPOSEERROR := false;. Then the missing parts are substituted by a short note about what is missing. Of course, this feature is only useful if the resulting document is a valid XML document (e.g., when the missing pieces are complete paragraphs or sections).  Example  gap> doc := ComposedDocument("GAPDoc", "/my/dir", "manual.xml",  > ["../lib/func.gd", "../lib/func.gi"], true);;  4.2-2 OriginalPositionDocument OriginalPositionDocument( srcinfo, pos )  function Returns: A pair [filename, linenumber]. Here srcinfo must be a data structure as returned as second entry by ComposedDocument (4.2-1) called with info=true. It returns for a given position pos in the composed document the file name and line number from which that text was collected. 4.2-3 FilenameGAP FilenameGAP( fname )  function Returns: file name as string or fail This functions returns the full path of a file with name fname relative to a GAP root path, or fail if such a file does not exist. The argument fname can optionally start with the prefix "gap://" which will be removed.  Example  gap> FilenameGAP("hsdkfhs.g"); fail gap> FilenameGAP("lib/system.g"); "/usr/local/gap4/lib/system.g" gap> FilenameGAP("gap://lib/system.g"); "/usr/local/gap4/lib/system.g"  GAPDoc-1.6.4/doc/chapC.txt0000644000175100017510000006555513714505040014242 0ustar luebeckldfm C The File bibxmlext.dtd For easier reference we repeat here the complete content of the file bibxmlext.dtd which is explained in 7.2.  bibxmlext.dtd                                                                                                                                                                                                         GAPDoc-1.6.4/doc/chap2.txt0000644000175100017510000004220013714505040014177 0ustar luebeckldfm 2 How To Type a GAPDoc Document In this chapter we give a more formal description of what you need to start to type documentation in GAPDoc XML format. Many details were already explained by example in Section 1.2 of the introduction. We do not answer the question How to write a GAPDoc document? in this chapter. You can (hopefully) find an answer to this question by studying the example in the introduction, see 1.2, and learning about more details in the reference Chapter 3. The definite source for all details of the official XML standard with useful annotations is: http://www.xml.com/axml/axml.html Although this document must be quite technical, it is surprisingly well readable. 2.1 General XML Syntax We will now discuss the pieces of text which can occur in a general XML document. We start with those pieces which do not contribute to the actual content of the document. 2.1-1 Head of XML Document Each XML document should have a head which states that it is an XML document in some encoding and which XML-defined language is used. In case of a GAPDoc document this should always look as in the following example.  Example     See 2.1-13 for a remark on the encoding statement. (There may be local entity definitions inside the DOCTYPE statement, see Subsection 2.2-3 below.) 2.1-2 Comments A comment in XML starts with the character sequence . Between these sequences there must not be two adjacent dashes --. 2.1-3 Processing Instructions A processing instruction in XML starts with the character sequence  must not occur within the processing instruction.   And now we turn to those parts of the document which contribute to its actual content. 2.1-4 Names in XML and Whitespace A name in XML (used for element and attribute identifiers, see below) must start with a letter (in the encoding of the document) or with a colon : or underscore _ character. The following characters may also be digits, dots . or dashes -. This is a simplified description of the rules in the standard, which are concerned with lots of unicode ranges to specify what a letter is. Sequences only consisting of the following characters are considered as whitespace: blanks, tabs, carriage return characters and new line characters. 2.1-5 Elements The actual content of an XML document consists of elements. An element has some content with a leading start tag (2.1-6) and a trailing end tag (2.1-7). The content can contain further elements but they must be properly nested. One can define elements whose content is always empty, those elements can also be entered with a single combined tag (2.1-8). 2.1-6 Start Tags A start-tag consists of a less-than-character < directly followed (without whitespace) by an element name (see 2.1-4), optional attributes, optional whitespace, and a greater-than-character >. An attribute consists of some whitespace and then its name followed by an equal sign = which is optionally enclosed by whitespace, and the attribute value, which is enclosed either in single or double quotes. The attribute value may not contain the type of quote used as a delimiter or the character <, the character & may only appear to start an entity, see 2.1-9. We describe in 2.1-11 how to enter special characters in attribute values. Note especially that no whitespace is allowed between the starting < character and the element name. The quotes around an attribute value cannot be omitted. The names of elements and attributes are case sensitive. 2.1-7 End Tags An end tag consists of the two characters . 2.1-8 Combined Tags for Empty Elements Elements which always have empty content can be written with a single tag. This looks like a start tag (see 2.1-6) except that the trailing greater-than-character > is substituted by the two character sequence />. 2.1-9 Entities An entity in XML is a macro for some substitution text. There are two types of entities. A character entity can be used to specify characters in the encoding of the document (can be useful for entering non-ASCII characters which you cannot manage to type in directly). They are entered with a sequence &#, directly followed by either some decimal digits or an x and some hexadecimal digits, directly followed by a semicolon ;. Using such a character entity is just equivalent to typing the corresponding character directly. Then there are references to named entities. They are entered with an ampersand character & directly followed by a name which is directly followed by a semicolon ;. Such entities must be declared somewhere by giving a substitution text. This text is included in the document and the document is parsed again afterwards. The exact rules are a bit subtle but you probably want to use this only in simple cases. Predefined entities for GAPDoc are described in 2.1-10 and 2.2-3. 2.1-10 Special Characters in XML We have seen that the less-than-character < and the ampersand character & start a tag or entity reference in XML. To get these characters into the document text one has to use entity references, namely < to get < and & to get &. Furthermore > must be used to get > when the string ]]> appears in element content (and not as delimiter of a CDATA section explained below). Another possibility is to use a CDATA statement explained in 2.1-12. 2.1-11 Rules for Attribute Values Attribute values can contain entities which are substituted recursively. But except for the entities < or a character entity it is not allowed that a < character is introduced by the substitution (there is no XML parsing for evaluating the attribute value, just entity substitutions). 2.1-12 CDATA Pieces of text which contain many characters which can be misinterpreted as markup can be enclosed by the character sequences . Everything between these sequences is considered as content of the document and is not further interpreted as XML text. All the rules explained so far in this section do not apply to such a part of the document. The only document content which cannot be entered directly inside a CDATA statement is the sequence ]]>. This can be entered as ]]> outside the CDATA statement.  Example  A nesting of tags like is not allowed.  2.1-13 Encoding of an XML Document We suggest to use the UTF-8 encoding for writing GAPDoc XML documents. But the tools described in Chapter 5 also work with ASCII or the various ISO-8859-X encodings (ISO-8859-1 is also called latin1 and covers most special characters for western European languages). 2.1-14 Well Formed and Valid XML Documents We want to mention two further important words which are often used in the context of XML documents. A piece of text becomes a well formed XML document if all the formal rules described in this section are fulfilled. But this says nothing about the content of the document. To give this content a meaning one needs a declaration of the element and corresponding attribute names as well as of named entities which are allowed. Furthermore there may be restrictions how such elements can be nested. This definition of an XML based markup language is done in a document type definition. An XML document which contains only elements and entities declared in such a document type definition and obeys the rules given there is called valid (with respect to this document type definition). The main file of the GAPDoc package is gapdoc.dtd. This contains such a definition of a markup language. We are not going to explain the formal syntax rules for document type definitions in this section. But in Chapter 3 we will explain enough about it to understand the file gapdoc.dtd and so the markup language defined there. 2.2 Entering GAPDoc Documents Here are some additional rules for writing GAPDoc XML documents. 2.2-1 Other special characters As GAPDoc documents are used to produce LaTeX and HTML documents, the question arises how to deal with characters with a special meaning for other applications (for example &, #, $, %, ~, \, {, }, _, ^,   (this is a non-breakable space, ~ in LaTeX) have a special meaning for LaTeX and &, <, > have a special meaning for HTML (and XML). In GAPDoc you can usually just type these characters directly, it is the task of the converter programs which translate to some output format to take care of such special characters. The exceptions to this simple rule are:  & and < must be entered as & and < as explained in 2.1-10.  The content of the GAPDoc elements ,  and  is LaTeX code, see 3.8.  The content of an  element with Only attribute contains code for the specified output type, see 3.9-1. Remark: In former versions of GAPDoc one had to use particular entities for all the special characters mentioned above (&tamp;, &hash;, $, &percent;, ˜, &bslash;, &obrace;, &cbrace;, &uscore;, &circum;, &tlt;, &tgt;). These are no longer needed, but they are still defined for backwards compatibility with older GAPDoc documents. 2.2-2 Mathematical Formulae Mathematical formulae in GAPDoc are typed as in LaTeX. They must be the content of one of three types of GAPDoc elements concerned with mathematical formulae: Math, Display, and M (see Sections 3.8-1 and 3.8-2 for more details). The first two correspond to LaTeX's math mode and display math mode. The last one is a special form of the Math element type, that imposes certain restrictions on the content. On the other hand the content of an M element is processed in a well defined way for text terminal or HTML output. The Display element also has an attribute such that its content is processed as in M elements. Note that the content of these element is LaTeX code, but the special characters < and & for XML must be entered via the entities described in 2.1-10 or by using a CDATA statement, see 2.1-12. 2.2-3 More Entities In GAPDoc there are some more predefined entities: ┌─────────────┬─────────┐ │ &GAP; │ GAP │ ├─────────────┼─────────┤ │ &GAPDoc; │ GAPDoc │ ├─────────────┼─────────┤ │ &TeX; │ TeX │ ├─────────────┼─────────┤ │ &LaTeX; │ LaTeX │ ├─────────────┼─────────┤ │ &BibTeX; │ BibTeX │ ├─────────────┼─────────┤ │ &MeatAxe; │ MeatAxe │ ├─────────────┼─────────┤ │ &XGAP; │ XGAP │ ├─────────────┼─────────┤ │ ©right; │ © │ ├─────────────┼─────────┤ │   │   │ ├─────────────┼─────────┤ │ – │ – │ └─────────────┴─────────┘ Table: Predefined Entities in the GAPDoc system Here   is a non-breakable space character. Additional entities are defined for some mathematical symbols, see 3.8 for more details. One can define further local entities right inside the head (see 2.1-1) of a GAPDoc XML document as in the following example.  Example    text possibly with markup">  ]>  These additional definitions go into the   From gapdoc.dtd     After the keyword ELEMENT and the name Book there is a list in parentheses. This is a comma separated list of names of elements which can occur (in the given order) in the content of a Book element. Each name in such a list can be followed by one of the characters ?, * or +, meaning that the corresponding element can occur zero or one time, an arbitrary number of times, or at least once, respectively. Without such an extra character the corresponding element must occur exactly once. Instead of one name in this list there can also be a list of elements names separated by | characters, this denotes any element with one of the names (i.e., | means or). So, the Book element must contain first a TitlePage element, then an optional TableOfContents element, then a Body element, then zero or more elements of type Appendix, then an optional Bibliography element, and finally an optional element of type TheIndex. Note that only these elements are allowed in the content of the Book element. No other elements or text is allowed in between. An exception of this is that there may be whitespace between the end tag of one and the start tag of the next element - this should be ignored when the document is processed to some output format. An element like this is called an element with element content. The second declaration starts with the keyword ATTLIST and the element name Book. After that there is a triple of whitespace separated parameters (in general an arbitrary number of such triples, one for each allowed attribute name). The first (Name) is the name of an attribute for a Book element. The second (CDATA) is always the same for all of our declarations, it means that the value of the attribute consists of character data. The third parameter #REQUIRED means that this attribute must be specified with any Book element. Later we will also see optional attributes which are declared as #IMPLIED. 3.2-2   From gapdoc.dtd    Within this element information for the title page is collected. Note that more than one author can be specified. The elements must appear in this order because there is no sensible way to specify in a DTD something like the following elements may occur in any order but each exactly once. Before going on with the other elements inside the Book element we explain the elements for the title page. 3.2-3   From gapdoc.dtd    Here is the last construct you need to understand for reading gapdoc.dtd. The expression %Text; is a so-called parameter entity. It is something like a macro within the DTD. It is defined as follows:  From gapdoc.dtd    This means, that every occurrence of %Text; in the DTD is replaced by the expression  From gapdoc.dtd  %InnerText; | List | Enum | Table  which is then expanded further because of the following definition:  From gapdoc.dtd     These are the only two parameter entities we are using. They expand to lists of element names which are explained in the sequel and the keyword #PCDATA (concatenated with the or character |). So, the element (Title) is of so-called mixed content: It can contain parsed character data which does not contain further markup (#PCDATA) or any of the other above mentioned elements. Mixed content must always have the asterisk qualifier (like in Title) such that any sequence of elements (of the above list) and character data can be contained in a Title element. The %Text; parameter entity is used in all places in the DTD, where normal text should be allowed, including lists, enumerations, and tables, but no sectioning elements. The %InnerText; parameter entity is used in all places in the DTD, where inner text should be allowed. This means, that no structures like lists, enumerations, and tables are allowed. This is used for example in headings. 3.2-4   From gapdoc.dtd    Contains the subtitle of the document. 3.2-5   From gapdoc.dtd    Note that the version can only contain character data and no further markup elements (except for Alt, which is necessary to resolve the entities described in 2.2-3). The converters will not put the word Version in front of the text in this element. 3.2-6   From gapdoc.dtd    Sometimes a title and subtitle are not sufficient to give a rough idea about the content of a package. In this case use this optional element to specify an additional text for the front page of the book. This text should be short, use the Abstract element (see 3.2-10) for longer explanations. 3.2-7   From gapdoc.dtd     As noted in the comment there may be more than one element of this type. This element should contain the name of an author and probably an Email-address and/or WWW-Homepage element for this author, see 3.5-6 and 3.5-7. You can also specify an individual postal address here, instead of using the Address element described below, see 3.2-9. 3.2-8   From gapdoc.dtd    Only character data is allowed in this element which gives a date for the document. No automatic formatting is done. 3.2-9 
  From gapdoc.dtd    This optional element can be used to specify a postal address of the author or the authors. If there are several authors with different addresses then put the Address elements inside the Author elements. Use the Br element (see 3.9-3) to mark the line breaks in the usual formatting of the address on a letter. Note that often it is not necessary to use this element because a postal address is easy to find via a link to a personal web page. 3.2-10   From gapdoc.dtd    This element contains an abstract of the whole book. 3.2-11   From gapdoc.dtd    This element is used for the copyright notice. Note the ©right; entity as described in section 2.2-3. 3.2-12   From gapdoc.dtd    This element contains the acknowledgements. 3.2-13   From gapdoc.dtd    The colophon page is used to say something about the history of a document. 3.2-14   From gapdoc.dtd    This element may occur in the Book element after the TitlePage element. If it is present, a table of contents is generated and inserted into the document. Note that because this element is declared to be EMPTY one can use the abbreviation  Example    to denote this empty element. 3.2-15   From gapdoc.dtd     This element may occur in the Book element after the last Appendix element. If it is present, a bibliography section is generated and inserted into the document. The attribute Databases must be specified, the names of several data files can be specified, separated by commas. Two kinds of files can be specified in Databases: The first are BibTeX files as defined in [Lam85, Appendix B]. Such files must have a name with extension .bib, and in Databases the name must be given without this extension. Note that such .bib-files should be in latin1-encoding (or ASCII-encoding). The second are files in BibXMLext format as defined in Section 7.2. These files must have an extension .xml and in Databases the full name must be specified. We suggest to use the BibXMLext format because it allows to produce potentially nicer bibliography entries in text and HTML documents. A bibliography style may be specified with the Style attribute. The optional Style attribute (for LaTeX output of the document) must also be specified without the .bst extension (the default is alpha). See also section 3.5-3 for a description of the Cite element which is used to include bibliography references into the text. 3.2-16   From gapdoc.dtd    This element may occur in the Book element after the Bibliography element. If it is present, an index is generated and inserted into the document. There are elements in GAPDoc which implicitly generate index entries (e.g., Func (3.4-2)) and there is an element Index (3.5-4) for explicitly adding index entries. 3.3 Sectioning Elements A GAPDoc book is divided into chapters, sections, and subsections. The idea is of course, that a chapter consists of sections, which in turn consist of subsections. However for the sake of flexibility, the rules are not too restrictive. Firstly, text is allowed everywhere in the body of the document (and not only within sections). Secondly, the chapter level may be omitted. The exact rules are described below. Appendices are a flavor of chapters, occurring after all regular chapters. There is a special type of subsection called ManSection. This is a subsection devoted to the description of a function, operation or variable. It is analogous to a manpage in the UNIX environment. Usually each function, operation, method, and so on should have its own ManSection. Cross referencing is done on the level of Subsections, respectively ManSections. The topics in GAP's online help are also pointing to subsections. So, they should not be too long. We start our description of the sectioning elements top-down: 3.3-1 
 The Body element marks the main part of the document. It must occur after the TableOfContents element. There is a big difference between inside and outside of this element: Whereas regular text is allowed nearly everywhere in the Body element and its subelements, this is not true for the outside. This has also implications on the handling of whitespace. Outside superfluous whitespace is usually ignored when it occurs between elements. Inside of the Body element whitespace matters because character data is allowed nearly everywhere. Here is the definition in the DTD:  From gapdoc.dtd    The fact that Chapter and Section elements are allowed here leads to the possibility to omit the chapter level entirely in the document. For a description of %Text; see 3.2-3. (Remark: The purpose of this element is to make sure that a valid GAPDoc document has a correct overall structure, which is only possible when the top element Book has element content.) 3.3-2   From gapdoc.dtd      A Chapter element can have a Label attribute, such that this chapter can be referenced later on with a Ref element (see section 3.5-1). Note that you have to specify a label to reference the chapter as there is no automatic labelling! Chapter elements can contain text (for a description of %Text; see 3.2-3), Section elements, and Heading elements. The following additional rule cannot be stated in the DTD because we want a Chapter element to have mixed content. There must be exactly one Heading element in the Chapter element, containing the heading of the chapter. Here is its definition: 3.3-3   From gapdoc.dtd    This element is used for headings in Chapter, Section, Subsection, and Appendix elements. It may only contain %InnerText; (for a description see 3.2-3). Each of the mentioned sectioning elements must contain exactly one direct Heading element (i.e., one which is not contained in another sectioning element). 3.3-4   From gapdoc.dtd      The Appendix element behaves exactly like a Chapter element (see 3.3-2) except for the position within the document and the numbering. While chapters are counted with numbers (1., 2., 3., ...) the appendices are counted with capital letters (A., B., ...). Again there is an optional Label attribute used for references. 3.3-5 
  From gapdoc.dtd      A Section element can have a Label attribute, such that this section can be referenced later on with a Ref element (see section 3.5-1). Note that you have to specify a label to reference the section as there is no automatic labelling! Section elements can contain text (for a description of %Text; see 3.2-3), Heading elements, and subsections. There must be exactly one direct Heading element in a Section element, containing the heading of the section. Note that a subsection is either a Subsection element or a ManSection element. 3.3-6   From gapdoc.dtd      The Subsection element can have a Label attribute, such that this subsection can be referenced later on with a Ref element (see section 3.5-1). Note that you have to specify a label to reference the subsection as there is no automatic labelling! Subsection elements can contain text (for a description of %Text; see 3.2-3), and Heading elements. There must be exactly one Heading element in a Subsection element, containing the heading of the subsection. Another type of subsection is a ManSection, explained now: 3.4 ManSection–a special kind of subsection ManSections are intended to describe a function, operation, method, variable, or some other technical instance. It is analogous to a manpage in the UNIX environment. 3.4-1   From gapdoc.dtd         The ManSection element can have a Label attribute, such that this subsection can be referenced later on with a Ref element (see section 3.5-1). But this is probably rarely necessary because the elements Func and so on (explained below) generate automatically labels for cross referencing. The content of a ManSection element is one or more elements describing certain items in GAP, each of them optionally followed by a Returns element, followed by a Description element, which contains %Text; (see 3.2-3) describing it. (Remember to include examples in the description as often as possible, see 3.7-10). The classes of items GAPDoc knows of are: functions (Func), operations (Oper), constructors (Constr), methods (Meth), filters (Filt), properties (Prop), attributes (Attr), variables (Var), families (Fam), and info classes (InfoClass). One ManSection should only describe several of such items when these are very closely related. Each element for an item corresponding to a GAP function can be followed by a Returns element. In output versions of the document the string Returns:  will be put in front of the content text. The text in the Returns element should usually be a short hint about the type of object returned by the function. This is intended to give a good mnemonic for the use of a function (together with a good choice of names for the formal arguments). ManSections are also sectioning elements which count as subsections. Usually there should be no Heading-element in a ManSection, in that case a heading is generated automatically from the first Func-like element. Sometimes this default behaviour does not look appropriate, for example when there are several Func-like elements. For such cases an optional Heading is allowed. 3.4-2   From gapdoc.dtd     This element is used within a ManSection element to specify the usage of a function. The Name attribute is required and its value is the name of the function. The value of the Arg attribute (also required) contains the full list of arguments including optional parts, which are denoted by square brackets. The argument names can be separated by whitespace, commas or the square brackets for the optional arguments, like "grp[, elm]" or "xx[y[z] ]". If GAP options are used, this can be followed by a colon : and one or more assignments, like "n[, r]: tries := 100". The name of the function is also used as label for cross referencing. When the name of the function appears in the text of the document it should always be written with the Ref element, see 3.5-1. This allows to use a unique typesetting style for function names and automatic cross referencing. If the optional Label attribute is given, it is appended (with a colon : in between) to the name of the function for cross referencing purposes. The text of the label can also appear in the document text. So, it should be a kind of short explanation.  Example    The optional Comm attribute should be a short description of the function, usually at most one line long (this is currently nowhere used). This element automatically produces an index entry with the name of the function and, if present, the text of the Label attribute as subentry (see also 3.2-16 and 3.5-4). 3.4-3   From gapdoc.dtd     This element is used within a ManSection element to specify the usage of an operation. The attributes are used exactly in the same way as in the Func element (see 3.4-2). Note that multiple descriptions of the same operation may occur in a document because there may be several declarations in GAP. Furthermore there may be several ManSections for methods of this operation (see 3.4-5) which also use the same name. For reference purposes these must be distinguished by different Label attributes. 3.4-4   From gapdoc.dtd     This element is used within a ManSection element to specify the usage of a constructor. The attributes are used exactly in the same way as in the Func element (see 3.4-2). Note that multiple descriptions of the same constructor may occur in a document because there may be several declarations in GAP. Furthermore there may be several ManSections for methods of this constructor (see 3.4-5) which also use the same name. For reference purposes these must be distinguished by different Label attributes. 3.4-5   From gapdoc.dtd     This element is used within a ManSection element to specify the usage of a method. The attributes are used exactly in the same way as in the Func element (see 3.4-2). Frequently, an operation is implemented by several different methods. Therefore it seems to be interesting to document them independently. This is possible by using the same method name in different ManSections. It is however required that these subsections and those describing the corresponding operation are distinguished by different Label attributes. 3.4-6   From gapdoc.dtd     This element is used within a ManSection element to specify the usage of a filter. The first four attributes are used in the same way as in the Func element (see 3.4-2), except that the Arg attribute is optional. The Type attribute can be any string, but it is thought to be something like Category or Representation. 3.4-7   From gapdoc.dtd     This element is used within a ManSection element to specify the usage of a property. The attributes are used exactly in the same way as in the Func element (see 3.4-2). 3.4-8   From gapdoc.dtd     This element is used within a ManSection element to specify the usage of an attribute (in GAP). The attributes are used exactly in the same way as in the Func element (see 3.4-2). 3.4-9   From gapdoc.dtd     This element is used within a ManSection element to document a global variable. The attributes are used exactly in the same way as in the Func element (see 3.4-2) except that there is no Arg attribute. 3.4-10   From gapdoc.dtd     This element is used within a ManSection element to document a family. The attributes are used exactly in the same way as in the Func element (see 3.4-2) except that there is no Arg attribute. 3.4-11   From gapdoc.dtd     This element is used within a ManSection element to document an info class. The attributes are used exactly in the same way as in the Func element (see 3.4-2) except that there is no Arg attribute. 3.5 Cross Referencing and Citations Cross referencing in the GAPDoc system is somewhat different to the usual LaTeX cross referencing in so far, that a reference knows which type of object it is referencing. For example a reference to a function is distinguished from a reference to a chapter. The idea of this is, that the markup must contain this information such that the converters can produce better output. The HTML converter can for example typeset a function reference just as the name of the function with a link to the description of the function, or a chapter reference as a number with a link in the other case. Referencing is done with the Ref element: 3.5-1   From gapdoc.dtd      The Ref element is defined to be EMPTY. If one of the attributes Func, Oper, Constr, Meth, Prop, Attr, Var, Fam, InfoClass, Chap, Sect, Subsect, Appendix is given then there must be exactly one of these, making the reference one to the corresponding object. The Label attribute can be specified in addition to make the reference unique, for example if more than one method with a given name is present. (Note that there is no way to specify in the DTD that exactly one of the first listed attributes must be given, this is an additional rule.) A reference to a Label element defined below (see 3.5-2) is done by giving the Label attribute and optionally the Text attribute. If the Text attribute is present its value is typeset in place of the Ref element, if linking is possible (for example in HTML). If this is not possible, the section number is typeset. This type of reference is also used for references to tables (see 3.6-5). An external reference into another book can be specified by using the BookName attribute. In this case the Label attribute or, if this is not given, the function or section like attribute, is used to resolve the reference. The generated reference points to the first hit when asking ?book name: label inside GAP. The optional attribute Style can take only the values Text and Number. It can be used with references to sectioning units and it gives a hint to the converter programs, whether an explicit section number is generated or text. Normally all references to sections generate numbers and references to a GAP object generate the name of the corresponding object with some additional link or sectioning information, which is the behavior of Style="Text". In case Style="Number" in all cases an explicit section number is generated. So  Example   described in section    produces: '' described in section 3.4-2. 3.5-2